問題與對策:CSS的margin塌陷(collapse)

來源:互聯網
上載者:User

標籤:css   w3c   margin   塌陷   

來源:http://www.ido321.com/387.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的一處即可。w3school也規定:當兩個垂直外邊距相遇時,它們將形成一個外

邊距。合并後的外邊距的高度等於兩個發生合并的外邊距的高度中的較大者。


    但對於父塊DIV內含子塊DIV的情況,就會按另一條CSS慣例來解釋了,那就是:對於

有塊級子項目的元素計算高度的方式,如果元素沒有垂直邊框和填充,那其高度就是其子

元素頂部和底部邊框邊緣之間的距離。所以對於代碼:

   1: <div class="father"></div>

father這個div的高度為0,因為裡面沒有能夠撐開div的內容。如果變為:

   1: <div class="father">I am here.</div>

則高度就是文字的高度,因為此時文字在撐著這個DIV。


    話說回來,一個DIV和它的子DIV特別重視垂直邊框或填充,也就好像是,一口鍋,裡

面放個盆,能不能扣住裡面的盆,主要看鍋蓋了,垂直邊框或填充就是這個“鍋蓋”。於

是解決的方式至少有以下三種:


  1、需要給父div設定邊框,當然可以設定邊框為透明:

   1: border:1px solid transparent
   2: 或
   3: border-top:1px solid transparent

  2、為父DIV添加padding,或者至少添加padding-top;

   1: padding:1px
   2: 或
   3: padding-top:1px;   /*必須大於0*/

  3、為父DIV添加overflow:hidden 

   1: over-flow:hidden;


問題與對策:CSS的margin塌陷(collapse)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.