Block Formatting Context,中文直譯爲塊級格式上下文。less
1. BFC的定義佈局
是 W3C CSS 2.1 規範中的一個概念,它決定了元素如何對其內容進行定位,以及與其餘元素的關係和相互做用。網站
在建立了 Block Formatting Context 的元素中,其子元素會一個接一個地放置。垂直方向上他們的起點是一個包含塊的頂部,兩個相鄰的元素之間的垂直距離取決於 ‘margin’ 特性。在 Block Formatting Context 中相鄰的塊級元素的垂直邊距會摺疊(collapse)。spa
在 Block Formatting Context 中,每個元素左外邊與包含塊的左邊相接觸(對於從右到左的格式化,右外邊接觸右邊), 即便存在浮動也是如此(儘管一個元素的內容區域會因爲浮動而壓縮),除非這個元素也建立了一個新的 Block Formatting Context 。code
從上面的定義咱們能夠看到Document顯示HTML元素的方式和BFC的定義很像,其實咱們能夠認爲Document就是最大的一個擁有BFC的元素了。orm
2. BFC究竟是什麼?blog
當涉及到可視化佈局的時候,Block Formatting Context提供了一個環境,HTML元素在這個環境中按照必定規則進行佈局。一個環境中的元素不會影響到其它環境中的佈局。好比浮動元素會造成BFC,浮動元素內部子元素的主要受該浮動元素影響,兩個浮動元素之間是互不影響的。這裏有點相似一個BFC就是一個獨立的行政單位的意思。一個大的行政單位能夠包含若干個小的行政單位。圖片
3. 怎樣才能造成BFCit
4. BFC的做用io
1. 清除內部浮動
咱們在佈局時常常會遇到這個問題:對子元素設置浮動後,父元素會發生高度塌陷,也就是父元素的高度變爲0。解決這個問題,只須要把把父元素變成一個BFC就好了。經常使用的辦法是給父元素設置overflow:hidden。
2. 垂直margin合併
在CSS當中,相鄰的兩個盒子的外邊距能夠結合成一個單獨的外邊距。這種合併外邊距的方式被稱爲摺疊,而且於是所結合成的外邊距稱爲摺疊外邊距。
摺疊的結果:
3. 建立自適應兩欄佈局
在不少網站中,咱們常看到這樣的一種結構,左圖片+右文字的兩欄結構。
<div style="overflow:hidden;border: solid 1px;"> <div style="background: cadetblue;float:left;width:200px;height:200px;margin: 10px;"></div> <div style="background: wheat;overflow:hidden;margin: 10px;padding: 10px;"> In a block formatting context, boxes are laid out one after the other, vertically, beginning at the top of a containing block. The vertical distance between two sibling boxes is determined by the'margin' properties. Vertical margins between adjacent block-level boxes in a block formatting context collapse. <br/> In a block formatting context, each box's left outer edge touches the left edge of the containing block (for right-to-left formatting, right edges touch). This is true even in the presence of floats (although a box's line boxes may shrink due to the floats), unless the box establishes a new block formatting context (in which case the box itself may become narrower due to the floats). </div> </div>
效果如圖: