什麼是BFC(Block Formatting Context )
定義:
浮動元素和絕對定位元素,非塊級盒子的塊級容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不為“visiable”的塊級盒子,都會為他們的内容建立新的BFC(塊級格式上下文)。
可以了解為BFC是一個塊獨立的作用域,它有些自己的特性
那如何産生BFC?
通過以下幾種方法就能生成一個BCF
-
的值不是float
none
-
的值不是position
或者static
。relative
-
的值是display
、inline-block
、table-cell
、flex
或者table-caption
inline-flex
-
的值不是overflow
visible
BFC有哪些特點
- 根元素會預設建立一個BFC
- 在同一個BCF中,每一個元素左外邊與包含塊(父塊)的左邊相接觸(對于從右到左的格式化,右外邊接觸右邊), 即使存在浮動也是如此(盡管一個元素的内容區域會由于浮動而壓縮–包裹性),除非這個元素也建立了一個新的 BFC。
BFC是什麼?有什麼用? BFC是什麼?有什麼用? 就像上面的例子,container是一個BFC,裡面的元素按照BFC是什麼?有什麼用?
,就算是浮動元素也是這樣,是以兩者會發生重疊‘元素左外邊與包含塊(父塊)的左邊相接觸’
-
建立了BFC的元素不能與浮動元素重疊。
還是上面那個例子,如果把d2建立為BFC,那麼兩者将不會發生重疊
BFC是什麼?有什麼用? BFC是什麼?有什麼用? -
當容器有足夠的剩餘空間容納 BFC 的寬度時,所有浏覽器都會将 BFC 放置在浮動元素所在行的剩餘空間内。
還是上面那個例子,d2之是以會放在d1後面,就是因為這條規則,假如container寬度隻有60px,那麼剩餘10px的空間放不下d2(50px),就會将d2放到下一行(少數浏覽器可能實作不同)
-
css規定,在計算生成了 BFC 的元素的高度時,其浮動子元素應該參與計算。
是以說BFC包含浮動元素不會發生高度坍塌,可以利用BFC這個特性來清除浮動。
-
兩個相鄰的普通流中的塊在垂直位置的空白邊會發生折疊現象。
也就是處于同一個BFC中的兩個垂直視窗的margin會重疊,解決這種現象可以分别給兩個塊包裹一層BFC,這樣就不會折疊了。因為BFC還有一個特性就是:生成 BFC 的元素不會和在流中的子元素發生空白邊折疊。
BFC是什麼?有什麼用? BFC是什麼?有什麼用? 上面這種情況BFC是什麼?有什麼用?
會發生折疊,本來應該是2em,折完隻剩1em(是以說margin也可以了解為margin
)。然後為了解決這種情況,我們分别給b1,b2包裹一個BFC‘最小的間距’
BFC是什麼?有什麼用? BFC是什麼?有什麼用? 這樣就能解決折疊問題了。不能直接讓b1,b2變成BFC,這樣是無法解決折疊的,因為b1,b2這時是處于同一個BFC中!(你可以僅把BFC是什麼?有什麼用?
裡面的.BFC
注釋掉,看看會發生什麼,然後結合這個現象去了解接下來這一條特性)overflow
- BCF就是頁面上的一個隔離的獨立容器,容器裡面的子元素不會在布局上影響到外面的元素,反之也是如此。