什么是BFC?

Block Formatting Context

css規(guī)范對(duì)它的定義

  • 浮動(dòng),絕對(duì)定位元素,非塊盒的塊容器(例如,inline-blocks,table-cells和table-captions)和'overflow'不為'visible'的塊盒會(huì)為它們的內(nèi)容建立一個(gè)新的塊格式化上下文
  • 在一個(gè)塊格式化上下文中,盒在豎直方向一個(gè)接一個(gè)地放置,從包含塊的頂部開始。兩個(gè)兄弟盒之間的豎直距離由'margin'屬性決定。同一個(gè)塊格式化上下文中的相鄰塊級(jí)盒之間的豎直margin會(huì)合并

MDN對(duì)BFC的的描述

一個(gè)塊格式化上下文(block formatting context) 是Web頁(yè)面的可視化CSS渲染出的一部分。它是塊級(jí)盒布局出現(xiàn)的區(qū)域,也是浮動(dòng)層元素進(jìn)行交互的區(qū)域。一個(gè)塊格式化上下文由以下之一創(chuàng)建:

  • 根元素或其它包含它的元素
  • 浮動(dòng)元素 (元素的 float 不是 none)
  • 絕對(duì)定位元素 (元素具有 position 為 absolute 或 fixed)
  • 內(nèi)聯(lián)塊 (元素具有 display: inline-block)
  • 表格單元格 (元素具有 display: table-cell,HTML表格單元格默認(rèn)屬性)
  • 表格標(biāo)題 (元素具有 display: table-caption, HTML表格標(biāo)題默認(rèn)屬性)
  • 具有overflow 且值不是 visible 的塊元素,
  • display: flow-root
  • column-span: all 應(yīng)當(dāng)總是會(huì)創(chuàng)建一個(gè)新的格式化上下文,即便具有 -
  • column-span: all 的元素并不被包裹在一個(gè)多列容器中。

知道上面這些好像并沒(méi)有什么用處,我們還是不理解

BFC是什么呢? BFC 是這樣的東西(堆疊上下文也是)

  1. 它沒(méi)有定義
  2. 它只有特性/功能

功能一: 用 BFC 包住浮動(dòng)元素

其實(shí)我也不知道什么意思,不如看幾個(gè)例子吧

給父元素float

給父元素絕對(duì)定位

display:inline-block

overflow不為visible

display:table-cell

display: flow-root

重點(diǎn): display: flow-root(觸發(fā)BFC,無(wú)副作用)

看了上面幾個(gè)例子,父元素觸發(fā)BFC包住兒子,再看一下定義:

  • 浮動(dòng),絕對(duì)定位元素,非塊盒的塊容器(例如,inline-blocks,table-cells和table-captions)和'overflow'不為'visible'的塊盒會(huì)為它們的內(nèi)容建立一個(gè)新的塊格式化上下文

意思是不是很明白了,只要給父元素一些上面規(guī)定的屬性,就會(huì)有BFC,可以包住子元素


margin 合并
image.png

一個(gè)塊格式化上下文包括創(chuàng)建它的元素內(nèi)部所有內(nèi)容,除了被包含于創(chuàng)建新的塊級(jí)格式化上下文的后代元素內(nèi)的元素. 因?yàn)?child為浮動(dòng)元素創(chuàng)建了自己的BFC,所以sunzi不歸parent管了


功能二: 相鄰BFC劃清界限

image.png

兩個(gè)相鄰元素,哥哥和弟弟,哥哥左浮動(dòng),就會(huì)疊在一起,給弟弟一些屬性,創(chuàng)建BFC,就會(huì)和哥哥分開,所以BFC的一個(gè)作用是相鄰的劃清界限

不明白BFC的概念,但是我們應(yīng)該看到之后,就知道這是BFC

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,160評(píng)論 1 92
  • 之前一直聽(tīng)舍友說(shuō)起過(guò)BFC,但老實(shí)說(shuō),我并不理解,后來(lái)看了同學(xué)寫的BFC的內(nèi)容也不是理解的很深,今天看到一個(gè)文章,...
    KoalaT閱讀 1,608評(píng)論 2 4
  • BFC 已經(jīng)是一個(gè)耳聽(tīng)熟聞的詞語(yǔ)了,網(wǎng)上有許多關(guān)于 BFC 的文章,介紹了如何觸發(fā) BFC 以及 BFC 的一些用...
    一木_qintb閱讀 1,577評(píng)論 0 2
  • 先前在學(xué)習(xí)CSS float時(shí),有同學(xué)提到了BFC這個(gè)詞,作為求知好問(wèn)的好學(xué)生,哪里不懂查哪里,那么今天就來(lái)研究一...
    這名字真不對(duì)閱讀 6,693評(píng)論 3 19
  • 前言 在AngularJs1.x中,經(jīng)常會(huì)遇到不能被angular捕捉的一些模型變化,導(dǎo)致模板得不到更新。比如在原...
    lolivialucky閱讀 1,212評(píng)論 1 4

友情鏈接更多精彩內(nèi)容