直譯爲"塊級格式化上下文"。它是一個獨立的渲染區域,只有Block-level box參與, 它規定了內部的Block-level Box如何佈局,而且與這個區域外部絕不相干。javascript
<html> <head> <meta charset="utf-8"> <title></title> </head> <style> body { width: 300px; position: relative; } .aside { width: 100px; height: 150px; float: left; background: blue; } .main { height: 200px; background: green; } </style> <body> <div class="aside"></div> <div class="main"></div> </body> </html>
原始效果:html
根據BFC
佈局規則第3條:java
每一個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式化,不然相反)。即便存在浮動也是如此。
所以,雖然存在浮動的元素aslide,但main的左邊依然會與包含塊的左邊相接觸。ide
根據BFC
佈局規則第4條:佈局
BFC
的區域不會與float box
重疊。
咱們能夠經過經過觸發main生成BFC
, 來實現自適應兩欄佈局。flex
.main { overflow:hidden;//使main生成BFC height: 200px; background: green; }
效果:spa
<html> <head> <meta charset="utf-8"> <title></title> </head> <style> .par { border: 5px solid darkgray; width: 300px; } .child { border: 5px solid pink; width:100px; height: 100px; float: left; } </style> <body> <div class="par"> <div class="child"></div> <div class="child"></div> </div> </body> </html>
原始效果:
根據BFC
佈局規則第六條:code
計算
BFC
的高度時,浮動元素也參與計算
爲達到清除內部浮動,能夠觸發par生成BFC,那麼par在計算高度時,par內部的浮動元素child也會參與計算。orm
代碼:htm
.par { border: 5px solid darkgray; width: 300px; overflow:hidden; }
效果:
<html> <head> <meta charset="utf-8"> <title></title> </head> <style> p { color: #f55; background: lightcyan; width: 200px; line-height: 100px; text-align:center; margin: 100px; } </style> <body> <p>1111</p> <p>2222</p> </body> </html>
原始效果(兩個部分的margin重疊了):
根據BFC佈局規則第二條:
Box
垂直方向的距離由margin決定。屬於同一個BFC
的兩個相鄰Box
的margin會發生重疊
咱們能夠在其中一個p外面包裹一層容器,並觸發該容器生成一個BFC
。那麼兩個P便不屬於同一個BFC
,就不會發生margin重疊了。
<style> .wrap { overflow: hidden; } p { color: #f55; background: lightcyan; width: 200px; line-height: 100px; text-align:center; margin: 100px; } </style> <body> <p>1111</p> <div class="wrap"> <p>2222</p> </div> </body>
<html> <head> <meta charset="utf-8"> <title></title> </head> <style> .father { width:300px; height:300px; background-color: red; } .son { width:100px; height:100px; background-color: darkgray; margin-top:50px; } </style> <body> <div class="father"> <div class='son'></div> </div> </body> </html>
本來,正確的顯示方式,應該是粉色盒子與紅色盒子的頂部距離爲50px,可是因爲margin的塌陷問題,致使盒子內部的佈局影響到了外部。這個時候,就能夠觸發BFC,將父盒子變成一個獨立的區域,這樣在BFC區域內部的任何操做,都不會影響到外部。
代碼:
.father { width:300px; height:300px; background-color: red; overflow:hidden; }