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中的BFCCSS
- css知識:flex 、bfcCSSFlex
- CSS中重要的BFCCSS
- 重拾 CSS 之 BFCCSS
- 理解 CSS 中的 BFCCSS
- [CSS LEARN]詳研BFCCSS
- 前端css佈局之BFC前端CSS
- 理解 CSS 佈局和 BFCCSS
- css進階less的使用CSS
- 如何理解CSS中的BFC特性CSS
- 【譯】理解 CSS 佈局和 BFCCSS
- CSS 小結筆記之BFCCSS筆記
- 高階前端的進階——CSS之flex前端CSSFlex
- CSS裡的BFC和IFC的用法CSS
- CSS使用的一些小技巧/高階進階CSS
- CSS 中的 float、BFC、position 和 inline-blockCSSinlineBloC
- CSS BFC塊級格式化上下文CSS
- 面試之CSS篇 - 邊距重疊與BFC面試CSS
- 前端筆記之CSS(下)浮動&BFC&定位&Hack前端筆記CSS
- CSS中關於定位及BFC中的易錯點CSS
- CSS進階09-定位體系差異分析CSS
- CSS進階內容—盒子和陰影詳解CSS
- CSS進階內容—浮動和定位詳解CSS
- BFC
- css--BFC是什麼,有什麼用,怎麼用?CSS
- 前端進階(12) – css 的弱化與 js 的強化前端CSSJS
- CSS進階(13)—— position:absolute如此高深,我當真不懂(中)CSS
- 【進階系列】前端開發環境構建(一)CSS -- Sass前端開發環境CSS
- 現代 CSS 高階技巧,完美的波浪進度條效果!CSS
- CSS進階內容——佈局技巧和細節修飾CSS
- 22 BFC
- BFC原理
- BFC理解
- 理解BFC
- position和BFC
- 如何形成BFC?
- 第二階段-cssCSS