首頁  >  文章  >  web前端  >  CSS理解區塊級格式上下文BFC

CSS理解區塊級格式上下文BFC

小云云
小云云原創
2018-02-24 09:50:561753瀏覽

1.BFC 定義

BFC(Block formatting context)直譯為"區塊層級格式化上下文"。它是一個獨立的渲染區域,只有Block-level box(區塊級元素)參與, 它規定了內部的Block-level Box如何佈局,並且與這個區域外部毫不相干.

通俗地來說:創建了BFC的元素就是一個獨立的盒子,裡面的子元素不會在佈局上
影響外面的元素(裡面怎麼佈局都不會影響外部),BFC任然屬於文檔中的普通流

2.BFC的產生:

知道了BFC怎麼觸發BFC
滿足下列條件之一都可以觸發BFC,變身為BFC

  1. 根元素

  2. float屬性不為none

  3. position不為static和relative

  4. overflow不為visible

  5. #display為inline-block, table-cell, table-caption, flex, inline-flex

你會發現BFC無所不在,只是自己用的時候不知道而已

3.BFC佈局規則:

變身為BFC後有什麼特性呢,以下:

  1. #內部的Box會在垂直方向,一個接一個地放置。

  2. Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊

  3. 每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式化,否則相反)。即使存在浮動也是如此。

  4. BFC的區域不會與float box重疊。

  5. BFC就是頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面的元素。反之也如此。

  6. 計算BFC的高度時,浮動元素也參與計算

4.BFC作用:

用起來come boby

1.防止外邊距重疊

bfc導致的屬於同一個bfc中的子元素的margin重疊(Box垂直方向的距離由margin決定。 ,但這是在bfc中導致了他們的margin重疊

##

<style>
.container1{
        /* 通过overflow:hidden可以创建bfc */
        overflow: hidden;
        background-color: red;
        width: 300px;
    }
    .sub1{
        margin: 20px 0px;
        background-color: #dea;
    }
</style>
<p class="container1">
        <p class="sub1">String1</p>
        <p class="sub1">String2</p>
</p>

 

#解決方法:我們可以在p外包裹一層容器,並觸發該容器產生一個BFC。那麼兩個p便不屬於同一個BFC,就不會發生margin重疊了。

程式碼:

<style>
    .newbfc{
            overflow: hidden;
    }
</style>
<p class="container1">
        <p class="sub1">String1</p>
        <p class="newbfc"><p class="sub1">String2</p></p>
</p>

2.清除浮動:

#問題:當元素的子元素都浮動後,會出現高度崩塌的現象,也就是父容器的高度不會被撐開

程式碼:

<style>
    .pre2{
        width: 200px;
        border: 2px solid red;
    }
    .float1,.float2{
        width: 100px;
        height: 100px;
        float: left;
    }
    .float1{
        background-color: #dee;
    }
    .float2{
        background-color: #dcc;
    }
</style>
<p class="pre2">
        <p class="float1"></p>
        <p class="float2"></p>
</p>

解決方法:

bfc的規則:當計算BFC的高度時,浮動元素也參與計算所以只要將父容器設為bfc就可以把子元素包含進去:

這個容器將包含浮動的子元素,它的高度將擴展到可以包含它的子元素,在這個BFC,這些元素將會回到頁面的常規文件流。


.pre2{
        width: 200px;
        border: 2px solid red;
        /* 设置overflow*/
        overflow:hidden;
    }

3.解決佈局:防止文字環繞

程式碼:

<style>
.container2{
        overflow: hidden;
        width: 200px;
    }
    .box{
        float: left;
        width: 100px;
        height: 30px;
        background-color: #daa;
    }
</style>
<p class="container2">
        <p class="box"></p>
        <p style="background-color: #eea">sdfadsfdff fffffffds fsfffff sfd  fsdsdfsdf fffffff</p>
</p>

這個p元素並沒有移動,但它卻出現在浮動元素的下方。 p元素的line boxes(指的是文字行)進行了移位。此處line boxes的水平收縮為浮動元素提供了空間。

bfc的規則:每個元素的margin box的左邊, 與包含區塊border box的左邊相接觸(對於從左往右的格式化,否則相反)。即使存在浮動也是如此。

解決這個問題只要將p元素加入overflow:hidden使其成為一個新的bfc就可以了

 

##相關推薦:


CSS BFC原理及其應用詳解

CSS裡的BFC和IFC的用法實例分析

CSS中潛藏著的BFC

以上是CSS理解區塊級格式上下文BFC的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn