淺談BFC

常見的布局方案

在講 BFC 之前怎栽,我們先來了解一下常見的布局方案痕檬,有三種常見方案:

  • 普通流 (normal flow)
    在普通流中肤寝,元素按照其在 HTML 中的先后位置至上而下布局澳骤,在這個過程中阀圾,行內(nèi)元素水平排列立倍,直到當
    行|被占滿然后換行灭红,塊級元素則會被渲染為完整的一個新行,除非另外指定口注,否則所有元素默認都是普通流定
    位变擒,也可以說,普通流中元素的位置由該元素在 HTML 文檔中的位置決定寝志。
  • 浮動 (float)
    在浮動布局中娇斑,元素首先按照普通流的位置出現(xiàn),然后根據(jù)浮動的方向盡可能的向左邊或右邊偏移材部,其效果與印刷排版中的文本環(huán)繞相似毫缆。
  • **絕對定位 (absolute positioning) **
    在絕對定位布局中,元素會整體脫離普通流乐导,因此絕對定位元素不會對其兄弟元素造成影響苦丁,而元素具體的位置由絕對定位的坐標決定。

什么是BFC?

定義
根據(jù)w3c規(guī)范中的定義:浮動元素和絕對定位元素物臂,非塊級盒子的塊級容器(例如 inline-blocks, table-cells, 和 table-captions)旺拉,以及overflow值不為“visiable”的塊級盒子,都會為他們的內(nèi)容創(chuàng)建新的BFC(塊級格式上下文)鹦聪。

布局規(guī)則

  • 內(nèi)部的Box會在垂直方向账阻,一個接一個地放置。
  • Box垂直方向的距離由margin決定泽本。屬于同一個BFC的兩個相鄰Box的margin會發(fā)生重疊
  • 每個元素的margin box的左邊(margin-left)淘太, 與容器的左邊緣(border-left)相接觸(對于從左往右的格式化,否則相反)规丽。即使存在浮動也是如此蒲牧。
  • BFC的區(qū)域不會與float box重疊。
  • BFC就是頁面上的一個隔離的獨立容器赌莺,容器里面的子元素不會影響到外面的元素冰抢。反之也如此。
  • 計算BFC的高度時艘狭,浮動元素也參與計算

所以通俗的講挎扰,BFC是一個獨立的渲染環(huán)境翠订,我們可以理解為一個箱子(實際上是看不見摸不著的),箱子里面物品的擺放是不受外界的影響的遵倦。

哪些元素會生成BFC尽超?

  • body 根元素
  • 浮動元素:float 除 none 以外的值
  • 絕對定位元素:position (absolute、fixed)
  • display 為 inline-block梧躺、table-cells似谁、flex
  • overflow 除了 visible 以外的值 (hidden、auto掠哥、scroll)

合并外邊距與BFC

在CSS當中巩踏,相鄰的兩個盒子(可能是兄弟關系也可能是祖先關系)的外邊距可以結合成一個單獨的外邊距。這種合并外邊距的方式被稱為折疊续搀,并且因而所結合成的外邊距稱為折疊外邊距塞琼。

折疊的結果

  • 兩個相鄰的外邊距都是正數(shù)時,折疊結果是它們兩者之間較大的值目代。
  • 兩個相鄰的外邊距都是負數(shù)時屈梁,折疊結果是兩者絕對值的較大值。
  • 兩個外邊距一正一負時榛了,折疊結果是兩者的相加的和在讶。

產(chǎn)生折疊的必備條件:margin必須是鄰接的!
而根據(jù)w3c規(guī)范,兩個margin是鄰接的必須滿足以下條件:

  • 必須是處于常規(guī)文檔流(非float和絕對定位)的塊級盒子,并且處于同一個BFC當中霜大。
  • 沒有線盒构哺,沒有空隙(clearance,下面會講到)战坤,沒有padding和border將他們分隔開
  • 都屬于垂直方向上相鄰的外邊距曙强,可以是下面任意一種情況元素的margin-top與其第一個常規(guī)文檔流的子元素的margin-top
  • 元素的margin-bottom與其下一個常規(guī)文檔流的兄弟元素的margin-top
  • height為auto的元素的margin-bottom與其最后一個常規(guī)文檔流的子元素的margin-bottom
  • 高度為0并且最小高度也為0,不包含常規(guī)文檔流的子元素途茫,并且自身沒有建立新的BFC的元素的margin-top和margin-bottom

