Điều này liên quan đến cách lề chồng lên nhau và cách một số thuộc tính buộc chúng phải được chứa. Nếu bạn đặt 2x div trên một trang, cả hai đều có lề 100px, khoảng cách giữa các div đó sẽ là 100px. Không phải 200px. Đó là vì lợi nhuận được phép chồng lên các lề khác. Đó chỉ là cách lề hoạt động. Đó là một điều tốt.
Nhưng nếu bạn đặt một div bên trong div khác, cả hai đều có lề, thì các lề đó cũng trùng nhau. Lề của phần tử con chồng lên nhau của cha mẹ.
Nhưng, một số thuộc tính - biên giới, như bạn đã phát hiện, nhưng cũng đệm và tràn - buộc phụ huynh phải chứa lề của con thay vì chồng chéo chúng.
Tôi chắc rằng ai đó có thể đưa ra giải thích kỹ thuật hơn, nhưng đó là cách tôi nghĩ về những gì đang xảy ra.
Đây là trường hợp thử nghiệm được đơn giản hóa: http://jsbin.com/ukodus/2/
Xóa //
trước bất kỳ dòng CSS nào để xem hiệu ứng.
"Hành vi này được gọi là sự sụp đổ lề. Chỉ trên/lề dưới sẽ sụp đổ, không phải sang trái/phải." - @cimmanon
Có thể là một vấn đề với jsbin .. hoặc điều này có xảy ra trong mã thử nghiệm của bạn không? –
Trong môi trường trong sạch: http://jsbin.com/ibowed/1/quiet -> F12, hãy kiểm tra đường viền trên div được phân loại '.top'. Tương tự. – zsitro
+1; rất kỳ quặc. Nó được kích hoạt bởi 'margin-top' âm trên div bên trong; loại bỏ điều đó khỏi phương trình và chuyển đổi đường biên bây giờ hoạt động như mong đợi. Tôi không thể giải thích cho thời điểm này tại sao phong cách của các yếu tố bên trong nên có hiệu ứng này trên các yếu tố bên ngoài mặc dù. – Spudley