BFC
BFC: 块级格式化上下文,是指一个独立渲染的块级区域,该区域有一套渲染规则来元素区块级盒子的布局,且与外界无关.
BFC的生成条件
css2.1中规定满足以下条件之一的元素即会生成BFC:
- float 的值不为none;
- overflow的值不为visible;
- display 的值为inline-block、table-caption;
- position的值为absolute或fixed
BFC的约束规则
浏览器对BFC块区域的约束如下:
- 内部的box会在垂直方向上一个接一个放置;
- 同一BFC内两个相邻Box的margin会发生重叠,与方向无关;
- BFC中的子元素不会超出它的包含块,除了position 为 absolute 的元素;
- BFC区域不会与float的元素区域重叠;
- 计算BFC的高度时,浮动子元素也参与计算;
- BFC是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。
BFC的应用
防止margin重叠
在同一个BFC中相邻的两个box才会发生margin的重叠。 要阻止margin重叠,只要别将两个元素放在同一个BFC中即可。
浮动相关问题
浮动的子元素会造成父元素的坍塌,让父元素形成BFC,则可以让浮动的子元素也参与到高度的计算中。
常用的方法是为父元素设置 overflow:hidden 或浮动父元素。
多栏布局的一种方式
上文提到的一条规则:与浮动元素相邻的已生成BFC的元素不能与浮动元素互相覆盖。利用该特性可以作为多栏布局的一种实现方式。 这种布局的特点在于左右俩栏的宽度固定,中间栏可以根据浏览器宽度自适应。