盒⼦模型
当对⼀个⽂档进⾏布局(layout)的时候,浏览器的渲染引擎会根据标准之⼀的 CSS 基础框盒模型
(CSS basic box model),将所有元素表⽰为⼀个个矩形的盒⼦(box)
⼀个盒⼦由四个部分组成: content 、 padding 、 border 、 margin
从上图可以看到:
•
盒⼦总宽度 = width + padding + border + margin;
•
盒⼦总⾼度 = height + padding + border + margin
也就是, width/height 只是内容⾼度,不包含 padding 和 border 值
所以上⾯问题中,设置 width 为200px,但由于存在 padding ,但实际上盒⼦的宽度有240px
IE 怪异盒⼦模型
•
盒⼦总宽度 = width + margin;
•
盒⼦总⾼度 = height + margin;
也就是, width/height 包含了 padding 和 border 值
BFC
在⻚⾯布局的时候,经常出现以下情况:
这个元素⾼度怎么没了?
这两栏布局怎么没法⾃适应?
这两个元素的间距怎么有点奇怪的样⼦?
原因是元素之间相互的影响,导致了意料之外的情况,这⾥就涉及到 BFC 概念
BFC (Block Formatting Context),即块级格式化上下⽂,它是⻚⾯中的⼀块渲染区域,并且有⼀
套属于⾃⼰的渲染规则:
•
内部的盒⼦会在垂直⽅向上⼀个接⼀个的放置
•
对于同⼀个BFC的俩个相邻的盒⼦的margin会发⽣重叠,与⽅向⽆关。
•
每个元素的左外边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此
•
BFC的区域不会与float的元素区域重叠
•
计算BFC的⾼度时,浮动⼦元素也参与计算
•
BFC就是⻚⾯上的⼀个隔离的独⽴容器,容器⾥⾯的⼦元素不会影响到外⾯的元素,反之亦然
BFC ⽬的是形成⼀个相对于外界完全独⽴的空间,让内部的⼦元素不会影响到外部的元素
利⽤ BFC 的特性,我们将 BFC 应⽤在以下场景:
防⽌margin重叠(塌陷)
可以在 p 外⾯包裹⼀层容器,并触发这个容器⽣成⼀个 BFC ,那么两个 p 就不属于同⼀个 BFC ,
则不会出现 margin 重叠
清除内部浮动
⾃适应多栏布局




