BFC相關(guān)知識(shí)點(diǎn)

  • 在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例
    塊元素直接接觸的垂直外邊距(top、bottom)會(huì)合并成成單個(gè)外邊距(取當(dāng)中較大的值)
    • 外邊距合并的情況
      • 毗鄰的兄弟元素的垂直外邊距
        備注:橙色的是外邊距
.child {
    width: 200px;
    height: 100px;
    background-color: red;
    margin: 20px;
}

上面一個(gè)div的margin-bottom+下面一個(gè)div的margin-top是40px,但是他們合并了,合并后取兩個(gè)值中較大的一個(gè)


毗鄰元素的垂直外邊距合并

- 父元素與第一個(gè)/最后一個(gè)子元素的垂直外邊距合并

.parent {
    margin-bottom: 10px;
}

通過(guò)設(shè)置父元素的margin-bottom為10px,加上最后一個(gè)子元素的margin-bottom為20px,應(yīng)該是30px,但是因?yàn)橥膺吘嗪喜ⅲ∷麄儺?dāng)中較大的一個(gè)就是20px


父元素與最后一個(gè)子元素外邊距合并

父元素與最后一個(gè)子元素外邊距合并

- 空塊級(jí)元素的垂直外邊距

.box4 {
    margin: 20px:
}

一個(gè)空的div,設(shè)置了marin為20px,意味著有20px的上外邊距和20px的下外邊距,垂直方向上應(yīng)該有40px,但是上外邊距和下外邊距卻合并了,最后只有20px


空元素外邊距合并

空元素外邊距合并

- 阻止外邊距合并
- 阻止相鄰元素的合并
1. float、絕對(duì)定位來(lái)脫離文檔流position


默認(rèn)

浮動(dòng)和絕對(duì)定位 脫離文檔流

2. display: inline-block;的元素與其兄弟元素、子元素和父元素的外邊距都不會(huì)合并
inline-block脫離文檔流

因?yàn)閕nline-block不符合外c規(guī)范所說(shuō)的必須是塊級(jí)盒子的條件,因?yàn)橐?guī)范中說(shuō)明,塊級(jí)盒子的display屬性必須是以下三種之一:"block"、"list-item"、"table"
- 阻止父元素與子元素的合并
1. 設(shè)置padding和border,阻止子元素和父元素的外邊距直接接觸


設(shè)置padding

通過(guò)設(shè)置padding來(lái)阻止合并
設(shè)置border

通過(guò)設(shè)置border來(lái)阻止合并
2. 設(shè)置overflow形成BFC來(lái)阻止合并
overflow: hidden;

3. 設(shè)置display: inline-block:
- 父元素設(shè)置display: inline-block;
父元素設(shè)置display: inline-block;

首先對(duì)毗鄰的兄弟元素外邊距不合并,然后對(duì)子元素的外邊距也不合并
- 子元素設(shè)置display: inline-block;
子元素設(shè)置display: inline-block;

與父元素的外邊距不合并,與毗鄰的兄弟元素也不合并

