CSS的margin塌陷(collapse)


 對於以下簡單代碼:

點擊(此處)折疊或打開

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta name="" content="">
  6. <style>
  7. *{
  8.   margin:0px;
  9.   padding:0px;
  10. }
  11. #no1{
  12.   background:#808000;
  13.   width:300px;
  14.   height:300px;
  15.   margin:100px 0 0 100px;
  16. }
  17. #no2{
  18.   background:#c0c0c0;
  19.   width:150px;
  20.   height:150px;
  21.   margin-left:20px;
  22.   margin-top:30px;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div id="no1">
  28. <div id="no2">Span2
  29. </body>
  30. </html>

    如果您認為應該是這樣的話:

    

    那就錯了。結果是這樣的:

   

    因為CSS中存在一個margin collapse,即邊界塌陷或者說邊界重疊。對於上下兩個並列的div塊而言,上面div的margin-bottom和下面div的margin-top會塌陷,也就是會取上下兩者margin里最大值作為顯示值,所以從這個意義上說:CSS及瀏覽器的設計者們希望我們在布局時,如果遇到上下兩個並排內容塊的安排,最好只設置其中每個塊上或下margin的一處即可

    但對於父塊DIV內含子塊DIV的情況,就會按另一條CSS慣例來解釋了,那就是:對於有塊級子元素的元素計算高度的方式,如果元素沒有垂直邊框和填充,那其高度就是其子元素頂部和底部邊框邊緣之間的距離。所以對於代碼:

點擊(此處)折疊或打開

  1. <div class="father"></div>
    father這個div的高度為0,因為里面沒有能夠撐開div的內容。如果變為:
 

點擊(此處)折疊或打開

  1. <div class="father">I am here.</div>
    則高度就是文字的高度,因為此時文字在撐着這個DIV。
    話說回來,一個DIV和它的子DIV特別重視垂直邊框或填充,也就好像是,一口鍋,里面放個盆,能不能扣住里面的盆,主要看鍋蓋了,垂直邊框或填充就是這個“鍋蓋”。於是解決的方式至少有以下兩種:
 
     結論:
    解決父子DIV中頂部margin cllapse的問題,需要給父div設置:
    1、邊框,當然可以設置邊框為透明;

點擊(此處)折疊或打開

  1. border:1px solid transparent
  2. border-top:1px solid transparent
     2、為父DIV添加padding,或者至少添加padding-top;
    此外,還可以通過over-flow來解決,給父DIV寫入:

點擊(此處)折疊或打開

  1. over-flow:hidden;
    希望對大家有所幫助。
 


免責聲明!

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



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