何為BFC?
BFC(Block formatting context)直譯為”塊級格式化上下文”。它是一個獨立的渲染區域,只有Block-level box參與, 它規定了內部的Block-level Box如何佈局,並且與這個區域外部毫不相干。
跟BFC相關的概念有Box
,Formatting Conetxt
。
Box
Box是CSS佈局的基本單位,分為block-level box和inline-level box,不同型別的Box,會參與不同的Formating。
block-level box
:當display為block, list-item, table的元素
inline-level box
:當displayinline, inline-block, inline-table的元素
Formatting context
Formatting context是頁面中的一塊渲染區域,並且有一套渲染規則,決定其子元素將如何定位,以及其他元素的關係和相互作用。 常見的Formatting context的有Block fomatting context (簡稱BFC)和 Inline formatting context (簡稱IFC)。
觸發BFC
- 根元素
- float屬性不為none;
- position為absolute或fixed
- display為inline-bolck,table-cell,table-caption,flex,inline-felx
- overflow不為visible
BFC規則
- 內部的Box會在垂直方向,一個一個地放置(也可以在水平方向)
- Box的距離由margin決定,屬於同一個BFC的兩個相鄰的Box的margin會發生重疊
- 每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式)。即使存在浮動也是如此
- BFC的區域不會與float box重疊
- BFC就是頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面的元素
- 計算BFC的高度時,浮動元素也參與計算
BFC的用途
自適應兩欄佈局
利用BFC規則BFC的區域不會與float box重疊
。觸發右邊的元素生成BFC,來實現兩欄佈局。
HTML:
<body>
<div class="aside"></div>
<div class="main"></div>
</body>
複製程式碼
CSS:
html{
height: 100%;
}
body{
margin: 0;
padding: 0;
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
}
.aside{
width: 300px;
height: 100%;
float: left;
background: #f66;
}
.main{
height: 100%;
background: #fcc;
overflow: hidden;
}
複製程式碼
清除浮動
利用BFC規則計算BFC的高度時,浮動元素也參與計算
。通過overflow: hidden
觸發父元素生成BFC
HTML:
<div class="out">
<div class="in1"></div>
<div class="in2"></div>
</div>
複製程式碼
CSS:
.out{
width: 500px;
background-color: #666;
overflow: hidden;
}
.in1{
width: 100px;
height: 100px;
float: left;
background-color: #999;
}
.in2{
width: 100px;
height: 100px;
float: left;
background-color: #ccc;
}
複製程式碼
防止margin重疊
利用BFC規則Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊算
,我們可以在一個元素外面包裹一層容器,並處罰金該容器生成一個BFC。則和相鄰元素不屬於同一個BFC,就不會發生margin重疊了。
HTML:
<p>Haha</p>
<div class="wrap">
<p>Hehe</p>
</div>
複製程式碼
CSS:
.wrap{
overflow: hidden;
}
p{
background-color: #333;
width: 200px;
margin: 100px;
}
複製程式碼