2011-12-19 26 views
8

Có một cuộc thảo luận với một đồng nghiệp về những gì là thực hành tốt nhất với CSS rõ ràng/tràn. Hãy đóng một người trong chúng ta và giải thích tại sao người ta lại tốt hơn người kia.Thực hành tốt nhất cho CSS rõ ràng hoặc tràn

Joel CODE (sử dụng tràn):

<style> 
    .container { overflow: hidden; } 
    .one, .two { float: left; width: 50px; height: 50px; background-color: red; } 
</style> 

<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
</div> 
<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
</div> 
<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
</div> 
<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
</div> 

CHRIS' CODE (sử dụng rõ ràng):

<style> 
    .clear { clear: both; } 
    .one, .two { float: left; width: 50px; height: 50px; background-color: red; } 
</style> 

<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
    <div class="clear"></div> 
</div> 
<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
    <div class="clear"></div> 
</div> 
<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
    <div class="clear"></div> 
</div> 
<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
    <div class="clear"></div> 
</div> 

Cả hai làm cho hình ảnh này:

Properly positioned elements

Ai là đúng ? :)

+4

Cả hai đều đúng. – BoltClock

+0

http://www.impressivewebs.com/overflow-hidden-problem/ –

+4

bản sao có thể có của [Phần tử con nổi: tràn: ẩn hoặc rõ ràng: cả hai?] (Http://stackoverflow.com/questions/2648205/floated- phần tử con-tràn-hoặc-clearboth) –

Trả lời

6

Nếu bạn đang ở trong tình huống mà bạn luôn biết yếu tố thành công sẽ như thế nào, bạn có thể áp dụng rõ ràng: cả hai; giá trị cho yếu tố đó và đi về doanh nghiệp của bạn. Điều này lý tưởng vì nó không đòi hỏi phải có các hacks ưa thích và không có yếu tố bổ sung nào làm cho nó trở thành ngữ nghĩa hoàn hảo. Tất nhiên mọi thứ thường không hoạt động theo cách đó và chúng tôi cần có thêm các công cụ xóa nổi trong hộp công cụ của chúng tôi.

http://css-tricks.com/all-about-floats/

1

Đây là một thỏa hiệp:

DEMO jsBin

CSS:

.container { display:table; } 
    .one, .two { float: left; width: 50px; height: 50px; background-color: red; margin:1px;} 

HTML:

<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
</div> 
<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
</div> 
<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
</div> 
<div class="container"> 
    <div class="one"></div> 
    <div class="two"></div> 
</div> 

Tôi sẽ viết theo cách này. Mã CHRIS là một cái gì đó tôi không viết nhưng chỉ gây ra các DIV trống dư thừa.

+0

Không có gì xung quanh để xóa các container nổi của container cuối cùng. Làm thế nào điều này vẫn trả lời câu hỏi? – BoltClock

+0

Bạn thân mến @Bolt, Nếu không có gì để xóa, hơn là bạn đang thiếu thuộc tính '.one, .two {float: left'. Điều này trả lời câu hỏi cả hai đều đúng nhưng đó là cách tôi viết nó. Vì vậy, bây giờ họ có thể thêm câu trả lời của tôi câu hỏi! ;) Tôi sẽ thêm giải thích cho câu trả lời của tôi. –

+2

Tôi nghĩ rằng bạn đã đọc sai ý kiến ​​của tôi - tôi nói rằng hai đứa trẻ chưa lưu hành cuối cùng sẽ không bị xóa. – BoltClock

0

Vì CSS trong cả hai trường hợp đều giống nhau về độ phức tạp và khả năng bảo trì, giải pháp với HTML đơn giản hơn (và do đó, nhỏ hơn) và các chiến thắng tải trọng tổng thể. Nó không phải là một sự khác biệt lớn, và với nén, mã lặp đi lặp lại có thể sẽ biến mất, nhưng đơn giản hơn và nhỏ hơn luôn luôn tốt hơn nếu mọi thứ khác bằng nhau.

0

Còn về micro clearfix thì sao? Không có đánh dấu thêm, không có overflow: hidden; cắt, hỗ trợ trình duyệt chéo cho IE 6+.

0

Sở thích cá nhân của tôi là kỹ thuật overflow:hidden. Tôi nghĩ điều này là bởi vì nổi gì đó là một quyết định phong cách. Để đặt một lớp của clear trong đánh dấu có vẻ như với tôi như thêm thông tin kiểu vào lớp dữ liệu. Nó tương tự (nhưng hư không gần như là xấu) như thêm css nội tuyến. (Infact, nếu bạn nghĩ về nó, bạn cũng có thể thêm style="clear:both" vào div bạn muốn thêm class="clear" đến).

Đây tất nhiên là ý kiến ​​cá nhân của tôi. Tôi không yêu cầu cái nào tốt hơn cái kia. Nhưng tôi rất hiếm khi gặp sự cố với overflow:hidden.

2

tràn: ẩn được sử dụng tốt nhất khi bạn có vùng chứa nhỏ hơn nội dung bên trong; trong khi rõ ràng: cả hai được sử dụng tốt nhất khi bạn muốn một container nổi đến vị trí không chính nó cùng với container gần nhất.

xem ví dụ về squres đỏ của bạn, bạn sẽ muốn sử dụng rõ ràng hơn là tràn, nhưng không được thực hiện ở đây. có lẽ một cái gì đó giống như:

.container { width:110px; clear:both; } 
.one, .two { float: left; width: 50px; height: 50px; margin-right:10px; background-color: red; } 

về cơ bản bạn vừa sai vừa phải. Joel sử dụng cách tiếp cận html tốt hơn, nhưng Chris đang sử dụng đúng mã CSS, chỉ theo cách sai.

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