理解BFC

BOX

CSS布局的基本單位, 一個頁面是由很多個 Box 組成的肚医,元素的類型和 display 屬性決定了這個 Box 的類型。不同類型的 Box向瓷,會參與不同的 Formatting Context肠套。

Block level的box會參與形成BFC,比如display值為block猖任,table的元素你稚。
Inline level的box會參與形成IFC,比如display值為inline朱躺,inline-table刁赖,inline-block的元素。

FC

FC(formatting context) 格式化上下文长搀,它是頁面中的一塊渲染區(qū)域宇弛,有一套渲染規(guī)則,決定了其子元素如何布局源请,以及和其他元素之間的關系和作用

BFC

BFC為"塊級格式化上下文"枪芒。它是一個獨立的渲染區(qū)域彻况,只有Block-level box參與, 它規(guī)定了內部的Block-level Box如何布局舅踪,并且與這個區(qū)域外部毫不相干纽甘。

BFC怎么產(chǎn)生

【1】根元素,即HTML元素
【2】float的值不為none
【3】overflow的值不為visible
【4】display的值為inline-block抽碌、table-cell悍赢、table-caption
【5】position的值為absolute或fixed

BFC布局規(guī)則:

【1】.內部的Box會在垂直方向,一個接一個地放置货徙。
【2】.Box垂直方向的距離由margin決定左权。屬于同一個BFC的兩個相鄰Box的margin會發(fā)生重疊
【3】.每個元素的margin box的左邊, 與包含塊border box的左邊相接觸 (對于從左往右的格式化破婆,否則相反)涮总。即使存在浮動也是如此。
【4】計算BFC的高度時祷舀,浮動元素也參與計算
【5】BFC的區(qū)域不會與float box重疊瀑梗。
【6】BFC就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素裳扯。反之也如此抛丽。

BFC有哪些作用:

  • 自適應兩欄布局
  • 可以阻止元素被浮動元素覆蓋
  • 可以包含浮動元素——清除內部浮動
  • 分屬于不同的BFC時可以阻止margin重疊
BFC布局規(guī)則1:內部的Box會在垂直方向,一個接一個地放置饰豺。
BFC布局規(guī)則2:Box垂直方向的距離由margin決定亿鲜。屬于同一個BFC的兩個相鄰Box的margin會發(fā)生重疊。

演示中css屬性設置:上面的box:margin-bottom: 100px;下面的box:margin-top: 100px;(他們是同一側的margin冤吨,所以會發(fā)生margin重疊的情況蒿柳,兩個div的距離實際上只有100px。)

6b0fc0e3d34f94875d35.gif
應用:阻止margin重疊

當兩個相鄰塊級子元素分屬于不同的BFC時可以阻止margin重疊
操作方法:給其中一個div外面包一個div漩蟆,然后通過觸發(fā)外面這個div的BFC垒探,就可以阻止這兩個div的margin重疊

BFC布局規(guī)則3:每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對于從左往右的格式化怠李,否則相反)圾叼。即使存在浮動也是如此。

解析:給這兩個子div加浮動捺癞,浮動的結果夷蚊,如果沒有清除浮動的話,父div不會將下面兩個div包裹髓介,但還是在父div的范圍之內惕鼓,左浮是子div的左邊接觸父div的borderbox的左邊,右浮是子div接觸父div的borderbox右邊唐础,除非設置margin來撐開距離呜笑,否則一直是這個規(guī)則夫否。

BFC布局規(guī)則5:計算BFC的高度時,浮動元素也參與計算
應用:可以包含浮動元素——清除內部浮動

可以包含浮動元素——清除內部浮動
給父divpar加上 overflow: hidden;

清除浮動原理:觸發(fā)父div的BFC屬性叫胁,使下面的子div都處在父div的同一個BFC區(qū)域之內,計算父div的高度時汞幢,浮動元素也參與計算驼鹅,此時已成功清除浮動

1.gif
BFC布局規(guī)則4:BFC的區(qū)域不會與float box重疊
div class="aside"></div>
<div class="text">
  <div class="main"></div>
</div>
<!--下面是css代碼-->
      .aside {
          width: 100px;
          height: 150px;
          float: left;
          background: #f66;
       }
      .main {
          height: 200px;
          overflow: hidden;//觸發(fā)main盒子的BFC
          background: #fcc;
      }
      .text{
          width: 500px;
       }