參考:深入理解BFC和Margin Collapse

  • 在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例
    塊元素的垂直外邊距(top、bottom)直接接觸會(huì)合并成成單個(gè)外邊距(數(shù)字大的那個(gè))
    • 外邊距合并的情況
      • 毗鄰的兄弟元素的垂直外邊距
      • 父元素與第一個(gè)/最后一個(gè)子元素的垂直外邊距合并
      • 空塊級(jí)元素的垂直外邊距
  • 去除inline-block內(nèi)縫隙有哪幾種常見(jiàn)方法?
    本質(zhì)是因?yàn)镠TML會(huì)把多個(gè)空格當(dāng)成一個(gè)
    • 去除HTML標(biāo)簽的空隙
    <div class="wrapper">
        <span>哈哈</span>
        <span>哈哈</span>
        <span>哈哈</span>
        <span>哈哈</span>
    </div>
    
    改成
    <div class="wrapper">
        <span>哈哈</span><span>哈哈</span><span>哈哈</span><span>哈哈</span>
    </div>
    
    或者
    <div class="wrapper">
        <span>哈哈</span
        ><span>哈哈</span
        ><span>哈哈</span
        ><span>哈哈</span>
    </div>
    
    • 利用浮動(dòng)
    span {
        float: left;
    }
    
    • 利用負(fù)margin
    span {
        margin-left: -5px;
    }
    
    • 父元素設(shè)置font-size: 0;子元素再設(shè)置回來(lái)
    .wrapper {
        font-size: 0;
    }
    span {
        font-size: 16px;
    }
    
    • 父元素設(shè)置word-spacing
    .wrapper {
        word-spacing: -5px;
    }
    

    注意:
    word-spacing:
    <blockquote>The word-spacing CSS property specifies the spacing behavior between tags and words.</blockquote>
    設(shè)置的是單詞和標(biāo)簽間的空隙


    word-spacing

    letter-space:
    <blockquote>The letter-spacing CSS property specifies spacing behavior between text characters.</blockquote>
    而letter-space設(shè)置的是字母間的空隙,所以不能用來(lái)消除行內(nèi)元素的空隙,因?yàn)樽峙c字之間的空隙也會(huì)變小


    letter-space

    所以就會(huì)出現(xiàn)這種情況:
    不能用letter-space消除標(biāo)簽間的空隙
  • 父容器使用overflow: auto| hidden撐開(kāi)高度的原理是什么?
    當(dāng)overflow屬性的值不為visible時(shí),會(huì)觸發(fā)BFC,就是塊級(jí)格式上下文,BFC可以消除浮動(dòng)帶來(lái)的父元素高度坍塌的影響
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box1,.box2,.box3 {
            width: 200px;
            height: 100px;
            background-color: orange;
            float: left;
            margin: 5px;
        }

        .wrapper {
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="box1"></div>
        <div class="box2"></div>
        <div class="box3"></div>
    </div>
</body>
</html>
overflow: hidden;
  • BFC是什么?如何形成BFC,有什么作用?
    <blockquote>Boxes in the normal flow belong to a formatting context, which may be block or inline, but not both simultaneously. Block-level boxes participate in a block formatting context. Inline-level boxes participate in an inline formatting context.</blockquote>
    在w3c規(guī)范中這樣說(shuō)道,每個(gè)文檔流中的盒子必定屬于一個(gè)格式化環(huán)境,要么塊級(jí)格式化環(huán)境,要么行內(nèi)格式化環(huán)境,其中,塊級(jí)元素在塊級(jí)格式化環(huán)境中,行內(nèi)元素在行內(nèi)格式化環(huán)境中
    其實(shí)HTML根元素html就是一個(gè)默認(rèn)的塊級(jí)格式化上下文,因?yàn)楫?dāng)頁(yè)面的內(nèi)容在視窗顯示不下的時(shí)候,會(huì)出現(xiàn)滾動(dòng)條,意味著html根元素的overflow屬性的值為auto
    那么塊級(jí)格式化上下文是什么呢,通俗來(lái)說(shuō),就是一個(gè)獨(dú)立的布局環(huán)境,外面的元素不能影響里面的元素,里面的元素也不能影響外面的元素,那么BFC的布局規(guī)則是怎樣的呢
    • 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ì)于從左往右的格式,反之相反)。及時(shí)存在浮動(dòng)也是如此
      4. BFC的區(qū)域不會(huì)與float box重疊
      5. BFC就是頁(yè)面上的一個(gè)隔離的獨(dú)立容器,容器里面的子元素不會(huì)影響到外面的元素。反之也如此
      6. 計(jì)算BFC高度時(shí),浮動(dòng)元素也參與計(jì)算
    • 如何觸發(fā)BFC
      <blockquote>Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with 'overflow' other than 'visible' (except when that value has been propagated to the viewport) establish new block formatting contexts for their contents.</blockquote>
      浮動(dòng)元素,絕對(duì)定位元素,塊級(jí)容器但是不是塊級(jí)盒子(例如:display的值為inline-block、table-cell、table-caption),塊級(jí)元素的overflow屬性的值不為visible
    • BFC的作用
      1. 清除內(nèi)部浮動(dòng)
      .wrapper {
          overflow: hidden;
      }
      

