likes
comments
collection
share

CSS 盒模型小记

作者站长头像
站长
· 阅读数 33

CSS 盒模型

我们可以将网页中所有的 HTML 元素都看作是一个个的“盒子”。

类比现实生活中的盒子,HTML 元素盒子的内容相当于盒子内的物品,内边距相当于盒子内物品和外壳之间的距离,边框就相当于盒子表面,元素和元素之间的外边距就相当于盒子之间的距离,由内及外就是:

  • 内容(content):元素的内容 width/height
  • 内边距(padding):内容和边框之间的距离
  • 边框(border):元素自己的边框
  • 外边距(margin):元素和其他元素之间的距离

CSS 盒模型小记

width/height

用于设置内容的宽高。相关的属性有:

  • width:内容宽度
  • max-width:内容最大宽度
  • min-width:内容最小宽度
  • height:内容高度
  • max-height:内容最大高度
  • min-height:内容最小高度

padding

padding 属性用于设置元素的内边距, 也就是元素内容和边框之间的距离。

它是一个复合属性,按照上右下左顺时针的顺序设置内边距:

padding-top: 10px;
padding-right: 10px;
padding-bottom: 10px;
padding-left: 10px;

padding 属性的写法有多种:

  • padding: 10px 相当于同时设置 4 个方向上的内边距;
  • padding: 10px 20px 相当于设置上下内边距为 10px,左右内边距为 20 px;
  • padding: 10px 20px 30px 相当于设置上内边距为 10px,下内边距为 30px,左右内边距为 20 px;

border

用于设置元素边框的尺寸,样式和颜色。

  • border-width:尺寸单位都可以写这里
  • border-style:最常用的就是 solid,其他的还有 none(默认值),dashed(虚线),dotted(斑点) 等等
  • border-color:颜色单位都可以写这里

这三个属性属于复合属性,因为边框是上下左右四条边,在设置时是按照上、右、下、左的顺序去设置。比如:

border-width: 10px;

相当于设置了:

border-top-width: 10px;
border-top-width: 0px;
border-top-width: 10px;
border-top-width: 0px;

border-styleborder-color 也是如此。

最常用的还是 border 属性,它是上面三个属性的复合属性:

border: border-width border-style border-color;

在书写时顺序任意,没有写的就采用默认值。

如果只想设置某一条边,也可以:

border-top: 5px solid gray;

margin

margin 属性用于设置元素的外边距。

它和 padding 的用法一样,按照上、右、下、左的顺序去设置:

margin-top: 10px;
margin-right: 10px;
margin-bottom: 10px;
margin-left: 10px;

在垂直方向上使用 margin 有两个现象需要注意。

margin 折叠

对于垂直排列两个兄弟元素,上面的设置 margin-bottom,下面的设置了 margin-top,则这两个 margin 会发生折叠(collapse )现象,取值大的一方生效。

CSS 盒模型小记

解决方法是只在其中一个盒子上设置 margin。

margin 传递

对于父子元素,如果父子元素之间没有使用 padding 隔绝,子元素设置了 margin-top,会传递给父元素。

此时也会发生折叠现象,也就是如果父元素也设置了 margin-top,则会取值大的一方生效。

CSS 盒模型小记

解决方法就是给父元素设置 border 或者 padding,或者触发 BFC。

元素类型

在 HTML 中,用的最多的两类元素就是块级元素和内联元素,它们对应的盒子就是块级盒子(block box)和内联盒子(inline box)。

块级元素的特性是:

  • 可以设置宽高,边框和内外边距

内联元素的特性是:

  • 不能设置宽高,大小由内容撑开
  • 可以设置水平方向的内外边距,会生效
  • 可以设置垂直方向上的内外边距但不会和其他内联元素产生距离

由此可知,只有块级盒子才能完整使用盒模型的特性。内联盒子只使用盒模型的部分特性。

标准盒模型

在标准盒模型中,盒子的实际大小等同于 width + padding + border ,比如:

.box {
  width: 200px;
  height: 150px;
  margin: 20px;
  padding: 10px;
  border: 5px solid black;
}

则这个盒子的实际宽度是 200 + 10 * 2 + 5 * 2 = 230px,实际高度为 150 + 10 * 2 + 5* 2 = 180px。

CSS 盒模型小记

margin 影响的是盒子外部空间,所以在计算盒子本身大小时不将其计算在内。

使用标准盒模型时,如果修改了 padding 或者 border ,就会造成盒子尺寸发生变化,为了让盒子保持原来的效果不影响其他盒子,就需要去调整内容 width。这会带来一些繁琐。所以还有一种 IE 盒模型供我们使用。

IE 盒模型

IE 盒模型是 IE8以下浏览器所采用的盒模型,它的特点是所设置的 width 就是盒子的尺寸,而内容的宽度等于 width - border - padding。

CSS3 提供了一个box-sizing 属性,默认值是 content-box,也就是设置为标准盒模型。

浏览器默认会使用标准模型。如果需要使用 IE 盒模型,可将属性值设为 border-box

.box {
  box-sizing: border-box;
  width: 200px;
  height: 150px;
  margin: 20px;
  padding: 10px;
  border: 5px solid black;
}

浏览器就会使用 border-box 来定义区域,从而设定您想要的大小。可以看到,盒子包含了 border 和 padding,动态计算出内容 width 为 170 px。

CSS 盒模型小记

标准盒模型和 IE 盒模型的对比

标准盒模型:

实际宽度 = width + padding + border

实际宽度 = height+ padding + border

CSS 盒模型小记

IE 盒模型:

实际宽度 = width

实际宽度 = height

CSS 盒模型小记

总结

本文介绍了 CSS 盒模型,这是使用 CSS 进行页面布局的基础,主要通过 width ,padding,border 和 margin 合理设置盒子的尺寸,展示内容。

在使用 margin 时,会出现 margin 塌陷的现象,可通过开启 BFC 来解决。

CSS3 提供了 box-sizing 属性,可用于切换标准盒模型和 IE 盒模型,可根据需要进行设置。

转载自:https://juejin.cn/post/7158851655507656712
评论
请登录