2012-11-26 34 views
74

Lề lề của tôi không hoạt động theo cách tôi muốn hoặc mong đợi chúng. Tôi có vẻ như đầu trang margin-top của tôi ảnh hưởng đến các thẻ div xung quanh nó.Khủng bố lề CSS; Ký quỹ thêm khoảng cách bên ngoài phần tử cha

Đây là những gì tôi muốn và mong đợi: What I want....

... nhưng đây là những gì tôi kết thúc với: What I get...

Nguồn:

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Margin test</title> 

<style type="text/css"> 
body { 
    margin:0; 
} 
#page { 
    margin:0; 
    background:#FF9; 
} 
#page_container { 
    margin:0 20px; 
} 
h1 { 
    margin:50px 0 0 0; 
} 
</style> 

</head> 

<body> 

<div id="page"> 
    <div id="page_container"> 
     <header id="branding" role="banner"> 
      <hgroup> 
       <h1 id="site-title"><span><a href="#" title="Title" rel="home">Title</a></span></h1> 
       <h2 id="site-description">Description</h2> 
      </hgroup> 
     </header> 
    </div> 
</div> 

Tôi đã phóng đại lề trong examp này le. Lề trình duyệt mặc định trên thẻ h1 có phần nhỏ hơn và trong trường hợp của tôi, tôi sử dụng Twitter Bootstrap, với Normalizer.css đặt lề mặc định là 10px. Không quan trọng, điểm chính là; Tôi không thể, không nên, muốn không thay đổi lề trên thẻ h1.

Tôi đoán nó giống với câu hỏi khác của tôi; Why does this CSS margin-top style not work?. Câu hỏi là làm cách nào để tôi giải quyết vấn đề cụ thể này?

Tôi đã đọc a few threads về các sự cố tương tự nhưng chưa tìm thấy bất kỳ câu trả lời và giải pháp thực tế nào. Tôi biết việc thêm padding:1px; hoặc border:1px; giải quyết được sự cố. Nhưng điều đó chỉ thêm các vấn đề mới, vì tôi không muốn có một padding cũng không phải là một đường viền trên các thẻ div của tôi.

Phải có giải pháp tốt nhất, tốt nhất? Điều này phải khá phổ biến.

+0

Bạn bắt đầu với đặt lại CSS? –

+0

Tôi sử dụng Normalizer.css. nhưng đó không phải là vấn đề. Nếu tôi xóa thẻ h1. Không có vấn đề gì cả. Vấn đề là tôi muốn có một lề trên thẻ h1 của tôi và đó là ảnh hưởng đến các yếu tố xung quanh. – jamietelin

+0

Bạn có thể [đăng bản demo] (http://jsfiddle.net/) bằng bất kỳ cơ hội nào không? –

Trả lời

128

Thêm overflow:auto vào số #page div.

jsFiddle example

Và kiểm tra collapsing margins trong khi bạn đang ở đó.

+3

Điều đó có hiệu quả. Tìm thấy nhiều ví dụ ở đây (http://www.seifi.org/css/understanding-taming-collapsing-margins-in-css.html) và một số giải thích tốt. Không có giải pháp nào thực sự đáp ứng 100%. Nhưng tôi đoán người ta phải sống với nó, lề phải làm việc theo cách này hoặc định dạng văn bản sẽ là không thể. 99% thời gian hoạt động khi cần. Nhưng hiện tại, mọi vấn đề xảy ra khi thiết kế bố cục. : P – jamietelin

+3

tràn: bị ẩn; cũng làm việc cho tôi và làm việc tốt hơn cho tôi trong kịch bản của tôi. – stuyam

8

Vấn đề là phụ huynh không tính đến trẻ em về chiều cao. Thêm display:inline-block; đã làm cho tôi.

Full CSS

#page { 
    margin:0; 
    background:#FF9; 
    display:inline-block; 
    width:100%; 
} 

See Fiddle

12

Thêm bất kỳ một trong những quy tắc sau đây:

float: left/right; 
position: absolute; 
display: inline-block; 
overflow: auto/scroll/hidden; 
clear: left/right/both; 

này là do collapsing margins. Xem bài viết về hành vi này here.

Theo bài báo:

Các đặc điểm kỹ thuật W3C định nghĩa sụp đổ lề như sau:

“Trong kỹ thuật này, khái niệm sụp đổ lề có nghĩa là lợi nhuận liền kề (không có nội dung không trống, đệm, hoặc khu vực biên giới, hoặc giải phóng mặt bằng riêng biệt) của hai hoặc nhiều hộp (có thể cạnh nhau hoặc lồng nhau) kết hợp để tạo thành một lề duy nhất. ”

Điều này cũng đúng đối với eleme mẹ-con nts.

Tất cả các câu trả lời bao gồm một trong những giải pháp khả thi:

Có những tình huống khác, nơi mà yếu tố không có lợi nhuận của họ sụp đổ:

  • nổi yếu tố
  • yếu tố hoàn toàn vị trí
  • các phần tử khối nội tuyến
  • các phần tử có bộ tràn vào bất kỳ mục nào khác ngoài visibl e (Họ không sụp đổ lề với con cái của họ.)
  • xóa các yếu tố (Họ không sụp đổ lề hàng đầu của họ với lề dưới khối cha mẹ của họ.)
  • phần tử gốc
Các vấn đề liên quan