Sử dụng: sau để xóa các phần tử nổi


105

Tôi có một danh sách và các li có một float:left;. Nội dung sau dấu <ul>phải được căn chỉnh chính xác. Do đó, tôi có thể xây dựng những thứ sau:

http://jsfiddle.net/8unU8/

Tôi nghĩ rằng tôi có thể xóa <div class="clear">bằng cách sử dụng các bộ chọn giả như: sau.

Nhưng ví dụ này không hoạt động:

http://jsfiddle.net/EyNnk/

Tôi có luôn phải tạo một div riêng để xóa các phần tử nổi không?

Câu trả lời:


260

Viết như thế này:

.wrapper:after {
    content: '';
    display: block;
    clear: both;
}

Kiểm tra http://jsfiddle.net/EyNnk/1/ này


Đây là cách để làm điều đó. nhưng hãy lưu ý điểm trong câu trả lời của tôi về ngữ nghĩa.
Alex

2
Chỉ là một thông tin nhỏ: ::aftervới dấu hai chấm là cách được khuyến nghị để nhắm mục tiêu phần tử giả.
Dennis98,

11
Mọi trình duyệt hỗ trợ dấu hai chấm (: :) cú pháp CSS3 cũng chỉ hỗ trợ cú pháp (:), nhưng IE 8 chỉ hỗ trợ dấu hai chấm, vì vậy hiện tại, bạn chỉ nên sử dụng dấu hai chấm để hỗ trợ trình duyệt tốt nhất. :: là định dạng mới hơn được thụt lề để phân biệt nội dung giả với bộ chọn giả. Nếu bạn không cần hỗ trợ IE 8, hãy sử dụng dấu hai chấm. css-tricks.com/almanac/selectors/a/
After

tại sao chúng ta nên đặt cái này: "content: ''; display: block;" ? và nếu bạn muốn một trình bao bọc nội tuyến thì sao?
Lucke

6

Không, bạn không làm điều gì đó như thế này là đủ:

<ul class="clearfix">
  <li>one</li>
  <li>two></li>
</ul>

Và CSS sau:

ul li {float: left;}


.clearfix:after {
  content: ".";
  display: block;
  clear: both;
  visibility: hidden;
  line-height: 0;
  height: 0;
}

.clearfix {
  display: inline-block;
}

html[xmlns] .clearfix {
   display: block;
}

* html .clearfix {
   height: 1%;
}

5

Điều này cũng sẽ hoạt động:

.clearfix:before,
.clearfix:after {
    content: "";
    display: table;
} 

.clearfix:after {
    clear: both;
}

/* IE 6 & 7 */
.clearfix {
    zoom: 1;
}

Đưa lớp clearfixcho phần tử mẹ , ví dụ như ulphần tử của bạn .

Nguồn ở đâyở đây .


1
hiển thị: bảng có thể thêm khoảng cách bổ sung; Tôi sử dụng display: block để thay thế
The Cog

0

Văn bản 'dasda' sẽ không bao giờ nằm ​​trong thẻ, phải không? Về mặt ngữ nghĩa và để trở thành HTML hợp lệ, chỉ cần thêm lớp rõ ràng vào đó:

http://jsfiddle.net/EyNnk/2/


1
Nó không phải là ngữ nghĩa gì cả. 1) Chúng tôi luôn xóa thành phần cha mẹ nếu con của anh ấy nổi trên đó, ví dụ như theo câu trả lời của bạn nếu tôi muốn cung cấp thông tin cơ bản về UL, nó không bao gồm LI vì UL không rõ ràng & 2) Tôi có một câu hỏi tại sao bạn cho rõ Lớp trong một DIV riêng biệt trước P. nếu bạn chỉ giao cho P thì cũng có tác dụng
cát

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.