清除浮動(dòng)

2. 自適應(yīng)兩欄布局
.main { overflow: hidden; }
自適應(yīng)兩欄布局

3. 阻止垂直外邊距合并

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box1 {
            width: 200px;
            height: 100px;
            background-color: red;
            margin-bottom: 20px;
        }

        .wrapper {
            background-color: #eee;
            overflow: hidden;
        }

        .box2 {
            width: 200px;
            height: 100px;
            background-color: #ccc;
            margin-top: 20px;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="wrapper">
        <div class="box2"></div>
    </div>
</html>
阻止外邊距合并
BFC的用法都體現(xiàn)了規(guī)則的第5條:

<blockquote>BFC就是頁(yè)面上的一個(gè)隔離的獨(dú)立容器,容器里面的子元素不會(huì)影響到外面的元素。反之也如此</blockquote>
因?yàn)锽FC內(nèi)部和外部互不影響,所以當(dāng)外部元素浮動(dòng)時(shí),BFC通過(guò)自身變窄不與浮動(dòng)元素重疊來(lái)消除的影響,而當(dāng)內(nèi)部元素浮動(dòng)時(shí),為了不影響外部元素,所以把浮動(dòng)元素的高度計(jì)算在內(nèi),阻止margin合并也是為了內(nèi)部元素不與外部元素互相影響

  • 浮動(dòng)導(dǎo)致的父容器高度塌陷指什么?為什么會(huì)產(chǎn)生?有幾種解決方法
    指的是當(dāng)父容器下的子元素都浮動(dòng)了之后,子元素脫離了當(dāng)前的文檔流,所以父元素的高度為0


    父元素高度坍塌
    • 利用clearfix
    .clearfix:after {
        content: 0;
        display: block;
        clear: both;
    }
    
    • 觸發(fā)BFC
    .wrapper {
        overflow: hidden;
    }
    
  • 以下代碼每一行的作用是什么? 為什么會(huì)產(chǎn)生作用? 和BFC撐開(kāi)空間有什么區(qū)別?

        /*在clearfix類的最后加上內(nèi)容*/
        .clearfix:after{
        /*所要加上的內(nèi)容是空的*/
            content: '';
        /*顯示為塊級(jí)元素*/
            display: block;
        /*清除兩邊的浮動(dòng),clear屬性是作用在浮動(dòng)元素的后續(xù)元素和塊級(jí)元素上*/
            clear: both;
        }
        .clearfix{
        /* *是property hack,表示只有IE7及以下的版本可以識(shí)別,zoom相當(dāng)于觸發(fā)IE的BFC*/
            *zoom: 1;
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,407評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,981評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,759評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,204評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,415評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,650評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,892評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,675評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,967評(píng)論 2 374

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

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,776評(píng)論 1 92
  • 一、在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例 在CSS當(dāng)中,相...
    dengpan閱讀 591評(píng)論 0 0
  • 1.在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例 概念:在CSS當(dāng)...
    饑人谷_任磊閱讀 667評(píng)論 0 3
  • relative:生成相對(duì)定位的元素,通過(guò)top,bottom,left,right的位置相對(duì)于其正常位置進(jìn)行定位...
    zx9426閱讀 954評(píng)論 0 2
  • 一,浮動(dòng)元素有什么特征?對(duì)父容器、其他浮動(dòng)元素、普通元素、文字分別有什么影響? 浮動(dòng)模型是一種可視化格式模型,浮動(dòng)...
    DeeJay_Y閱讀 892評(píng)論 0 4