margin 重疊問題的理解

2021-10-06 01:37:02 字數 1844 閱讀 9017

塊級元素的上外邊距(margin-top)與下外邊距(margin-bottom)有時會合併為單個外邊距,這樣的現象稱為「margin合

並」。產生摺疊的必備條件:margin必須是鄰接的!

而根據w3c規範,兩個margin是鄰接的必須滿足以下條件:

•必須是處於常規文件流(非float和絕對定位)的塊級盒子,並且處於同乙個bfc當中。

•沒有線盒,沒有空隙,沒有padding和border將他們分隔開

•都屬於垂直方向上相鄰的外邊距,可以是下面任意一種情況

•元素的margin-top與其第乙個常規文件流的子元素的margin-top

•元素的margin-bottom與其下乙個常規文件流的兄弟元素的margin-top

•height為auto的元素的margin-bottom與其最後乙個常規文件流的子元素的margin-bottom

•高度為0並且最小高度也為0,不包含常規文件流的子元素,並且自身沒有建立新的bfc的元素的margin-top

和margin-bottom

margin合併的3種場景:

(1)相鄰兄弟元素margin合併。

解決辦法:

•設定塊狀格式化上下文元素(bfc)

(2)父級和第乙個/最後乙個子元素的margin合併。

解決辦法:

對於margin-top合併,可以進行如下操作(滿足乙個條件即可):

•父元素設定為塊狀格式化上下文元素;

•父元素設定border-top值;

•父元素設定padding-top值;

•父元素和第乙個子元素之間新增內聯元素進行分隔。

對於margin-bottom合併,可以進行如下操作(滿足乙個條件即可):

•父元素設定為塊狀格式化上下文元素;

•父元素設定border-bottom值;

•父元素設定padding-bottom值;

•父元素和最後乙個子元素之間新增內聯元素進行分隔;

•父元素設定height、min-height或max-height。

(3)空塊級元素的margin合併。

解決辦法:

•設定垂直方向的border;

•設定垂直方向的padding;

•裡面新增內聯元素(直接space鍵空格是沒用的);

•設定height或者min-height。

回答:

margin重疊指的是在垂直方向上,兩個相鄰元素的margin發生重疊的情況。

一般來說可以分為四種情形:

第一種是相鄰兄弟元素的marin-bottom和margin-top的值發生重疊。這種情況下我們可以通過設定其中乙個元素為bfc

來解決。

第二種是父元素的margin-top和子元素的margin-top發生重疊。它們發生重疊是因為它們是相鄰的,所以我們可以通過這

一點來解決這個問題。我們可以為父元素設定border-top、padding-top值來分隔它們,當然我們也可以將父元素設定為bfc

來解決。

第三種是高度為auto的父元素的margin-bottom和子元素的margin-bottom發生重疊。它們發生重疊乙個是因為它們相

鄰,乙個是因為父元素的高度不固定。因此我們可以為父元素設定border-bottom、padding-bottom來分隔它們,也可以為

父元素設定乙個高度,max-height和min-height也能解決這個問題。當然將父元素設定為bfc是最簡單的方法。

第四種情況,是沒有內容的元素,自身的margin-top和margin-bottom發生的重疊。我們可以通過為其設定border、pa

dding或者高度來解決這個問題。

margin重疊問題

寬高100,底外距50 寬高100,上外距20 a c.d 當div.c標籤無內容時 d標籤的上邊距消失了 div.c有內容時 d標籤上邊距顯示 當有div巢狀,且外層div無內容,此時內層div的margin會消失,解決辦法有6種 1.外層c標籤 overflow hidden padding t...

忽略的問題 margin重疊

1.margin同向重疊。問題描述 解決方法 e.給內層div們設定float屬性 記得最後閉合浮動或者清除浮動 2.margin異向重疊 問題描述 依舊如上圖,first和second盒子都有margin 10px,但是顯示出來兩個盒子的距離卻不是20px,而仍然是10px。也就是說此時上面盒子的...

margin重疊與穿透問題

出現margin重疊的原因 同乙個bfc裡面兩個塊級元素會出現margin摺疊。解決方式 讓兩個塊級元素不在乙個bfc內。預設情況,子元素設定margin top或者margin bottom會影響其父元素,這就是所謂的margin穿透。解決方式 1.給父元素加個border 2.將父元素變成bfc...