關(guān)于CSS中BFC詳細(xì)解讀

1.先了解最常見定位方案

1洲胖、普通流

  • 元素按照其在 HTML 中的先后位置至上而下布局

  • 行內(nèi)元素水平排列,直到當(dāng)行被占滿然后換行,塊級(jí)元素則會(huì)被渲染為完整的一個(gè)新行

  • 所有元素默認(rèn)都是普通流定位

3dab8c0ffb0b4cff898554e4fddb2aff.png

2啡捶、浮動(dòng)

元素首先按照普通流的位置出現(xiàn)谦絮,然后根據(jù)浮動(dòng)的方向盡可能的向左邊或右邊偏移


2fdf39d0073846aa8be359300b5c25ee.png

3、絕對(duì)定位

元素會(huì)整體脫離普通流,因此絕對(duì)定位不會(huì)對(duì)其兄弟元素造成影響


293c3212ad464ff38952ff70d18f454d.png
2.BFC講解

BFC是屬于普通流的,我們可以把BFC看成頁面的一塊渲染區(qū)捞镰,他有自己的渲染規(guī)則,簡(jiǎn)單來說就是BFC可以看做元素的屬性顽悼,當(dāng)元素有了BFC這個(gè)屬性曼振,這個(gè)元素可以看做隔離了的容器几迄,容器里面的元素不會(huì)在布局上影響到外面的元素蔚龙。

1.BFC特性

  • 每一個(gè)BFC區(qū)域只包含其子元素,不包含其子元素的子元素

  • 每一個(gè)BFC區(qū)域相互獨(dú)立映胁,互不影響

2.如何觸發(fā)BFC
也就是說怎么給這個(gè)元素添加BFC屬性木羹,它需滿足下列任一條件。

1. 根元素(<html>)
 
2. 設(shè)置float浮動(dòng)解孙,不包含none
 
3. 絕對(duì)定位元素 (元素的 position 為 absolute 或 fixed)
 
4. display 為 inline-block坑填、table-cell、table-caption弛姜、table脐瑰、table-row、table-row-groutable-header-group廷臼、table-footer-group苍在、inline-table绝页、flow-root、flex 或 inline-flex寂恬、grid 或 inline-grid
 
5. 設(shè)置overflow续誉,不為visible
 
6. contain 值為 layout、content 或 paint 的元素
 
7. 多列容器(column-count 或 column-width (en-US) 值不為 auto初肉,包括column-count 為 1)
3.BFC的作用

1.第一個(gè)作用:避免外邊距重疊
看個(gè)案例(面試也會(huì)出現(xiàn))

.box{
    width: 200px;
    height: 200px;
    background: #5aa878;
    margin: 100px;
   }
 
<body>
    <div class="box"></div>
    <div class="box"></div>
</body>

大家認(rèn)為上下盒子間距是200px吧

84d40d6d75ca45828f42df30c7a8ef29.png

結(jié)果是上間距100px的酷鸦,這不是bug,這是一種規(guī)范。塊的上外邊距margin-top和下外邊距margin-bottom會(huì)合并為單個(gè)邊距牙咏,如果兩個(gè)邊距相等取其中一個(gè)臼隔,若大小邊距不一樣區(qū)最大邊距

如何解決呢?
只需要將這兩個(gè)div放置不同的BFC中妄壶,那么兩個(gè)BFC的內(nèi)容互不干擾躬翁。把代碼修改如下:

.box{
      width: 200px;
      height: 200px;
      background: #5aa878;
      margin: 100px;
     }
.container{
       overflow: hidden;
     }
 
 
<div class='container'>
    <div class="box"></div>
</div>
<div class="container">
    <div class="box"></div>
</div>

給這兩個(gè)box給各自一個(gè)div包裹,然后給這個(gè)div添加 overflow: hidden;屬性觸發(fā)container的BFC盯拱,最后就可以看到理想的結(jié)果200px

f711bb4ca9e845c1aae8f5e38508f440.png

2.第二個(gè)作用:清除浮動(dòng)
啥也不說上代碼盒发,看看是不是你想的那樣

.container{
    border: 2px solid yellowgreen;
}
.content{
    width: 100px;
    height: 100px;
    background: #47cabf;
    margin: 100px;
    float: left;
}
 
<div class="container">
    <div class="content"></div>
</div>

你們想的應(yīng)該是一個(gè)邊框包裹著一個(gè)100px的方塊,可結(jié)果不盡人意····

d57ed61d07434c50bd11b110f195b1e7.png

我們給子元素添加了浮動(dòng)導(dǎo)致子元素脫離了文檔流狡逢,所以只剩下2px的邊框了宁舰。

如何解決?
同樣我們給父容器添加BFC屬性奢浑,添加overflow: hidden;屬性觸發(fā)BFC蛮艰。這樣就起到清除浮動(dòng)的效果。

