父元素與子元素之間的margin-top問題


父元素的盒子包含一個子元素盒子,給子元素盒子一個垂直外邊距margin-top,父元素盒子也會往下走margin-top的值,而子元素和父元素的邊距則沒有發生變化。

 

html代碼

<div class="box1">
<div class="box2"></div>
</div>

css樣式

.box1{height:200px;width:200px;background:gray;}
.box2{height:100px;width:100px;background:gold;margin-top:50px;}

 

BUG原因:

In this specification, the expression collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or more boxes (which may be next to one another or nested) combine to form a single margin. 所有毗鄰的兩個或更多盒元素的margin將會合並為一個margin共享之。毗鄰的定義為:同級或者嵌套的盒元素,並且它們之間沒有非空內容、Padding或Border分隔。

這就是原因了。“嵌套”的盒元素也算“毗鄰”,也會 Collapsing Margins。這個合並Margin其實很常見,就是文章段落元素<p/>,並列很多個的時候,每一個都有上下1em的margin,但相鄰的<p/>之間只會顯示1em的間隔而不是相加的2em。這個很好理解,我就是奇怪為什么W3C要讓嵌套的元素也共享Margin,想不出來在什么情況下需要這樣的表現。   這個問題的避免方法很多,只要破壞它出現的條件就行。給 Outer Div 加上 padding/border,或者給 Outer Div / Inner Div 設置為 float/position:absolute(CSS2.1規定浮動元素和絕對定位元素不參與Margin折疊)。

 

解決方法
1、修改父元素的高度,增加padding-top樣式模擬(padding-top:1px;常用)
2、為父元素添加overflow:hidden;樣式即可(完美)
3、為父元素或者子元素聲明浮動(float:left;可用)
4、為父元素添加border(border:1px solid transparent可用)
5、為父元素或者子元素聲明絕對定位


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM