一、BFC定義
1、 box
box是css佈局的基本單位,元素的型別和display屬性決定了box的型別。不同的型別的盒子會參與不同的formatting context。
block-level box :display屬性為block、list-item(作為列表顯示的元素)、table的元素會生成block-level box。
2、formatting context
它是頁面中的一塊渲染區域,並且有一套渲染規則,它決定了其子元素將如何定位,以及和其他元素的關係和相互作用
- BFC(block formatting context)為塊級格式化上下文,他是一個獨立渲染區域,並且只有block-level box參與,規定了block-level box內部的佈局方式。
二、佈局規則
1、內部的box會在垂直方向上一個接一個的放置
<div class="div1"></div>
<div class="div2"></div>
複製程式碼
![BFC原理](https://i.iter01.com/images/d692f0be8abb74a204c96a472379ae8974e3128ff16dab2c5da9249c1e4c7a11.jpg)
![BFC原理](https://i.iter01.com/images/3bad73fed99ff66672fb237c16c74adf9cd916e14085308267022de993275382.jpg)
margin: 20px 0
,給div2設定margin: 30px 0
,此時div1和div2之間的間距為30px。
- 解決方式 讓兩個元素不屬於同一個BFC
3、BFC區域不會與浮動元素重疊
<div class="left"></div>
<div class="main"></div>
複製程式碼
此時main元素沒有產生bfc,left元素浮動,效果如下:
![BFC原理](https://i.iter01.com/images/0f9fd36eb59a8dec3f63588b034fbb13de2308524a206b2a459765b8a97aeba6.jpg)
overflow:hidden
變為bfc,效果如下:
![BFC原理](https://i.iter01.com/images/3cf3b34ae66237955feaa961d3b4c6fedec8bb703df52c535a90255b547835a9.jpg)
5、每個元素的margin box的左邊, 與 包含塊 border box的左邊相接觸(對於從左往右的格式化,否則相反)。即使存在浮動也是如此
![BFC原理](https://i.iter01.com/images/7112295e1ed3dbc8709081b794bcc60b4663f4e03ba353b1d1714b1c52ab1b0f.jpg)
3、產生BFC的方式
1、overflow屬性不是visible
2、float屬性不為none
3、display屬性為inline-block、table-cell、flex、inline-flex、table-caption
4、position為absolute、fixed
5、body根元素