在解释 BFC 是什么以前,须要先介绍 Box、Formatting Context的概念。css
Box 是 CSS 布局的对象和基本单位, 直观点来讲,就是一个页面是由不少个 Box 组成的。元素的类型和 display 属性,决定了这个 Box 的类型。 不一样类型的 Box, 会参与不一样的 Formatting Context(一个决定如何渲染文档的容器),所以Box内的元素会以不一样的方式渲染。让咱们看看有哪些盒子:html
Formatting context 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,而且有一套渲染规则,它决定了其子元素将如何定位,以及和其余元素的关系和相互做用。最多见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC)。css3
CSS2.1 中只有 BFC
和 IFC
, CSS3 中还增长了 GFC
和 FFC。
ide
BFC 定义:BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,而且与这个区域外部绝不相干。布局
简单点,说话的方式简单点...BFC
就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。spa
验证特性:code
<div class="div1" style="width: 100px;height: 100px;background-color:blue;margin-bottom: 100px;"></div> <div class="div2" style="width: 100px;height: 100px;background-color:red;margin-top: 50px;"></div> <br> <div style="overflow:hidden;"> <div class="div1" style="width: 100px;height: 100px;background-color:blue;margin-bottom: 100px;"></div> </div> <div class="div2" style="width: 100px;height: 100px;background-color:red;margin-top: 50px;"></div>
<br>前的.div1和.div2处在同一个BFC中,所以会在垂直方向发生margin重叠(水平方向永远不会发生的)。orm
<br>后的.div1和.div2处在俩个不一样的BFC中,所以没有发生margin重叠。htm
1 <style> 2 body { 3 width: 300px; 4 position: relative; 5 } 6 .aside { 7 width: 100px; 8 height: 150px; 9 float: left; 10 background: #f00; 11 } 12 .main { 13 //overflow: hidden; 不是BFC时 14 height: 200px; 15 background: #00f; 16 } 17 </style> 18 </head> 19 <body> 20 <div class="aside"></div> 21 <div class="main"></div> 22 </body>
承接特性3的验证,加上注释部分,使.main变成BFC,立竿见影的效果以下图:对象
以上特性均验证了一点(特性4): BFC
就是页面上的一个隔离的独立容器,把内部子元素包裹起来,使其不会影响到外面的元素。反之也如此。
一、防止margin重叠,应用特性2
处于同一个BFC中的元素相互影响,可能发生外边距重叠;若是这俩个相邻的块不属于同一个块级格式化上下文,那么它们的外边距就不会重叠
二、清除浮动:应用特性四、5
三、同时,使用float/position+margin,结合BFC的特性,灵活建立多栏布局,应用特性6
参考文章:
http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html