BFC詳解

BFC定義


在解釋BFC之前罐韩,先說一下文檔流龙考。我們常說的文檔流其實分為定位流晦款、浮動流和普通流三種缓溅。而普通流其實就是指BFC中的FC坛怪。FC是formatting context的首字母縮寫更啄,直譯過來是格式化上下文锈死,它是頁面中的一塊渲染區(qū)域其屏,有一套渲染規(guī)則川背,決定了其子元素如何布局熄云,以及和其他元素之間的關(guān)系和作用缴允。常見的FC有BFC锈候、IFC泵琳,還有GFC和FFC获列。BFC是block formatting context歌懒,也就是塊級格式化上下文及皂,是用于布局塊級盒子的一塊渲染區(qū)域验烧。

個人理解是:BFC就是一個有特定規(guī)則的區(qū)域碍拆,這塊區(qū)域內(nèi)的元素只遵循特定規(guī)則端幼,不受外部影響弧满。

BFC內(nèi)部規(guī)則。

  1. 內(nèi)部的Box會在垂直方向滑进,一個接一個地放置扶关。PS:感覺不是廢話么
  1. Box垂直方向的距離由margin決定节槐。屬于同一個BFC的兩個相鄰Box的margin會發(fā)生重疊疯淫。
  2. 每個元素的margin box的左邊戳玫, 與包含塊border box的左邊相接觸(對于從左往右的格式化咕宿,否則相反)缆镣。即使存在浮動也是如此。
  3. BFC的區(qū)域不會與float box重疊董瞻。
  4. BFC就是頁面上的一個隔離的獨立容器钠糊,容器里面的子元素不會影響到外面的元素抄伍。反之也如此。
    計算BFC的高度時攀甚,浮動元素也參與計算秋度。

相信這5個東西都看得有點懵~~所以接下來濃縮介紹最常用的規(guī)則整理静陈。

規(guī)則一:BFC是一塊獨立規(guī)則的區(qū)域诞丽,不受外部影響僧免,而內(nèi)部元素也不會影響到外部懂衩。
規(guī)則二:清楚浮動。觸發(fā)BFC后能感知得到浮動元素的存在胡岔。
規(guī)則三:BFC感知得到浮動元素的高度法希。

如何觸發(fā)BFC

  1. 根元素
  2. float屬性不為none
  3. position為absolute或fixed
  4. display為inline-block, table-cell, table-caption, flex, inline-flex
  5. overflow不為visible(常用)

接下來是一些經(jīng)典的應(yīng)用場景。

  • 布局的浮動清除:規(guī)則二

未觸發(fā)BFC前:
2.png
觸發(fā)BFC后:
3.png

HTML:

<body>
<div class="header"></div>
  <div class="content">
    <div class="aside">這是設(shè)置浮動的元素</div>
    <div class="main"></div>
  </div>
<div class="footer"></div>
</body>`
CSS:
.header,.footer{
  height:50px;
  background:red;
}
.aside{
  height:400px;
  width:200px;
  background:#09f;
  font-size:30px;
  float:left;
}
.main{
  height:200px;
  margin-left:200px;
  background:pink
}
.content{
  overflow:auto;//在父元素觸發(fā)BFC,也可以試試其他的觸發(fā)方式靶瘸。ps:不過處理起來會比較麻煩苫亦。
  //
}

點擊代碼演示

這里我們介紹一下使用BFC清除浮動和用clear清除浮動的區(qū)別:

clear清除浮動:

<style>
.header,.footer{
  height:50px;
  background:red;
}
.aside{
  height:400px;
  width:200px;
  background:#09f;
  font-size:30px;
  float:left;
}
.main{
  height:200px;
  margin-left:200px;
  background:pink
}
.clear{
  clear:both;
}
</style>
<div class="header"></div>
  <div class="content">
    <div class="aside">這是設(shè)置浮動的元素</div>
    <div class="main"></div>
    <div class="clear"></div>/*在這里添加一個clear的空div*/
  </div>
<div class="footer"></div>

二者都能達(dá)到浮動的效果,不同的是怨咪,BFC清除浮動是因為觸發(fā)到BFC能感知得到浮動元素屋剑,計算高度時候浮動元素。而clear清除浮動時候诗眨,父元素只計算到.clear的div的高度唉匾,但是.clear感知得到浮動元素。當(dāng)我們添加clear:both的時候匠楚,.clear的就被浮動元素擠下去了巍膘。規(guī)則三

  • 清除外邊距。規(guī)則二

未清除邊距合并前:

4.png

給其中一個添加一個warp并且觸發(fā)warp的BFC
5.png

html:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
<div class="content">
  <div class="box1"></div>
  <div class="warp">
    <div class="box2"></div>
  </div>
</div>
</body>
</html>`
CSS:
`.box1,.box2{
  width:100px;
  height:100px;
}
.box1{
  background:#09f;
  margin-bottom:100px;
}
.box2{
  margin-top:100px;
  background:pink;
}
.warp{
  overflow:auto;
}

代碼演示點這里

PS:對比的話可以把Html里面的warp去掉試試。

再再PS:外邊距合并有2種,垂直margin的合并茉帅,還有父子margin的合并味滞,在這里后者就不演示了可以點擊這里

結(jié)論:

BFC主要就是圍繞這3個主要規(guī)則去使用。如果對W3C的理解很困難的話,只需要記住這3個規(guī)則和觸發(fā)BFC的條件就行~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妒御,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哼鬓,更是在濱河造成了極大的恐慌称簿,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呜魄,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門键痛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昨忆,“玉大人叔磷,你說我怎么就攤上這事寥裂∨堤颍” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵拌喉,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么市袖? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任抒钱,我火速辦了婚禮蕾额,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棘钞。我一直安慰自己符隙,他們只是感情好拱绑,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吧恃,像睡著了一般痕寓。 火紅的嫁衣襯著肌膚如雪礼仗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天慎恒,我揣著相機(jī)與錄音摘盆,去河邊找鬼。 笑死蚤认,一個胖子當(dāng)著我的面吹牛米苹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烙懦,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驱入,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氯析?” 一聲冷哼從身側(cè)響起亏较,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掩缓,沒想到半個月后雪情,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡你辣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年巡通,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舍哄。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡宴凉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出表悬,到底是詐尸還是另有隱情弥锄,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布蟆沫,位于F島的核電站籽暇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏饭庞。R本人自食惡果不足惜戒悠,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舟山。 院中可真熱鬧绸狐,春花似錦、人聲如沸累盗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幅骄。三九已至,卻和暖如春本今,著一層夾襖步出監(jiān)牢的瞬間拆座,已是汗流浹背主巍。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留挪凑,地道東北人孕索。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像躏碳,于是被迫代替她去往敵國和親搞旭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案菇绵? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評論 1 92
  • relative:生成相對定位的元素肄渗,通過top,bottom,left,right的位置相對于其正常位置進(jìn)行定位...
    zx9426閱讀 943評論 0 2
  • 浮動元素有什么特征翎嫡?對父容器、其他浮動元素永乌、普通元素惑申、文字分別有什么影響? 浮動元素的特征,對普通元素的影響:一個...
    饑人谷_LEO閱讀 668評論 0 0
  • BFC 定義 BFC 全稱 Block Formatting Context翅雏,塊級格式化上下文圈驼。 一個 BFC 是...
    shadow123閱讀 979評論 1 1
  • 1.在什么場景下會出現(xiàn)外邊距合并橄妆?如何合并衙伶?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 概念:在CSS當(dāng)...
    饑人谷_任磊閱讀 651評論 0 3