「每天進步一點點」CSS外邊距margin上下重疊現象研究

毗鄰的意思是什麼

先來看個簡單的例項:

①兄弟級別div之間

:建立2個相鄰div,上div的margin-bottom設定為50px,下div的margin-top設定為50px,最終效果會是什麼樣子的呢?有的同學或許認為兩個div的外邊距為100px(50+50)嘛,動手試試是這個結果嗎?

「每天進步一點點」CSS外邊距margin上下重疊現象研究

現象

實際結果是2個div的外邊距為50px。

②父子級div之間

:子div設定margin-top為50px,可實際結果

「每天進步一點點」CSS外邊距margin上下重疊現象研究

現象

明明設定的是子div外邊距為100px,可為什麼父子一塊移動了?

原因:所有毗鄰的兩個或者多個盒元素的margin會合併為一併共享之。毗鄰的意思是同級或巢狀的盒元素,並且他們之間沒有非空內容、padding或者border分隔。

結論:相鄰的“普通”元素,上下外邊距,並非簡單的相加,而是取其中較大的邊距值。如果出現負邊界,則在最大的正邊界中減去絕對值最大的負邊界。如果沒有正邊界,則從零中減去絕對值最大的負邊界。

注意結論中的普通,而對於float的元素則不存在此種情況。

問題出現了,那該如何解決呢?

①對於相鄰兄弟級的div:float浮動、inline-block。

②對於父子級的div:父加overflow:hidden或加padding或加border,子級加position:absolute。