1. 程式人生 > >CSS 之 BFC

CSS 之 BFC

css 之 bfc

BFC 的概念:

BFC 直譯為“塊級格式化上下文”,它是一個獨立的渲染區域,只有 Block-level-box 參與,它規定了獨立的渲染區域內 Block-level-box 是如何布局的,並且這個獨立區域與外部區域互不影響。


以下元素會觸發 BFC:

1、根元素

2、float 屬性不為 none 的元素

3、position 屬性為 absolute 或 fixed 的元素

4、display 屬性為 inline-block,table-cell,table-caption,flex,inline-flex 的元素

5、overflow 屬性不為 visible 的元素

BFC 的布局規則:

1、獨立渲染區域內的 Block-level-box 會在垂直方向上,一個接一個的排列;

2、Block-level-box 在垂直方向上的距離由 margin 決定,屬於同一個 BFC 的兩個相鄰 Block-level-box 的 margin 會發生重疊;

3、每個 Block-level-box 的左外邊距都會與獨立渲染區域的左邊框相重疊;

4、BFC 生成的獨立渲染區域不會與 float box 相重疊;

5、計算獨立渲染區域高度時,浮動元素也參與計算;

BFC 的作用:

1、清除浮動

2、防止 margin 重疊

3、多欄布局

1、清除浮動

具體示例:
<div id="container">
<div class="item"></div>
<div class="item"></div>
</div>

#container {
border: 1px solid red;
width: 500px;
}
#container .item {
width: 200px;
height: 200px;
float: left;
border: 1px solid blue;
}
PS:在這種情況下 container 的高度不會被自動撐開;我們可以通過觸發 container 生成 BFC,當 container 生成 BFC 後,浮動元素會參與高度的計算從而使 container 的高度自動撐開。
#container {
width: 500px;
overflow: hidden;
border: 1px solid red;
}

2、防止 margin 重疊

具體示例:
<div class="item"></div>
<div class="item"></div>

.item {
width: 200px;
height: 200px;
margin: 20px;
background: #000;
}
PS:兩個塊級元素垂直方向上的距離為 20px,即在垂直方向上塊級元素的 margin 會發生重疊。屬於同一個 BFC 的兩個相鄰 Block-level-box 的 margin 發生了重疊。我們可以在其中一個 div 的外面再包裹一層容器,並觸發該容器生成一個 BFC。那麽這兩個 div 便不屬於同一個 BFC 就不會發生 margin 重疊了。

<div id="container">
<div class="item"></div>
</div>
<div class="item"></div>
#container {
overflow: hidden;
border: 1px solid red;
}
.item {
width: 200px;
height: 200px;
margin: 20px;
background: #000;
}

3、多欄布局

具體示例:
<div id="container">
<div class="left"></div>
<div class="right"></div>
</div>

#container {
width: 600px;
position: relative;
}
#container .left {
width: 200px;
height: 300px;
float: left;
background: red;
}
#container .right {
height: 400px;
background: bule;
}
PS:根據 BFC 布局規則:BFC 的區域不會與 float box 相重疊。所以我們可以通過觸發右側的 div 生成 BFC,來實現自適應兩欄布局,即左欄寬度固定,右欄可以根據瀏覽器寬度自適應。
#container .right {
height: 400px;
background: bule;
overflow: hidden;
}

PS:在 CSS2 中有 BFC 和 IFC 的概念,CSS3 中新增了 FFC 和 GFC。




本文出自 “珞辰的博客” 博客,轉載請與作者聯系!

CSS 之 BFC