上面aside盒子有一個浮動屬性,覆蓋了main盒子的內容森篷,main盒子沒有清除aside盒子的浮動输钩。只做了一個動作,就是觸發(fā)自身的BFC仲智,然后就不再被aside盒子覆蓋了买乃。所以:BFC的區(qū)域不會與float box重疊。

2.gif
應用:阻止元素被浮動元素覆蓋 自適應兩欄布局钓辆。
4.gif

還是上面的代碼剪验,此時BFC的區(qū)域不會與float box重疊,因此會根據(jù)包含塊(父div)的寬度前联,和aside的寬度功戚,自適應寬度。

BFC布局規(guī)則6:BFC就是頁面上的一個隔離的獨立容器似嗤,容器里面的子元素不會影響到外面的元素

實際上就是兩個BFC之間不會相互影響啸臀,理解為不是一個文檔流

BFC 與 Layout

IE 作為瀏覽器中的奇葩,當然不可能按部就班的支持 BFC 標準烁落,于是乎 IE 中有了 Layout 這個東西乘粒。Layout 和 BFC 基本是等價的,為了處理 IE 的兼容性伤塌,在需要觸發(fā) BFC 時灯萍,我們除了需要用觸發(fā)條件中的 CSS 屬性來觸發(fā) BFC,還需要針對 IE 瀏覽器使用 zoom: 1 來觸發(fā) IE 瀏覽器的 Layout寸谜。

參考鏈接:
https://juejin.im/post/5909db2fda2f60005d2093db

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末竟稳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子熊痴,更是在濱河造成了極大的恐慌他爸,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件果善,死亡現(xiàn)場離奇詭異诊笤,居然都是意外死亡,警方通過查閱死者的電腦和手機巾陕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門讨跟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纪他,“玉大人,你說我怎么就攤上這事晾匠〔杼唬” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵凉馆,是天一觀的道長薪寓。 經(jīng)常有香客問我,道長澜共,這世上最難降的妖魔是什么向叉? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮嗦董,結果婚禮上母谎,老公的妹妹穿的比我還像新娘。我一直安慰自己京革,他們只是感情好奇唤,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著存崖,像睡著了一般冻记。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上来惧,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天冗栗,我揣著相機與錄音,去河邊找鬼供搀。 笑死隅居,一個胖子當著我的面吹牛,可吹牛的內容都是我干的葛虐。 我是一名探鬼主播胎源,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屿脐!你這毒婦竟也來了涕蚤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤的诵,失蹤者是張志新(化名)和其女友劉穎万栅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體西疤,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡烦粒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了代赁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扰她。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡兽掰,死狀恐怖,靈堂內的尸體忽然破棺而出徒役,到底是詐尸還是另有隱情孽尽,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布廉涕,位于F島的核電站泻云,受9級特大地震影響,放射性物質發(fā)生泄漏狐蜕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一卸夕、第九天 我趴在偏房一處隱蔽的房頂上張望层释。 院中可真熱鬧,春花似錦快集、人聲如沸贡羔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乖寒。三九已至,卻和暖如春院溺,著一層夾襖步出監(jiān)牢的瞬間楣嘁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工珍逸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逐虚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓谆膳,卻偏偏與公主長得像叭爱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子漱病,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容

  • 理解BFC 更好閱讀體驗移步:http://zhangzippo.github.io/posts/2019/04/...
    懶癌程序員閱讀 620評論 0 2
  • relative:生成相對定位的元素买雾,通過top,bottom,left,right的位置相對于其正常位置進行定位...
    zx9426閱讀 943評論 0 2
  • 深入理解BFC與IFC 正常的流中就是如何把文檔中的元素呈現(xiàn)出來 ,而布局呈現(xiàn)的規(guī)則就是BFC杨帽、IFC和相對位移漓穿,...
    moyi_gg閱讀 4,959評論 2 1
  • 一、什么是BFC Formatting context 是 W3C CSS2.1 規(guī)范中的一個概念睦尽。它是頁面中的一...
    浪里行舟閱讀 657評論 0 3
  • 前言 css一直不是我的強項器净,這也是我第一篇css相關的文章,雖然我平時css寫的比較少当凡,但其中比較重要的基礎...
    ITgecko閱讀 393評論 0 7