inline-block、BFC、邊距合并

1、在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例

Reference:w3邊距合并解釋
在文檔流中,塊級(jí)元素會(huì)從上往下依次挨著排列,此時(shí)前一個(gè)塊級(jí)元素的margin-bottom會(huì)與后一個(gè)塊級(jí)元素的margin-top合并。例如:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
  *{
  margin:0;
  padding:0;
}
.ct{
  border:1px solid 
}
.box1{
  width:100px;
  height:100px;
  background:#f00;
  margin:20px;
}
.box2{
  width:100px;
  height:100px;
  background:#0f0;
  margin:20px
}
  </style>
</head>
<body>
<div class="ct">
  <div class="box1"></div>
  <div class="box2"></div>
</div>
</body>
</html>
</body>
</html>

output

可以看出,盡管綠盒的margin-top為20px,紅盒的margin-bottom為20px,但此時(shí)中間間隙并非40px,而是合并為20px。若設(shè)置綠盒margin:10px 20px;;則中間縫隙依舊為20px,故外邊距合并最終留存的結(jié)果是兩者外邊距較大的那一個(gè)。

output

總結(jié)規(guī)則如下:
<blockquote>
兩個(gè)相鄰的外邊距都是正數(shù)時(shí),折疊結(jié)果是它們兩者之間較大的值。
兩個(gè)相鄰的外邊距都是負(fù)數(shù)時(shí),折疊結(jié)果是兩者絕對(duì)值的較大值。
兩個(gè)外邊距一正一負(fù)時(shí),折疊結(jié)果是兩者的相加的和。
</blockquote>
若要讓外邊距不發(fā)生合并,從根本上來(lái)說(shuō)是需要讓兩個(gè)元素處于不同的BFC中,即讓其中一個(gè)元素處在一個(gè)新的BFC中;
生成BFC的規(guī)則:
<blockquote>

  • 根元素
  • float屬性不為none
  • position為absolute或fixed
  • display為inline-block, table-cell, table-caption, flex, inline-flex
  • overflow不為visible
    </blockquote>
    由于float與position:absolute/fixed會(huì)改變文檔流,所以我們一般考慮添加一個(gè)父級(jí)元素,給其添加overflow:hidden/auto;display:inline-block;來(lái)生成新的BFC。
父子外邊距合并例子

如下圖所示,父子的margin均為20px,顯然父子上下外邊距重合,發(fā)生合并。


父子外邊距合并

消除方法:

  • 給父元素增加一個(gè)不為0填充(border,paddding均可);
  • 給父級(jí)元素增加overflow:hidden/auto;

2、去除inline-block內(nèi)縫隙有哪幾種常見(jiàn)方法?

  • 不換行,縫隙出現(xiàn)的本質(zhì)原因是在于換行所出現(xiàn)的一個(gè)空格符號(hào),所以不換行能夠解決問(wèn)題,但是代碼不規(guī)整;
  • 使用浮動(dòng)float:left 父元素需要用overflow:auto或者h(yuǎn)idden撐開(kāi)。
  • 給父元素font-size設(shè)為0,需要在自己在inline-block設(shè)置一下字體大小。

3、父容器使用overflow: auto| hidden撐開(kāi)高度的原理是什么?

當(dāng)子元素全部float脫離文檔流之后,父容器可視為內(nèi)部沒(méi)有任何子元素而塌陷,overflow值為auto| hidden時(shí)可以閉合元素修復(fù)高度坍塌,清除浮動(dòng)。

4、BFC是什么?如何形成BFC,有什么作用?

Reference:前端精選文摘:BFC 神奇背后的原理
其實(shí)第一題已經(jīng)詳細(xì)解答了如何形成BFC和BFC的作用,現(xiàn)只列出何為BFC:

BFC 定義
  BFC(Block formatting context)直譯為"塊級(jí)格式化上下文"。它是一個(gè)獨(dú)立的渲染區(qū)域,只有Block-level box參與, 它規(guī)定了內(nèi)部的Block-level Box如何布局,并且與這個(gè)區(qū)域外部毫不相干。

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

5、浮動(dòng)導(dǎo)致的父容器高度塌陷指什么?為什么會(huì)產(chǎn)生?有幾種解決方法?

當(dāng)子元素全部float脫離文檔流之后,父容器可視為內(nèi)部沒(méi)有任何子元素而塌陷。
解決方法:

  • 給父元素添加display: inline-block; overflow: auto; 或 overflow: hidden;樣式,使父容器形成BFC空間。
  • 使用偽類選擇器after 給父元素最后加上子元素并且具有clear:both屬性,也可以清除浮動(dòng)。
.clearfix:after{ content:''; display:block; clear:both; }

6、以下代碼每一行的作用是什么? 為什么會(huì)產(chǎn)生作用? 和BFC撐開(kāi)空間有什么區(qū)別?

.clearfix:after{ content: '';    /*添加一個(gè)空字符*/
             display: block;       /*變?yōu)閴K級(jí)元素*/
             clear: both;           /*清除浮動(dòng)*/
             }
 .clearfix{
            *zoom: 1;             /*為了兼容IE6\7*/
}

在浮動(dòng)元素后添加一個(gè)沒(méi)有內(nèi)容(實(shí)際上有一個(gè)空字符)的塊級(jí)元素,當(dāng)其清除浮動(dòng)后,所在位置正好是所有浮動(dòng)元素的最下面,自然由其撐起的父級(jí)元素能夠包裹住所有的子元素。
與BFC的區(qū)別:
BFC撐開(kāi)空間是使父元素本身形成一個(gè)獨(dú)立空間來(lái)包容浮動(dòng)元素,而這個(gè)方法是使用內(nèi)容將父容器撐開(kā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ù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,701評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 178,691評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 63,974評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,694評(píng)論 6 413
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 56,026評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 43,193評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,719評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,668評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,846評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 35,255評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 36,592評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,394評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,635評(píng)論 2 380

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

  • 一、在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例 在CSS當(dāng)中,相...
    dengpan閱讀 596評(píng)論 0 0
  • 1.在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例 概念:在CSS當(dāng)...
    饑人谷_任磊閱讀 670評(píng)論 0 3
  • 1. 在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例 外邊距合并:外...
    進(jìn)擊的阿群閱讀 930評(píng)論 1 2
  • 問(wèn)題 1. 在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例 外邊距合...
    Timmmmmmm閱讀 497評(píng)論 0 0
  • 一、在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例 1、外邊距和并的...
    鴻鵠飛天閱讀 628評(píng)論 0 0