CSS 系列之盒模型
标准模型+IE 模型
盒模型又称框模型,包含了内容(content
)、内边距(padding
)、边框(border
)、外边距(margin
)四个要素。
具体排布如下图所示。
盒模型分为两种
- 标准模型
- IE 模型
两种盒模型区别
两种模型的内容宽高计算方式不同
- IE 模型元素宽度
width = content + padding + border
,高度类似宽度计算。
- 标准模型元素宽度
width = content
,高度类似宽度计算。
两种模型的宽和高
通过 css3
新增的属性 box-sizing
可以设置盒模型类型。**在不设置 box-sizing
的情况下,默认为 content-box
**。
- 标准模型 -
content-box
1 | .content-box { |
content-box
设置为标准模型,从图上看,我们就可以知道,我们设置的 width
属性,指的是 content
的宽度。所以我们来计算元素宽度: content-width + 2 * border + 2 * padding = 130px
。
- IE 模型 -
border-box
1 | .border-box { |
.border-box
设置为 IE
模型,从上图看,我们就可以知道,它的元素宽度为 content-width + 2 * padding + 2 * border = 70px + 2 * 10px + 2 * 5px = 100px
。所以元素的宽度就是我们设置的 width: 100px;
。而内容的宽度则是 width - 2 * padding - 2 * border = 70px
。
外边距(margin)重叠
在使用中,在垂直方向上,有两个外边距重叠时,会合并成一个外边距,高度等于两者中的较大者。
需要注意的是,只有在普通文档流中,才会发生合并。行内框、浮动框或绝对定位之间的外边距并不会发生合并。
合并之前,是 30px
,合并之后以大的值保留,剩下20
。
我们来举个例子。
1 | .box { |
1 | <div class="box first"></div> |
为了效果明显,我们在这里添加了 1.5
个格子的高度,来看看效果,我们就发现了,其实只保留了一个格子的高度。所以验证了外边距合并。
而为什么会这样呢,其实在这里就是创建了一个 《CSS 系列之 BFC 容器》,可以在这边文章中去了解 BFC
。
盒模型,在面试中容易遇到,是比较简单但是很重要的知识点。