首頁 > web前端 > css教學 > 主體

上下margin重疊傳遞問題

(*-*)浩
發布: 2019-09-12 14:33:16
原創
3099 人瀏覽過

我發現強迫症真的是我一個大病。 。 。每次都非得把所有情況都實驗出來不可。 。 。 BUT!!!!!!!!!悲催的是,這麼多情況我根本記不住。 。 。還是要寫程式碼的時候不斷出錯再排錯~受不了自己了!不過還是把這部分總結到這裡啦~

上下margin重疊傳遞問題

下面的幾個部分應該是margin重疊問題的所有情況了:

1、兩個普通元素上下的margin會合併為一個margin,哪個大選哪一個!

兩個浮動元素不會出現margin傳遞的問題,依然是上面元素的margin-bottom和下面元素的margin-top相加作為兩者之間的margin值。

2、兩個元素如果是包含關係,父元素和子元素上下margin值也會合併(推薦學習:CSS影片教學

##IE6、7和標準瀏覽器下,都不會發生margin傳遞! ! !

對於IE6、7來說:

即只要觸發haslayout,不管給不給父元素加邊框,不管標準瀏覽器會不會發生margin傳遞, IE6、7下都不會發生margin傳遞! ! !

而對標準瀏覽器來說:

只有加上邊框才能避免margin傳遞! ! !

為父元素新增邊框,則子元素和父元素之間的margin就有分割線了,此時將不會發生合併現象了!如果給子元素加上邊框兩者的margin值還是沒有分開,所以還是會發生重疊現象!

如果這裡父元素裡包含了多個區塊元素,則每個子元素之間滿足上下margin重疊,選擇兩者較大的margin作為兩者之間的margin,第一個子元素的top和父元素重疊(左圖上面白色距瀏覽器上方的白色區域即是),最後一個子元素的bottom和父元素重疊。 IE6、7和標準瀏覽器顯示效果均如左圖。

此時,如果兩個區塊元素是浮動元素,那麼,那麼就不存在子元素和父元素的margin傳遞情況,此時,上下的margin值則是兩者之間的各自margin值相加!標準瀏覽器顯示如下圖所示,IE6顯示如下圖右。但為什麼顯示有差異呢?

因為,額滴神啊!一波未平一波又起!塊狀元素和橫向margin和浮動三者引發了IE6的新的兼容性問題——雙邊距bug(注意IE7沒有雙邊距bug!!!!)

#由此

實踐時,首先一定要給父元素加觸發haslyout的屬性!這一條保證了在IE6、7下不出現margin傳遞問題和margin值消失問題;

#然後,考慮在標準瀏覽器下,給子元素加浮動可以解決沒有border時出現的margin傳遞問題,但此時加浮動後會造成IE6的雙邊距bug,所以我們實踐時盡量將浮動的塊狀元素的margin換為padding,如果實在不能換就給該元素加display:inline ;!

3、兩個Div(A、B)上下之間沒有margin值,但是A中有子元素有margin,這時該子元素的margin值會傳遞到兩者間,會使A、B兩個元素之間填入margin,僅限垂直方向! ! !

對於這個問題,大概就是這樣啦,其實也很簡單,只是我把所有的情況列出來了,其實綜合起來就是上面總結部分的內容。

我感覺這個margin傳遞和重疊都是因為兩者的margin值之間沒有邊框或者是padding將margin這一空白區域隔開! ! ! !

當父元素不加邊框,不設定寬高,即父級沒有觸發haslayout時

IE6、7和標準瀏覽器下,均會發生margin傳遞問題子元素和父元素的高度相同(子元素的top將和父元素的top在一條直線上,bottom將和父元素的bottom在一條直線上)而父元素則選擇兩者之間大的數值作為父元素的margin-top值和margin-bottom值! ! !

子元素的margin-left和margin-right值仍然存在

#當父元素不加邊框,但是,設定寬或高或zoom: 1;即父級加可以觸發haslayout的屬性時

標準瀏覽器下,會發生margin傳遞但是在IE6、7下則不會發生margin傳遞(即子元素的margin就是相對於父元素的,不會傳遞給父級)

當父級加邊框,且父級沒有觸發haslayout時

標準瀏覽器下,不會發生margin傳遞IE6、7下,子元素的margin徹底消失!

當父級加邊框,並且父級觸發haslayout(即加width或height或zoom:1)時,

以上是上下margin重疊傳遞問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板