CSS進階 --- BFC
BFC (Block formatting context) “塊級格式化上下文”
它是頁面中的一塊渲染區域,有一套渲染規則,決定了其子元素如何佈局,以及和其他元素之間的關係和作用。
轉載自 前端精選文摘:BFC 神奇背後的原理
觸發條件
- 根元素,即HTML元素
- float的值不為none
- overflow的值不為visible
- display的值為inline-block,table-cell,table-caption ,flex,inline-flex
- position為absolute或fixed
佈局規則
- 內部的Box會在垂直方向,一個接一個地放置。
- Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊
- 每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式化,否則相反)。即使存在浮動也是如此。
- BFC的區域不會與float box重疊。
- BFC就是頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面的元素。反之也如此。
- 計算BFC的高度時,浮動元素也參與計算
特性
1.自適應兩欄佈局
<style>
body {width: 300px;position: relative;}
.aside {width: 100px;height: 150px;float: left;background: #f66;}
.main {height: 200px;background: #fcc;}
</style>
<body>
<div class="aside"></div>
<div class="main"></div>
</body>
每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式化,否則相反)。即使存在浮動也是如此。
因此,雖然存在浮動的元素aslide,但main的左邊依然會與包含塊的左邊相接觸。 根據BFC佈局規則第四條:
BFC的區域不會與float box重疊。
我們可以通過通過觸發main生成BFC, 來實現自適應兩欄佈局。
.main {overflow: hidden;}
當觸發main生成BFC後,這個新的BFC不會與浮動的aside重疊。因此會根據包含塊的寬度,和aside的寬度,自動變窄。效果如下:
2.清除內部浮動
<style>
.par {border: 5px solid #fcc;width: 300px;}
.child {border: 5px solid #f66;width:100px;height: 100px;float: left;}
</style>
<body>
<div class="par">
<div class="child"></div>
<div class="child"></div>
</div>
</body>
計算BFC的高度時,浮動元素也參與計算
為達到清除內部浮動,我們可以觸發par生成BFC,那麼par在計算高度時,par內部的浮動元素child也會參與計算。
.par {overflow: hidden;}
3.防止垂直 margin 重疊
可以參考另一篇部落格CSS3進階 — 邊距摺疊
<style>
p {color: #f55;background: #fcc;width: 200px;line-height: 100px;text-align:center;margin: 100px;}
</style>
<body>
<p>Haha</p>
<p>Hehe</p>
</body>
兩個p之間的距離為100px,傳送了margin重疊。
Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊
我們可以在p外面包裹一層容器,並觸發該容器生成一個BFC。那麼兩個P便不屬於同一個BFC,就不會發生margin重疊了。
<style>
.wrap {overflow: hidden;}
p {color: #f55;background: #fcc;width: 200px;line-height: 100px;text-align:center;margin: 100px;}
</style>
<body>
<p>Haha</p>
<div class="wrap">
<p>Hehe</p>
</div>
</body>
相關文章
- 前端進階之什麼是BFC?BFC的原理是什麼?如何建立BFC?前端
- css進階CSS
- CSS高階進階CSS
- CSS中的BFCCSS
- [CSS LEARN]詳研BFCCSS
- 理解 CSS 中的 BFCCSS
- 重拾 CSS 之 BFCCSS
- css知識:flex 、bfcCSSFlex
- CSS中重要的BFCCSS
- 理解 CSS中的BFCCSS
- 理解 CSS 佈局和 BFCCSS
- 前端css佈局之BFC前端CSS
- 細說CSS中的BFCCSS
- CSS: 潛藏著的BFCCSS
- CSS-定位7-BFCCSS
- 《CSS揭祕》——CSS進階必備CSS
- css進階less的使用CSS
- 如何理解CSS中的BFC特性CSS
- 【譯】理解 CSS 佈局和 BFCCSS
- CSS 小結筆記之BFCCSS筆記
- css中BFC元素是什麼?CSS
- 高階前端的進階——CSS之flex前端CSSFlex
- CSS裡的BFC和IFC的用法CSS
- CSS使用的一些小技巧/高階進階CSS
- CSS 核心概念歸納之定位和 BFCCSS
- CSS進階篇--CSS3實現氣泡效果CSSS3
- css零星進階知識點CSS
- 面試之CSS篇 - 邊距重疊與BFC面試CSS
- CSS BFC塊級格式化上下文CSS
- CSS定位問題(1):盒模型、浮動、BFCCSS模型
- CSS基礎——塊級元素、塊級盒子以及BFCCSS
- [佈局概念] 關於CSS-BFC深入理解CSS
- 前端筆記之CSS(下)浮動&BFC&定位&Hack前端筆記CSS
- CSS 中的 float、BFC、position 和 inline-blockCSSinlineBloC
- CSS中關於定位及BFC中的易錯點CSS
- CSS進階內容—盒子和陰影詳解CSS
- CSS進階內容—浮動和定位詳解CSS
- CSS進階09-定位體系差異分析CSS