天天看點

css中的BFC

什麼是BFC?

BFC全稱為塊級格式化上下文,它實際上就是一種css布局規則,它規定了元素内部如何布局,而且内部布局不會對外部産生任何影響,即當一個塊級元素觸發了BFC,那麼這個塊級元素就會有相應的規則。

那麼,觸發了BFC後,會發生什麼big news呢?

big news:

1. BFC内部的塊盒和行盒(行盒就是接連排列的内聯元素)元素會在垂直方向接連排列

  1. 同一個BFC内部的兩個相鄰元素的上下margin會發生重疊
  2. 每個元素的最左邊,與包含塊border的左邊相接觸(對于從左往右的格式化,否則相反)。即使存在浮動也是如此
  3. BFC的區域不會與float 元素重疊
  4. BFC就是頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面的元素
  5. 計算BFC的高度時,浮動元素也參與計算
我們知道了觸發BFC後會産生的規則,那麼又如何區觸發BFC呢?

方法如下:

1. float的值不是none

  1. position的值不是static或者relative
  2. display的值是inline-block、table-cell、flex、table-caption或者inline-flex
  3. overflow的值不是visible,
我們知道了BFC的規則和觸發它的條件,下面舉幾個代碼例子證明(下面的例子都使用overflow:hidden觸發BFC):

一、我們都知道,當兩個相鄰塊級元素都擁有margin-top和margin-bottom,他們的上下margin會發生重疊。

<style>
#BFC
{
    overflow:hidden;
}

#up,#down
{
    height: 50px;
    width: 300px;
    background: #666;
    margin:15px;
}
</style>
<body>
    <div id='BFC'>
        <div id="up"></div>
        <div id="down"></div>
    </div>
</body>
           

效果如下:

css中的BFC

如果我們想讓它們的margin不産生重疊呢? 解決方法:我們可以通過把其中的一個div處在另外一個BFC下就可以了。

<style>
#BFC,#otherBFC
{
    overflow:hidden;
}


#up,#down
{
    height: 50px;
    width: 300px;
    background: #666;
    margin:15px;
}
</style>

<body>
    <div id='BFC'>
        <div id="up"></div>
        <div id="otherBFC">
            <div id="down"></div>
        </div>
    </div>
</body>
           

效果如下:

css中的BFC

二、BFC的區域不會與float box重疊

當沒有觸發BFC時:

<style>
#float
{
    float: left;
    height: 100px;
    width: 100px;
    background: #666;
    opacity: 0.5;/*用于檢視元素疊加部分*/
}
#cont
{
    height: 50px;
    width: 300px;
    background: orange;
}
</style>

<body>
    <div id="float"></div>
    <div id="cont"></div>
</body>
           

效果如下:

css中的BFC

觸發BFC後(在原有代碼基礎上添加overflow):

#cont
{
    height: 50px;
    width: 300px;
    background: orange;

    overflow:hidden;/*觸發BFC*/
}
           

效果如下:

css中的BFC

三、計算BFC的高度時,浮動元素也參與計算,這是解決浮動塌陷的一種方法

當沒有觸發BFC的情況下,内部元素浮動會引起外部元素塌陷:

<style>
#outer
{
    border: 5px solid orange;
}

#inner
{
    float: left;

    height: 50px;
    width: 300px;
    background: #666;
}
</style>

<body>
    <div id="outer">
        <div id="inner"></div>
    </div>
</body>
           

效果如下:

css中的BFC

觸發BFC,解決塌陷問題:

#outer
{
    border: 5px solid orange;

    overflow:hidden;
}           

效果如下:

css中的BFC

參考了各位大神的資料,終于對BFC有了一點了解,也明白了網上的clearfix浮動清除法為何需要添加一些額外的css屬性,以前隻會copy,現在也明白了一些原理。寫下這些筆記,是為了能夠牢記,也為了能夠分享自己的收獲,如果有錯誤,請多多指教,新手一枚。

學習借鑒的大神文章:

http://www.cnblogs.com/chencyl/p/3948331.html

http://www.cnblogs.com/libin-1/p/7098468.html