2012-05-22 33 views
96

Tôi có một danh sách và số li có một số float:left;. Nội dung sau <ul> phải được căn chỉnh chính xác. Vì vậy tôi có thể xây dựng như sau:Sử dụng: sau để xóa các phần tử nổi

http://jsfiddle.net/8unU8/

tôi nghĩ, tôi có thể loại bỏ các <div class="clear"> bằng cách sử dụng selectors giả như: sau.

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

http://jsfiddle.net/EyNnk/

Tôi luôn phải tạo một div riêng để xóa các yếu tố nổi?

Trả lời

231

Viết như thế này:

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

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

+0

Đây là cách thực hiện. nhưng xin lưu ý điểm trong câu trả lời của tôi về ngữ nghĩa. – Alex

+2

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

+7

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 đơn, vì vậy hiện tại, chỉ nên sử dụng dấu hai chấm đơn để hỗ trợ trình duyệt tốt nhất . :: là định dạng mới hơn thụt vào để phân biệt nội dung giả từ 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. https://css-tricks.com/almanac/selectors/a/after-and-before/ – retroriff

0

Văn bản 'dasda' sẽ không bao giờ không có trong một thẻ, phải không? Ngữ nghĩa và là HTML hợp lệ nó như là, chỉ cần thêm các lớp rõ ràng cho rằng:

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

+1

Đó không phải là ngữ nghĩa chút nào. 1) Chúng tôi luôn luôn rõ ràng yếu tố cha mẹ nếu con của ông có nổi trên nó ví dụ như câu trả lời của bạn nếu tôi muốn cung cấp cho nền vào UL nó không bao gồm LI vì UL là không rõ ràng & 2) Tôi có một câu hỏi Tại sao bạn cho rõ ràng Xếp lớp trong một DIV riêng biệt trước P.nếu bạn cung cấp cho P chỉ nó cũng làm việc – sandeep

6

Không, bạn không nó đủ để làm một cái gì đó như thế này:

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

Và CSS sau đây:

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%; 
} 
0

Sử dụng

.wrapper:after { 
    content : '\n'; 
} 

Giống như giải pháp được cung cấp bởi Roko. Nó cho phép chèn/thay đổi nội dung bằng cách sử dụng: after và: trước psuedo. Để biết chi tiết kiểm tra http://www.quirksmode.org/css/content.html

3

này sẽ làm việc tốt:

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

.clearfix:after { 
    clear: both; 
} 

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

Cho lớp clearfix tới phần tử mẹ, ví dụ yếu tố ul của bạn.

Nguồn herehere.

+0

hiển thị: bảng có thể thêm khoảng cách thêm; Thay vào đó, tôi sử dụng display: block –

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