.container{
    border: 2px solid yellowgreen;
    overflow: hidden;
}
.content{
    width: 100px;
    height: 100px;
    background: #47cabf;
    margin: 100px;
    float: left;
}
 
<div class="container">
    <div class="content"></div>
</div>
5a063305346646e4aab08153e81bb0d1.png

這樣就可以了雀彼。

3.防止元素被浮動(dòng)元素覆蓋
先上才藝壤蚜,給兩個(gè)盒子設(shè)置寬高顏色,其中一個(gè)設(shè)置浮動(dòng)徊哑。

.box1{
    width: 100px;
    height: 100px;
    background: blue;
    float: left;
}
.box2{
    width: 200px;
    height: 200px;
    background: red;
}
 
<div class="box1"></div>
<div class="box2"></div>

你們想的結(jié)果可能是兩個(gè)盒子獨(dú)占一行袜刷,可是結(jié)果~~~


16e24a8bc84f40a292912e1e0e49975f.png

這里可以看到浮動(dòng)元素覆蓋了沒有添加浮動(dòng)的元素,如果想不被覆蓋莺丑,可以觸發(fā)正常的元素的BFC即可著蟹。所有在第二個(gè)元素添加overflow: hidden;屬性,這樣這兩個(gè)屬性就互不干擾梢莽。

.box1{
    width: 100px;
    height: 100px;
    background: blue;
    float: left;
}
.box2{
    width: 200px;
    height: 200px;
    background: red;
    overflow: hidden;
}
 
<div class="box1"></div>
<div class="box2"></div>
cc888ba29be147278d0b136e0192c0d0.png

這樣就正常了萧豆。

4.防止父子元素外邊距塌陷
上菜~~

.box1{
    width: 200px;
    height: 200px;
    background: blue;
}
.box2{
    width: 100px;
    height: 100px;
    background: red;
    margin-top: 20px;
}
 
<div class="box1">
   <div class="box2"></div>
</div>

大家想的結(jié)果是父元素距離子元素20px,然而~~


76c54de588154601b058273db4f9a31f.png

給子元素添加margin-top:50px后,影響了父元素昏名,給父元素添加BFC屬性即可涮雷。

.box1{
    width: 200px;
    height: 200px;
    background: blue;
    overflow: hidden;
}
.box2{
    width: 100px;
    height: 100px;
    background: red;
    margin-top: 20px;
}
 
<div class="box1">
   <div class="box2"></div>
</div>
e7d4f224ef0346e9804af7a8f3e6688f.png

6.總結(jié)

  • 一個(gè)BFC區(qū)域只包含它的子元素,不包含其子元素的子元素轻局。

  • 成為一個(gè)BFC區(qū)域要滿足一定的條件洪鸭。

  • 不同的BFC區(qū)域相互獨(dú)立膜钓,互不影響。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卿嘲,一起剝皮案震驚了整個(gè)濱河市颂斜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拾枣,老刑警劉巖沃疮,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異梅肤,居然都是意外死亡司蔬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門姨蝴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俊啼,“玉大人,你說我怎么就攤上這事左医∈谂粒” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵浮梢,是天一觀的道長(zhǎng)跛十。 經(jīng)常有香客問我,道長(zhǎng)秕硝,這世上最難降的妖魔是什么芥映? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮远豺,結(jié)果婚禮上奈偏,老公的妹妹穿的比我還像新娘。我一直安慰自己躯护,他們只是感情好惊来,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榛做,像睡著了一般唁盏。 火紅的嫁衣襯著肌膚如雪内狸。 梳的紋絲不亂的頭發(fā)上检眯,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音昆淡,去河邊找鬼锰瘸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛昂灵,可吹牛的內(nèi)容都是我干的避凝。 我是一名探鬼主播舞萄,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼管削!你這毒婦竟也來了倒脓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤含思,失蹤者是張志新(化名)和其女友劉穎崎弃,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體含潘,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饲做,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遏弱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盆均。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漱逸,靈堂內(nèi)的尸體忽然破棺而出泪姨,到底是詐尸還是另有隱情,我是刑警寧澤饰抒,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布驴娃,位于F島的核電站,受9級(jí)特大地震影響循集,放射性物質(zhì)發(fā)生泄漏唇敞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一咒彤、第九天 我趴在偏房一處隱蔽的房頂上張望疆柔。 院中可真熱鬧,春花似錦镶柱、人聲如沸旷档。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鞋屈。三九已至,卻和暖如春故觅,著一層夾襖步出監(jiān)牢的瞬間厂庇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工输吏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留权旷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓贯溅,卻偏偏與公主長(zhǎng)得像拄氯,于是被迫代替她去往敵國和親躲查。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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