在解釋 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