margin摺疊-從子元素margin-top影響父元素引出的問題

正在作一個手機端電商項目,頂部導航棧的佈局是一個div包含一個子div,若是給在正常文檔流中的子div一個垂直margin-top,神奇的現象出現了,兩父子元素的邊距沒變,但父div跟着一塊兒往下走了!css

html代碼:

<div id="fatherbox">html

  <div id="childbox">首頁佈局

  </div>測試

</div>htm

css樣式:

#fatherbox{width:100%,height:64px;background-color:red}blog

#childbox{height:44px;margin-top:20px;background:yellow}文檔

 

解決方法:電商

1.父元素添加padding-top樣式;原理

2.父元素添加overflow:hidden樣式;方法

3.父元素或子元素浮動;

4.給父元素添加boarder(看需求而定);

5.爲父元素或子元素絕對定位;

6.在子元素前添加子div並設置height:1px和overflow:hidden樣式(若是添加的是inline-block元素,須要改display爲block)。

原理:margin摺疊(Collapsing Margins)

毗鄰的兩個或多個外邊距 (margin) 在垂直方向會合併成一個外邊距。

這裏的毗鄰指沒有上下padding-top,padding-bottom,border-top,border-bottom,元素內容不爲空。

最多見的margin摺疊是<p>元素並列時,每一個p都有上下1em的margin,但相臨的p只會顯示1em的間隔而不是2em。

本例中兩個div是父子關係,而且沒有padding-top和border-top,即父元素和子元素上邊重合。也屬於毗鄰的範疇,因此也出現了margin摺疊,本例顯示了子元素的margin-top;

 詳細的margin重合計算能夠參考這篇:http://www.cr173.com/html/17041_1.html

避免這個問題只要使條件不符合或者隱藏margin:給父元素加padding/border,父子間添加其餘元素,或者設置爲浮動,定位都行。

IE中的狀況尚未具體測試過,後面補全。

相關文章
相關標籤/搜索