2012-11-29 32 views
5

Tài liệu html theo sau có hai div, một có đường viền (id='with') và một không có (id='without). Các div với biên giới được trả lại (ít nhất là trên firefox và chrome) cao hơn đáng kể so với một với biên giới.tại sao đường viền có chiều rộng 1px tăng div lên 20 pixel?

Tôi đã dự kiến ​​chúng thay đổi tối đa 2 pixel, nhưng, alert cho tôi biết chiều cao của chúng là 19 pixel khác nhau.

Tôi không thể hiểu tại sao lại như vậy.

<!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

chỉ fiddled này: http://jsfiddle.net/kAZmD/ – Elliott

+0

tôi nhận được 74/74 trong ie9 và 80/80 trong chrome – Elliott

+0

@Elliott xem câu trả lời của tôi dưới đây; jsfiddle sử dụng css bình thường hóa theo mặc định. Vô hiệu hóa nó và bạn sẽ thấy những gì OP có nghĩa là – lnrbob

Trả lời

4

Theo mặc định, các yếu tố <h1> có lề trên và dưới và these margins are collapsed. Có các quy tắc về cách các lề bị thu hẹp (tức là kết hợp). Các quy tắc áp dụng lại ví dụ của bạn là:

mẹ và đứa con đầu/cuối cùng

nếu không có biên giới, đệm, nội dung nội tuyến, hoặc giải phóng mặt bằng để tách margin-top của một khối với lề trên cùng của khối con đầu tiên là , hoặc không có đường viền, đệm, nội dung nội tuyến, chiều cao, chiều cao tối thiểu hoặc chiều cao tối đa để tách lề dưới cùng của khối với lề dưới cùng của đứa con cuối cùng, sau đó những lợi nhuận đó sụp đổ. Biên độ thu gọn kết thúc ngoài cha mẹ.

Trong ví dụ của bạn, các quy tắc có thể được đọc như sau:

  • div#without không có đường viền, lề trên của nó (được 0) tính được thu nhỏ với lề trên của h1 (đó là ~ 20px). Lề thu gọn kết thúc bên ngoài div. Điều này có nghĩa là 20px này không thêm vào chiều cao của div.

  • div#with có biên giới, vì vậy bên lề đầu h1 (đó là ~ 20px) được render bên div, làm cho nó 20px cao hơn mong đợi.

6

Đó là vì lề trên cho lồng nhau <h1 /> được chứa khi có đường viền. Chú thích @ Elliott's fiddle không hoạt động vì các lề đã được gỡ bỏ bởi các thiết lập mặc định của jsfiddle.

EDIT: kiểm tra này để biết thêm infos http://reference.sitepoint.com/css/collapsingmargins

Các vấn đề liên quan