## 定義
浮動元素和絕對定位元素,非塊級盒子的塊級容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不為“visiable”的塊級盒子,都會為他們的內(nèi)容創(chuàng)建新的BFC(塊級格式上下文)。
在BFC中,盒子從頂端開始垂直地一個接一個地排列,兩個盒子之間的垂直的間隙是由他們的margin 值所決定的。在一個BFC中,兩個相鄰的塊級盒子的垂直外邊距會產(chǎn)生折疊。
在BFC中,每一個盒子的左外邊緣(margin-left)會觸碰到容器的左邊緣(border-left)(對于從右到左的格式來說,則觸碰到右邊緣)。
## 根元素或包含根元素的元素
浮動元素(元素的 float 不是 none)
絕對定位元素(元素的 position 為 absolute 或 fixed)
行內(nèi)塊元素(元素的 display 為 inline-block)
表格單元格(元素的 display為 table-cell,HTML表格單元格默認(rèn)為該值)
表格標(biāo)題(元素的 display 為 table-caption,HTML表格標(biāo)題默認(rèn)為該值)
匿名表格單元格元素(元素的 display為 table、table-row、 table-row-group、table-header-group、table-footer-group(分別是HTML table、row、tbody、thead、tfoot的默認(rèn)屬性)或 inline-table)
overflow 值不為 visible 的塊元素
display 值為 flow-root 的元素
contain 值為 layout、content或 strict 的元素
彈性元素(display為 flex 或 inline-flex元素的直接子元素)
網(wǎng)格元素(display為 grid 或 inline-grid 元素的直接子元素)
多列容器(元素的 column-count 或 column-width 不為 auto,包括 column-count 為 1)
column-span 為 all 的元素始終會創(chuàng)建一個新的BFC,即使該元素沒有包裹在一個多列容器中(標(biāo)準(zhǔn)變更,Chrome bug)。
創(chuàng)建了塊格式化上下文的元素中的所有內(nèi)容都會被包含到該BFC中。
塊格式化上下文對浮動定位(參見 float)與清除浮動(參見 clear)都很重要。浮動定位和清除浮動時只會應(yīng)用于同一個BFC內(nèi)的元素。浮動不會影響其它BFC中元素的布局,而清除浮動只能清除同一BFC中在它前面的元素的浮動。外邊距折疊(Margin collapsing)也只會發(fā)生在屬于同一BFC的塊級元素之間。
浮動元素和絕對定位元素,非塊級盒子的塊級容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不為“visiable”的塊級盒子,都會為他們的內(nèi)容創(chuàng)建新的BFC(塊級格式上下文)。
首先BFC是一個名詞,是一個獨(dú)立的布局環(huán)境,我們可以理解為一個箱子(實際上是看不見摸不著的),箱子里面物品的擺放是不受外界的影響的。轉(zhuǎn)換為BFC的理解則是:BFC中的元素的布局是不受外界的影響(我們往往利用這個特性來消除浮動元素對其非浮動的兄弟元素和其子元素帶來的影響。)并且在一個BFC中,塊盒與行盒(行盒由一行中所有的內(nèi)聯(lián)元素所組成)都會垂直的沿著其父元素的邊框排列。
*****
##### 參考鏈接
[深入理解BFC和Margin Collapse](https://www.w3cplus.com/css/understanding-bfc-and-margin-collapse.html)
- Houser的個人Wiki
- Javascript
- 語言基礎(chǔ)
- 變量
- 操作符整理
- new
- Ajax
- 事件
- 遍歷
- 字符串轉(zhuǎn)數(shù)字方法
- 原型鏈
- apply/call/bind
- 異步編程
- 模塊化
- 繼承的方式
- 對象的創(chuàng)建方式
- 內(nèi)存泄漏
- js延遲加載
- 數(shù)據(jù)類型
- typeof
- 垃圾回收
- 作用域
- 閉包
- this
- es6
- 代碼片段
- 對象拷貝
- Node.js
- 模塊
- 庫&框架
- Jquery
- 優(yōu)點(diǎn)
- 組件庫
- React
- React原理
- Key的作用
- JSX
- Redux
- Mobx
- 生命周期
- Typescript
- HTML&CSS
- viewport meta
- websocket
- webwork
- web GL
- html全局屬性
- iframe
- 頁面間通訊
- SVG
- 盒模型
- 輸入url到顯示的過程
- BFC(塊格式化上下文)
- 動畫
- CSS 秘密花園
- 前端
- webpack
- 后端
- nginx
- springboot
- 網(wǎng)絡(luò)
- 跨域
- 網(wǎng)絡(luò)攻擊
- TCP
- Https
- Http狀態(tài)碼
- 緩存策略
- Http2
- 數(shù)據(jù)結(jié)構(gòu)&算法
- 常用數(shù)據(jù)結(jié)構(gòu)
- 開發(fā)&編碼
- Git
- 分支策略
- 基本操作
- VSCode
- 工具
- App開發(fā)
- ReactNative
- 項目&業(yè)務(wù)
- Docker
- 協(xié)作工具
- 前端性能優(yōu)化
- 登錄授權(quán)
- 軟件工程
- 漸進(jìn)增強(qiáng)和優(yōu)雅降級
- 計算機(jī)基礎(chǔ)
- 設(shè)計模式
- 單例模式
- 工廠模式
- 發(fā)布訂閱模式
- 適配器模式
- 代理模式
- 外觀模式
- 命令模式
- 橋接模式
- 模板模式
- 職責(zé)鏈模式
- 正則
