BFC

什么是BFC

BFC 即 Block Formatting Contexts (塊級(jí)格式化上下文)

具有 BFC 特性的元素可以看作是隔離了的獨(dú)立容器,容器里面的元素不會(huì)在布局上影響到外面的元素,并且 BFC 具有普通容器所沒有的一些特性

通俗一點(diǎn)來講,可以把 BFC 理解為一個(gè)封閉的大箱子,箱子內(nèi)部的元素?zé)o論如何翻江倒海,都不會(huì)影響到外部。

如何觸發(fā)BFC
  • body根元素
  • float不為none
  • display表現(xiàn)為(inline-block、table-cell、flex)
  • position: fixed、absolute
  • overflow不為visible
BFC特性及應(yīng)用

1.在同一個(gè)BFC內(nèi)部的兩個(gè)相鄰元素會(huì)發(fā)生外邊距重疊

    <head>
    div{
        width: 100px;
        height: 100px;
        background: lightblue;
        margin: 100px;
    }
    </head>
    <body>
        <div></div>
        <div></div>
    </body>

從效果上看,因?yàn)閮蓚€(gè) div 元素都處于同一個(gè) BFC 容器下 (這里指 body 元素) 所以第一個(gè) div 的下邊距和第二個(gè) div 的上邊距發(fā)生了重疊,所以兩個(gè)盒子之間距離只有 100px,而不是 200px。

首先這不是 CSS 的 bug,我們可以理解為一種規(guī)范,如果想要避免外邊距的重疊,可以將其放在不同的 BFC 容器中

    <head>
        .container {
            overflow: hidden;
        }
        p {
            width: 100px;
            height: 100px;
            background: lightblue;
            margin: 100px;
        }
    </head>
    <body>
        <div class="container">
            <p></p>
        </div>
        <div class="container">
            <p></p>
        </div>
    </body>

2.BFC 可以包含浮動(dòng)的元素, 計(jì)算BFC高度時(shí),浮動(dòng)元素也參與計(jì)算(清除浮動(dòng))

<div style="border: 1px solid #000;">
    <div style="width: 100px;height: 100px;background: #eee;float: left;"></div>
</div>

由于容器內(nèi)元素浮動(dòng),脫離了文檔流,所以容器只剩下 2px 的邊距高度。如果使觸發(fā)容器的 BFC,那么容器將會(huì)包裹著浮動(dòng)元素。

<div style="border: 1px solid #000;overflow: hidden">
    <div style="width: 100px;height: 100px;background: #eee;float: left;"></div>
</div>

3.形成了BFC的區(qū)域不會(huì)與float box重疊

先來看一個(gè)文字環(huán)繞效果:

<div style="height: 100px;width: 100px;float: left;background: lightblue">我是一個(gè)左浮動(dòng)的元素</div>
<div style="width: 200px; height: 200px;background: #eee">我是一個(gè)沒有設(shè)置浮動(dòng), 
也沒有觸發(fā) BFC 元素, width: 200px; height:200px; background: #eee;</div>
round.png

這時(shí)候其實(shí)第二個(gè)元素有部分被浮動(dòng)元素所覆蓋,(但是文本信息不會(huì)被浮動(dòng)元素所覆蓋) 如果想避免元素被覆蓋,可觸第二個(gè)元素的 BFC 特性,在第二個(gè)元素中加入 overflow: hidden,就會(huì)變成:

bfc.png

這個(gè)方法可以用來實(shí)現(xiàn)兩列自適應(yīng)布局,效果不錯(cuò),這時(shí)候左邊的寬度固定,右邊的內(nèi)容自適應(yīng)寬度(去掉上面右邊內(nèi)容的寬度)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • css盒模型 題目:談?wù)勀銓?duì)CSS盒模型的認(rèn)識(shí) 文檔中每個(gè)元素都會(huì)被描述為一個(gè)矩形盒子,盒子有一個(gè)邊界,分別為ma...
    一包閱讀 585評(píng)論 0 0
  • 一、常見布局模式 在講BFC之前,我們先來看一下常見的CSS三種布局模型: CSS中的三種布局模型:流動(dòng)模型(Fl...
    情話_2ee5閱讀 809評(píng)論 0 0
  • 一、BFC 1、定義: 先給一個(gè)官方的定義:(可能會(huì)看不懂我也不懂) Formatting context(格式化...
    饑人谷_遠(yuǎn)方閱讀 232評(píng)論 0 0
  • 原文連接:https://zhuanlan.zhihu.com/p/25321647 一、常見定位方案 在講 BF...
    小豆soybean閱讀 218評(píng)論 0 0
  • 一、常見定位方案 在講 BFC 之前,我們先來了解一下常見的定位方案,定位方案是控制元素的布局,有三種常見方案: ...
    Observer_____閱讀 292評(píng)論 0 1