日夜談——CSS inline-block、BFC以及外邊距合并

task11.png

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

定義:簡單地說,外邊距合并指的是,當兩個垂直外邊距相遇時,它們將形成一個外邊距。合并后的外邊距的高度等于兩個發(fā)生合并的外邊距的高度中的較大者。

外邊距合并場景
一:兄弟元素的外邊距合并;
For example:

上下元素外邊距合并.png

二:父子元素外邊距合并;
For example:

父子元素外邊距合并.png

如圖:負元素上邊距與item1上邊距合并margin:30px,下邊距與item2下邊距合并margin:10px;

解決方案:
一:兄弟元素的外邊距合并;
<li>使用float;</li>
For example:

利用float.png

<li>使用inline-block;</li>
For example:

利用inline-block.png

<li>為相鄰的子元素生成bfc</li>
For example:

bfc.png

</br>
父子元素的外邊距合并的解決方案
</br>
<li>可以在父元素上設置border或者padding;</li>
For example:

設置border.png
設置padding.png

<h4>2.去除inline-block內(nèi)縫隙有哪幾種常見方法?</h4>

inline-block有內(nèi)縫隙是這樣的:

inline-block縫隙.png

解決方法:
<ul>
<li>設置負邊距</li>

負邊距去除縫隙.png

<li>在父元素里設置font-size:0;</li>

font-size0.png

<li>將display為inline-block的元素放置在一行,此方法不適用與包含較多內(nèi)容的元素</li>

inline-block排成一行.png

<li>使用浮動</li>

浮動去除縫隙.png

三、父容器使用overflow: auto| hidden撐開高度的原理是什么?

父容器在使用overflow: auto| hidden后使其產(chǎn)生BFC,從而為float開辟出一個獨立的空間,撐開父容器的高度。即:形成自己的“小宇宙”,從而把父容器撐開。

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

我的理解:BFC本質上就是是一個元素為其內(nèi)部新生成的獨立空間,內(nèi)部的內(nèi)容全被格式化成塊級容器(注意是塊級容器,不是塊級元素)。

W3C定義:

浮動元素和絕對定位元素,非塊級盒子的會計容器(例如inline-blocks,table-cells,和table-captions),以及overflow值不為“visiable”的塊級盒子,都會為他們的內(nèi)容創(chuàng)建新的BFC(塊級格式上下文)。

如何形成BFC:
<li>為元素添加float非none的屬性值
<li>為元素添加postion:absolute
<li>為元素添加display:inline-block | table-cells | table-caption
<li>為元素添加overflow:auto | hidden

作用:
<li>防止外邊距合并
<li>清除浮動
<li>使用BFC避免文字環(huán)繞

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

當一個父容器的高度為自適應時,子元素浮動會導致父容器高度塌陷。

How come?

因為為元素添加浮動之后,會導致元素脫離文檔流,導致其內(nèi)容在父容器中抽離出來,由于父容器高度為自適應,即其高度全靠子元素內(nèi)容撐開,子元素消失而父容器高度自然就會塌陷。

栗子:


沒加浮動前.png
高度塌陷.png

Solutions:
1.利用父元素形成BFC,從而為開辟出獨立的空間。

建立bfc.png

2.利用clear:both/left/right;清除浮動

both,left,right.png

3.在父元素中添加偽元素:after和before,這是情況而定。

after,before.png

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

代碼作用.png

<li>以上兩段代碼的作用都是清除浮動,但是作用的場景不同。另外與通過父容器建立BFC的原理不同,它使用clear屬性去清除浮動。after偽元素在IE8及以上才支持,所有第二段*zoom=1以防第一段代碼失去效用之后,用來防止清除浮動失敗。

<li>第一段代買是通過在父容器clearfix設置偽元素,在父容器最后添加內(nèi)容為空的塊級元素,并使用clear:both;達到清除浮動的目的。
<li>第二段代碼的解釋是:zoom屬性是IE瀏覽器的專有屬性,它本來是用來設置或檢索對象的縮放比例,但原有屬性很少被使用,最常使用的是利用觸發(fā)IE瀏覽器的haslayou,以達到清除浮動和外邊距合并的目的。

代碼作業(yè):
<a >代碼一</a>

<a >代碼二</a>

版權歸饑人谷peter和饑人谷所有,若有轉載,請注明來源。

感謝吃瓜子觀眾:

gaki11.png
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,806評論 1 92
  • 1. 在什么場景下會出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 外邊距合并:外...
    進擊的阿群閱讀 939評論 1 2
  • 一、在什么場景下會出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 1、外邊距和并的...
    鴻鵠飛天閱讀 644評論 0 0
  • 1.在什么場景下會出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 概念:在CSS當...
    饑人谷_任磊閱讀 711評論 0 3
  • 一、在什么場景下會出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 在CSS當中,相...
    dengpan閱讀 603評論 0 0