BFC 到底是什么?

MDN 對(duì) BFC 的描述:

塊格式化上下文(Block Formatting Context孤澎,BFC) 是Web頁面的可視化CSS渲染的一部分届氢,是布局過程中生成塊級(jí)盒子的區(qū)域,也是浮動(dòng)元素與其他元素的交互限定區(qū)域亥至。

image

往下接著看看:

下列方式會(huì)創(chuàng)建塊格式化上下文:

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

好像有那么點(diǎn)意思絮供,就是說如果符合以上情況,就會(huì)創(chuàng)建 BFC 咯茶敏?
先不管那么多壤靶,寫個(gè)demo試試看:

image

上面代碼,當(dāng)我們給子元素一個(gè)高度時(shí)惊搏,父元素會(huì)將子元素包裹住贮乳。


image

但是,當(dāng)我們給子元素一個(gè)左浮動(dòng)后恬惯,子元素脫離文檔流就跑出去了向拆。


image

上面代碼,當(dāng)我們也給父元素加上一個(gè)左浮動(dòng)后(滿足 float 不為 none)酪耳,觸發(fā)了 BFC浓恳,成功創(chuàng)建了塊格式化上下文,父元素重新包裹住了子元素碗暗。


image

上面代碼颈将,當(dāng)我們讓父元素絕對(duì)定位后也觸發(fā)了 BFC。

image

上面代碼滿足元素的 display 為 inline-block的條件言疗,所以觸發(fā)了 BFC晴圾。

再結(jié)合 MDN 的描述:

創(chuàng)建了塊格式化上下文的元素中的所有內(nèi)容都會(huì)被包含到該BFC中。

image

這下就清楚多了噪奄,BFC 可以用來包住浮動(dòng)元素(不是清除浮動(dòng)喲)死姚。就算子元素再怎么折騰,也不會(huì)影響外部元素了勤篮。

話說回來知允,雖然我可以通過給父元素加 float 等條件觸發(fā) BFC,但是給父元素加 float 這個(gè)行為本身會(huì)不會(huì)影響別的元素呢叙谨?我可不想拆東墻補(bǔ)西墻温鸽。。手负。

于是涤垫,一個(gè)新的屬性display: flow-root誕生了!>怪铡蝠猬!
這個(gè)屬性的功能就一個(gè):觸發(fā) BFC

image

只需給元素加上display: flow-root就能觸發(fā) BFC。

既然說 BFC 能夠包住浮動(dòng)元素统捶,那么我是不是可以利用這一點(diǎn)進(jìn)行布局呢榆芦?

image

上面代碼柄粹,當(dāng)slide-bar左浮時(shí),會(huì)脫離文檔流匆绣,和main發(fā)生重疊驻右。你也許會(huì)說,給main也加個(gè)左浮吧崎淳,看代碼:
image

沒錯(cuò)堪夭,由于沒有寬度,我的main被擠扁了拣凹。森爽。。那為什么不加個(gè)寬度呢嚣镜?
這樣我的main就不能自適應(yīng)了呀(敲黑板E莱佟)
BFC 完美的解決了這個(gè)問題:
image

上面代碼,利用 BFC 使兩個(gè)兄弟元素互不干涉菊匿,實(shí)現(xiàn)了左右自適應(yīng)布局雕旨。

總的來說,你可以這樣理解 BFC:
功能一:爸爸管兒子
功能二:兄弟之間劃清界限

參考資料:
塊格式化上下文
CSS深入理解流體特性和BFC特性下多欄自適應(yīng)布局

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捧请,一起剝皮案震驚了整個(gè)濱河市凡涩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疹蛉,老刑警劉巖活箕,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異可款,居然都是意外死亡育韩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門闺鲸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筋讨,“玉大人,你說我怎么就攤上這事摸恍∠ず保” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵立镶,是天一觀的道長(zhǎng)壁袄。 經(jīng)常有香客問我,道長(zhǎng)媚媒,這世上最難降的妖魔是什么嗜逻? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮缭召,結(jié)果婚禮上栈顷,老公的妹妹穿的比我還像新娘逆日。我一直安慰自己,他們只是感情好萄凤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布室抽。 她就那樣靜靜地躺著,像睡著了一般蛙卤。 火紅的嫁衣襯著肌膚如雪狠半。 梳的紋絲不亂的頭發(fā)上噩死,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天颤难,我揣著相機(jī)與錄音,去河邊找鬼已维。 笑死行嗤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的垛耳。 我是一名探鬼主播栅屏,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼堂鲜!你這毒婦竟也來了栈雳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤缔莲,失蹤者是張志新(化名)和其女友劉穎哥纫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痴奏,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛀骇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了读拆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擅憔。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖檐晕,靈堂內(nèi)的尸體忽然破棺而出暑诸,到底是詐尸還是另有隱情,我是刑警寧澤辟灰,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布屠列,位于F島的核電站,受9級(jí)特大地震影響伞矩,放射性物質(zhì)發(fā)生泄漏笛洛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一乃坤、第九天 我趴在偏房一處隱蔽的房頂上張望苛让。 院中可真熱鬧沟蔑,春花似錦、人聲如沸狱杰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仿畸。三九已至食棕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間错沽,已是汗流浹背簿晓。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留千埃,地道東北人憔儿。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像放可,于是被迫代替她去往敵國(guó)和親谒臼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案耀里? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,759評(píng)論 1 92
  • 前端開發(fā)者丨h(huán)ttp請(qǐng)求 https:www.rokub.com 前言見解有限蜈缤, 如有描述不當(dāng)之處, 請(qǐng)幫忙指出冯挎,...
    麋鹿_720a閱讀 10,934評(píng)論 11 31
  • 先前在學(xué)習(xí)CSS float時(shí)底哥,有同學(xué)提到了BFC這個(gè)詞,作為求知好問的好學(xué)生织堂,哪里不懂查哪里叠艳,那么今天就來研究一...
    這名字真不對(duì)閱讀 6,564評(píng)論 3 19
  • 1. 前言 前端圈有個(gè)“梗”:在面試時(shí)易阳,問個(gè)css的position屬性能刷掉一半人附较,其中不乏工作四五年的同學(xué)。在...
    YjWorld閱讀 4,468評(píng)論 5 15
  • 一闕: 簡(jiǎn)漾三歲的那一年,姥姥心臟病發(fā)事示,她跟隨媽媽回姥姥家鄉(xiāng)早像。坐在汽車上,媽媽叮囑她要乖乖的聽話肖爵,姥姥生病需要靜養(yǎng)...
    MortimerJ閱讀 364評(píng)論 0 0