2017-07-31讀書筆記(bfc詳解,帶demo)

前兩天聽(tīng)同事說(shuō)起了他被困于bfc和ifc,聽(tīng)的當(dāng)時(shí)滿臉懵逼,在想這是什么怎么從來(lái)沒(méi)聽(tīng)說(shuō)過(guò)。于是今天準(zhǔn)備好好地研究一下。

CSS2.1 中只有 BFC 和 IFC, CSS3中還增加了 GFC 和 FFC。

網(wǎng)上大概了解了一下bfc和ifc都是一些HTML、css結(jié)構(gòu)的一些規(guī)范。與display的屬性值有關(guān)。那還是先了解一下display的所有屬性比較好。
w3school-css-display屬性
在這之間我看到了好多之前并不清楚的屬性值,常見(jiàn)的block、inline-block、inline、none等都不說(shuō)了,主要是中間有幾個(gè)table相關(guān)的之前不知道,害得我強(qiáng)行使用display: "" 來(lái)寫。這樣雖然是報(bào)錯(cuò),但是疊加在原先的none上面至少會(huì)不生效,然后使display值還原成默認(rèn)值。(這些都是小技巧,但是能分清的時(shí)候還是盡量分清比較好)

原文在這 前端精選文摘:BFC 神奇背后的原理

在bfc中是有一些非常奇妙的現(xiàn)象的,比如說(shuō):

<!DOCTYPE html>
<html>
<head>
    <title>bfc</title>
    <style type="text/css">
        * {margin: 0;padding: 0;}
        .a {background: #eeeeee;width: 100%;height: 400px;}
        .a div {
            width: 200px;
            height: 50px;
        }
        .a1 {
            background-color: red;
            margin-bottom: 20px;
        }
        .a2 {
            background-color: blue;
            margin-top: 20px;
        }
    </style>
</head>
<body>
<div class="a">
    <div class="a1"></div>
    <div class="a2"></div>
</div>
</body>
</html>
效果

在這段代碼中,無(wú)論你是否注釋掉a1的margin-bottom或者a2的margin-top都不會(huì)改變兩者的間距。

還有一個(gè)也是非常有名的,經(jīng)常會(huì)出現(xiàn)在面試題中的一個(gè)問(wèn)題,為什么overflow:hidden可以消除float的影響。代碼實(shí)例如下:

<!DOCTYPE html>
<html>
<head>
    <title>bfc</title>
    <style type="text/css">
        * {margin: 0;padding: 0;}
        .a {
            background-color: #eee;
        }
        .a1 {
            width: 200px;
            height: 100px;
            float: left;
            background-color: #aaa;
        }
        .a2 {
            width: 200px;
            height: 100px;
            float: left;
            background-color: #2dc3e8;
        }
    </style>
</head>
<body>
<div class="a">
    <div class="a1"></div>
    <div class="a2"></div>
</div>
</body>
</html>

結(jié)果如下:

無(wú)overflow: hidden結(jié)果

可以明顯看到,這里div.a沒(méi)有被撐開,這邊a的高度還是0。
然后當(dāng)給a加了一個(gè)屬性overflow:hidden時(shí),結(jié)果如下:

有overflow: hidden結(jié)果

這邊可以看出來(lái),div.a已經(jīng)被撐開了。

非常神奇吧,如果想了解原因的話,就繼續(xù)往下看吧。下面是重點(diǎn),敲小黑板!!

哪些元素會(huì)生成BFC?

  1. 根元素
  2. float屬性不為none
  3. position為absolute或fixed
  4. display為inline-block, table-cell, table-caption, flex, inline-flex
  5. overflow不為visible

BFC布局規(guī)則:

  1. 內(nèi)部的Box會(huì)在垂直方向,一個(gè)接一個(gè)地放置。
  2. Box垂直方向的距離由margin決定。屬于同一個(gè)BFC的兩個(gè)相鄰Box的margin會(huì)發(fā)生重疊
  3. 每個(gè)元素的margin box的左邊, 與包含塊border box的左邊相接觸(對(duì)于從左往右的格式化,否則相反)。即使存在浮動(dòng)也是如此。
  4. BFC的區(qū)域不會(huì)與float box重疊。
  5. BFC就是頁(yè)面上的一個(gè)隔離的獨(dú)立容器,容器里面的子元素不會(huì)影響到外面的元素。反之也如此。
  6. 計(jì)算BFC的高度時(shí),浮動(dòng)元素也參與計(jì)算

所以上面第一個(gè)demo的原因也可以很簡(jiǎn)單的看出是布局規(guī)范中的第二條,第二個(gè)demo遵循的是第6條規(guī)則。

在原文章中還有另外兩個(gè)demo,但是細(xì)讀一下感覺(jué)學(xué)習(xí)意義不大,基本無(wú)什么實(shí)際使用用途,所以舍棄,又想看看的話也可自行去閱讀。

今天就先只看了一下bfc,明天會(huì)繼續(xù)看一下其他的幾個(gè)*fc。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,207評(píng)論 1 92
  • relative:生成相對(duì)定位的元素,通過(guò)top,bottom,left,right的位置相對(duì)于其正常位置進(jìn)行定位...
    zx9426閱讀 1,083評(píng)論 0 2
  • 概念 Formatting context Formatting context 是 W3C CSS2.1 規(guī)范中...
    wonderwander閱讀 839評(píng)論 0 1
  • 一、BFC是什么? 它是 Block Formatting Context (塊級(jí)格式化上下文) 的簡(jiǎn)稱,接下來(lái)通...
    07120665a058閱讀 3,938評(píng)論 15 40
  • 看到這個(gè)四分之一內(nèi)心是很有愧疚感的,這么久一本書都沒(méi)有看完,當(dāng)時(shí)定的一個(gè)月看完一本書,這個(gè)必須得補(bǔ)功課趕起來(lái)。 第...
    xiao徐徐1閱讀 280評(píng)論 0 1

友情鏈接更多精彩內(nèi)容