轉自:http://blog.chinaunix.net/uid-22414998-id-3138656.html
對於以下簡單代碼:
<!DOCTYPEHTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><title></title> <metaname=""content=""><style>*{margin:0px;padding:0px;}#no1{background:#808000;width:300px;height:300px;margin:100px 0 0 100px;}#no2{background:#c0c0c0;width:150px;height:150px;margin-left:20px;margin-top:30px;}</style></head><body><div id="no1"><div id="no2">Span2</div></div></body></html>
如果您認為應該是這樣的話:
那就錯了。結果是這樣的:
因為CSS中存在一個margin collapse,即邊界塌陷或者說邊界重疊。對於上下兩個並列的div塊而言,上面div的margin-bottom和下面div的margin-top會塌陷,也就是會取上下兩者margin裡最大值作為顯示值,所以從這個意義上說:CSS及瀏覽器的設計者們希望我們在布局時,如果遇到上下兩個並排內容塊的安排,最好只設定其中每個塊上或下margin的一處即可。
但對於父塊DIV內含子塊DIV的情況,就會按另一條CSS慣例來解釋了,那就是:對於有塊級子項目的元素計算高度的方式,如果元素沒有垂直邊框和填充,那其高度就是其子項目頂部和底部邊框邊緣之間的距離。所以對於代碼:
<div
class="father"></div> father這個div的高度為0,因為裡面沒有能夠撐開div的內容。如果變為:
<div
class="father">I am here.</div> 則高度就是文字的高度,因為此時文字在撐著這個DIV。 話說回來,一個DIV和它的子DIV特別重視垂直邊框或填充,也就好像是,一口鍋,裡面放個盆,能不能扣住裡面的盆,主要看鍋蓋了,垂直邊框或填充就是這個“鍋蓋”。於是解決的方式至少有以下兩種:
結論:
解決父子DIV中頂部margin cllapse的問題,需要給父div設定:
1、邊框,當然可以設定邊框為透明;border:1pxsolidtransparent
- 或
- border-top:1pxsolidtransparent
2、為父DIV添加padding,或者至少添加padding-top;
此外,還可以通過over-flow來解決,給父DIV寫入:over-flow:hidden;
希望對大家有所協助。