以上的條件意味著下列的規(guī)則:

  • 創(chuàng)建了新的BFC的元素(例如浮動元素或者'overflow'值為'visible'以外的元素)與它的子元素的外邊距不會折疊
  • 浮動元素不與任何元素的外邊距產(chǎn)生折疊(包括其父元素和子元素)
  • 絕對定位元素不與任何元素的外邊距產(chǎn)生折疊
  • nline-block元素不與任何元素的外邊距產(chǎn)生折疊
  • 一個常規(guī)文檔流元素的margin-bottom與它下一個常規(guī)文檔流的兄弟元素的margin-top會產(chǎn)生折疊碟嘴,除非它們之間存在間隙(clearance)。
  • 一個常規(guī)文檔流元素的margin-top 與其第一個常規(guī)文檔流的子元素的margin-top產(chǎn)生折疊囊卜,條件為父元素不包含 padding 和 border 娜扇,子元素不包含 clearance。
  • 一個 'height' 為 'auto' 并且 'min-height' 為 '0'的常規(guī)文檔流元素的 margin-bottom 會與其最后一個常規(guī)文檔流子元素的 margin-bottom 折疊栅组,條件為父元素不包含 padding 和 border 雀瓢,子元素的 margin-bottom 不與包含 clearance 的 margin-top 折疊。
  • 一個不包含border-top玉掸、border-bottom刃麸、padding-top、padding-bottom的常規(guī)文檔流元素司浪,并且其 'height' 為 0 或 'auto'泊业, 'min-height' 為 '0'把沼,其里面也不包含行盒(line box),其自身的 margin-top 和 margin-bottom 會折疊吁伺。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末智政,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子箱蝠,更是在濱河造成了極大的恐慌,老刑警劉巖垦垂,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宦搬,死亡現(xiàn)場離奇詭異,居然都是意外死亡劫拗,警方通過查閱死者的電腦和手機间校,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來页慷,“玉大人憔足,你說我怎么就攤上這事【品保” “怎么了滓彰?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長州袒。 經(jīng)常有香客問我揭绑,道長,這世上最難降的妖魔是什么郎哭? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任他匪,我火速辦了婚禮,結果婚禮上夸研,老公的妹妹穿的比我還像新娘邦蜜。我一直安慰自己,他們只是感情好亥至,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布悼沈。 她就那樣靜靜地躺著,像睡著了一般抬闯。 火紅的嫁衣襯著肌膚如雪井辆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天溶握,我揣著相機與錄音杯缺,去河邊找鬼。 笑死睡榆,一個胖子當著我的面吹牛萍肆,可吹牛的內(nèi)容都是我干的袍榆。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼塘揣,長吁一口氣:“原來是場噩夢啊……” “哼包雀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亲铡,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤才写,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奖蔓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赞草,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年吆鹤,在試婚紗的時候發(fā)現(xiàn)自己被綠了厨疙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡疑务,死狀恐怖沾凄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情知允,我是刑警寧澤撒蟀,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站温鸽,受9級特大地震影響牙肝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗤朴,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一配椭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雹姊,春花似錦股缸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歧杏,卻和暖如春镰惦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背犬绒。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工旺入, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓茵瘾,卻偏偏與公主長得像礼华,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拗秘,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案圣絮? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,743評論 1 92
  • 1.在什么場景下會出現(xiàn)外邊距合并凡涩?如何合并餐禁?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 概念:在CSS當...
    饑人谷_任磊閱讀 646評論 0 3
  • 1.浮動元素有什么特征?對父容器筑舅、其他浮動元素座慰、普通元素、文字分別有什么影響? 何謂浮動元素翠拣?有什么特征版仔?所謂浮動...
    草鞋弟閱讀 809評論 0 1
  • 建議在PC端閱讀本文面向?qū)ο螅簩祟}中的概念基本不了解或僅僅聽說過名字的人蛮粮。如果已有一定了解請直接拉到最下看推薦閱...
    粉腸w閱讀 583評論 0 0
  • 浮動元素的特征,對父容器谜慌、對其他浮動元素然想、普通元素、文字的影響欣范。 浮動會使應用的元素脫離文檔流变泄。按指定的位置來移動...
    邢烽朔閱讀 658評論 2 7