子元素的垂直margin值對父元素的影響

2021-08-01 22:59:56 字數 2429 閱讀 7396

首先得說一下 margin摺疊

所謂margin摺疊,即相鄰的不同margin值有可能會被摺疊成同乙個margin值。看清楚哦,只是有可能會。至於哪些是相鄰元素?哪些又會存在摺疊?

這個鏈結裡闡述很全面。

這裡只分析子元素的垂直margin值對父元素的影響

(html結構:灰色父塊,紅色子塊,綠色子塊,白色父塊,黃色子塊。兩父塊相鄰)

第一種情況:父塊 沒有padding、沒有border邊框時

html結構

class="parent">

class="son1">div>

class="son2">div>

div>

class="parent2">

class="son3">div>

div>

css樣式

type="text/css">

body

body,div

.parent

.parent2

.son1

.son2

.son3

style>

瀏覽器顯示結果如下:

(黃綠色為body部分,灰色為第乙個div父塊,紅色和綠色為div子塊,白色為下乙個div父塊)

紅色子塊設定了margin-top值為20px,而灰色父塊設定的margin-top值為0px,

綠色子塊設定margin-bottom值為-20px,灰色父塊設定margin-bottom值為0px。

此時父塊沒有padding、沒有border邊框

結果是灰色父塊受到了影響,它實際的margin-top值變為20px,margin-bottom值變為-20px

此時第二個父塊(白色父塊)也受相鄰灰色父塊影響,margin值發生摺疊,因此白色父塊的margin-top變成了-20px,因此會覆蓋掉灰色父塊的20畫素的高度。

(不明白的請檢視上面鏈結中的「摺疊後的margin大小」)

當綠色子塊margin-bottom值為+20px時結果如下:

同理第乙個父塊受到了影響,它的margin-bottom值變為20px,而第二個父塊的margin-top值也變為+20px

第二種情況:第一父塊 padding:1px;

css樣式增加一行**

.parent

瀏覽器顯示如下:

紅色子塊設定了margin-top值為20px,而灰色父塊設定的margin-top值為0px,

綠色子塊設定margin-bottom值為-20px,灰色父塊設定margin-bottom值為0px。

此時灰色父塊的margin-top值不會再受紅色子塊的影響。灰色父塊的margin-bottom值也不受綠色子塊的影響,即它的margin-top和margin-bottom值仍然為0px,

但是因為綠色子塊的margin-bottom值為-20px,因此相鄰的父塊底邊界會上移,綠色子塊溢位,採用overflow:hidden可以隱藏溢位部分。

白色父塊margin-top值也仍然為0px,和第一父塊相接。

綠色子塊margin-bottom值為+20px時結果如下:

灰色父塊的margin-top不會再受紅色子塊的影響。灰色父塊的margin-bottom也不受綠色子塊的影響,

即它的margin-top和margin-bottom值仍然為0px,

第三種情況:border:1px solid black;

第一種情況基礎上的css樣式增加一行**

.parent

瀏覽器效果與第二種情況相同,只是多了邊框,道理基本相同

紅色子塊設定了margin-top值為20px,而灰色父塊設定的margin-top值為0px,

綠色子塊設定margin-bottom值為-20px,灰色父塊設定margin-bottom值為0px。

綠色子塊設定margin-bottom值為+20px

子元素的margin影響到父元素的大小

總體來講,這個問題是垂直外邊距合併問題。也就是乙個div,作為乙個元素的第乙個子集元素情況下,在設定了外邊距之後,會與父級的div元素在某種情況下進行合併,那麼在什麼情況下呢 第乙個元素的上外邊距會去查詢父級的border或者padding,如果沒找到,就會向外找margin,如果找到margin,...

子元素設定margin會影響父元素問題

參考 給子元素設定的margin結果作用在父元素身上,類似於 越級偽命令 問題的解決辦法有三種 1 為父元素設定padding。2 為父元素設定border。3 為父元素設定 overflow hidden 如果子元素不是div,p,h1等塊級標籤,而是a,span等行內標籤的話,則不會出現marg...

子元素上的margin作用到了父元素上

margin外邊距合併詳解 以上 的初衷是讓子元素的頂部距離父元素30px,但是事實上卻並沒有實現預 期的效果,而是子元素頂部緊貼父元素,並且margin top好像轉移給了父元素,讓父元素產生上外邊距。這其實是乙個典型的外邊距合併問題,但是並非 所有的瀏覽器都會產生這種情況,一般標準瀏覽器都會出現...