2012-11-29 35 views
5

的follwoing html文件有兩個div,一個帶有邊框(id='with'),一個沒有(id='without)。帶有邊框的div呈現(至少在firefox和chrome上)明顯高於帶邊框的div。爲什麼1px寬度的邊框將div增加20個像素?

我預期他們以改變高度最多爲2個像素,然而,alert告訴我,他們的高度爲19個像素的不同。

我想不通這是爲什麼。

<!DOCTYPE HTML> 
<html> 
<head> 
    <title>Height of divs with/without a border</title> 
    <script type="text/javascript" src='jquery-1.8.3.js'></script> 

    <script type='text/javascript'> 

    $(document).ready(function() { 

      alert($('#with' ).height() + '/' + 
       $('#without').height()); 

    }); 

    </script> 

</head> 
<body> 

    <div style='width:300px;border:black 1px solid;background-color:yellow' id='with'> 
    <h1>With a border</h1> 
    bla<br> 
    bla<br> 
    bla<br> 
    </div> 

    <div style='width:300px;background-color:green' id='without'> 
    <h1>Without a border</h1> 
    bla<br> 
    bla<br> 
    bla<br> 
    </div> 

</body> 
</html> 
+1

只是撥弄這一點:http://jsfiddle.net/kAZmD/ – Elliott

+0

我得到了IE9七十四分之七十四和80/80鉻 – Elliott

+0

@Elliott看到我的回答如下; jsfiddle默認使用normalize css。禁用它,你會看到什麼OP意味着 – lnrbob

回答

4

默認情況下,<h1>元素具有頂部和底部邊緣和these margins are collapsed。有關於邊緣如何摺疊(即組合)的規則。適用於您的示例中的規則是:

家長和第一/最後一個子

如果沒有邊框,填充,內嵌的內容,或間隙 分離塊的上邊距與其第一 子塊的上邊距,或無邊框,填充,內聯內容,高度, 最小高度,或者最大高度與它的最後一個子的邊距以分離塊 的邊距,那麼這些利潤率就會崩潰。 摺疊的邊距最終在父級之外。

在你的榜樣,規則可以解讀爲:

  • div#without沒有邊界,它的頂邊(即0)被摺疊與h1上邊距(這是〜20像素)。 摺疊保證金最終在div以外。這意味着這20px不會添加到div的高度。

  • div#with具有邊框,所以h1上邊距(這是〜20像素)呈現股利,使其20像素高超過預期。

相關問題