2009-04-05 35 views
128

Tôi cần phải tạo kiểu thùng chứa DIV chứa nhiều DIV khác. Nó được hỏi rằng những DIV sẽ không quấn nếu cửa sổ trình duyệt được thay đổi kích thước để được thu hẹp.Làm thế nào để làm cho một DIV không quấn?

Tôi đã cố gắng làm cho nó hoạt động như dưới đây.

<style> 
    .container 
    { 
     min-width: 3000px; 
     overflow: hidden; 
    } 
    .slide 
    { 
     float: left; 
    } 
</style> 
<div class="container"> 
    <div class="slide">something</div> 
    <div class="slide">something</div> 
    <div class="slide">something</div> 
    <div class="slide">something</div> 
</div> 

Điều này hoạt động trong hầu hết các trường hợp. Tuy nhiên, trong một số trường hợp đặc biệt, kết xuất không chính xác. Tôi đã tìm thấy vùng chứa DIV thay đổi thành chiều rộng 3000px trong RTL của IE7; và nó trở nên lộn xộn.

Có cách nào khác để làm hộp chứa DIV không quấn?

+0

i thêm thẻ này: ** white-space: nowrap; ** và thẻ này: ** text-overflow: ellipsis; ** để tôi mã số –

Trả lời

10

overflow: hidden sẽ cung cấp cho bạn hành vi chính xác. Đoán của tôi là RTL bị làm sai lệch bởi vì bạn có float: left trên gói được đóng gói div s.

Bên cạnh lỗi đó, bạn đã có hành vi đúng.

+1

Tôi sẽ kiểm tra xem đó là do "trôi nổi: trái" trên div đóng gói. Nhưng, cùng một mã hoạt động tốt trên Firefox và Safari, không phải trên IE. Vì vậy, tôi thực sự nghi ngờ đây là trường hợp. –

179

Hãy thử sử dụng white-space: nowrap; theo phong cách container (thay vì overflow: hidden;)

3

Cố gắng sử dụng width: 3000px; đối với trường hợp của IE.

33

Nếu tôi không muốn để xác định chiều rộng tối thiểu bởi vì tôi không biết số tiền của các yếu tố điều duy nhất mà làm việc với tôi là:

display: inline-block; 
white-space: nowrap; 

Nhưng chỉ trong Chrome và Safari:/

24

sau đây làm việc cho tôi mà không nổi (tôi sửa đổi ví dụ của bạn một chút cho hiệu ứng hình ảnh):

.container 
 
{ 
 
    white-space: nowrap; /*Prevents Wrapping*/ 
 
    
 
    width: 300px; 
 
    height: 120px; 
 
    overflow-x: scroll; 
 
    overflow-y: hidden; 
 
} 
 
.slide 
 
{ 
 
    display: inline-block; /*Display inline and maintain block characteristics.*/ 
 
    vertical-align: top; /*Makes sure all the divs are correctly aligned.*/ 
 
    white-space: normal; /*Prevents child elements from inheriting nowrap.*/ 
 
    
 
    width: 100px; 
 
    height: 100px; 
 
    background-color: red; 
 
    margin: 5px; 
 
}
<div class="container"> 
 
    <div class="slide">something something something</div> 
 
    <div class="slide">something something something</div> 
 
    <div class="slide">something something something</div> 
 
    <div class="slide">something something something</div> 
 
</div>

Các div có thể được phân cách bằng dấu cách. Nếu bạn không muốn điều này, hãy sử dụng margin-right: -4px; thay vì margin: 5px; cho .slide (nó xấu xí nhưng it's a tricky problem to deal with).

+0

Câu trả lời hay. Tôi đã thêm một ví dụ tương tự dưới đây nhưng tôi đã xóa nó sau khi tôi đã nhìn thấy của bạn. Nếu bạn không phải hỗ trợ IE9, bạn cũng có thể sử dụng flexbox: https://jsfiddle.net/7gsrb38L/1/ – ValentinVoilean

+0

Bạn có thể sử dụng ý kiến ​​HTML giữa 'divs

' if you want to remove the extra spaces between them. The inline-block style causes the white space in your code to be picked up as space in the HTML document. –

+0

@Jo. to reduce the page size you could rather use something what is not rendered e.g. when using php: '

' renders as '
'trong mã nguồn. – Fleuv

1

bạn có thể sử dụng

display: table; 

cho container của bạn và therfore tránh overflow: hidden;. Nó sẽ làm công việc nếu bạn sử dụng nó chỉ cho mục đích warpping.

2

Không có điều nào ở trên phù hợp với tôi.

Trong trường hợp của tôi, tôi cần phải thêm dòng sau vào sự kiểm soát người sử dụng tôi đã tạo ra:

display:inline-block; 
-1

Thẻ <span> được sử dụng để nhóm inline-yếu tố trong một tài liệu.
(source)

+0

Trong khi điều này là đúng, nó không xuất hiện để giải quyết các câu hỏi cả. – Quentin

+0

Điều này hoàn toàn giải quyết các câu hỏi vì span và div là giống hệt nhau trong everithing ngoại trừ div được bọc và span là không. Và bạn có thể thực hiện bất kỳ cách giải quyết nào bạn muốn. –

+2

Điều đó có nghĩa là đề xuất của bạn là "Sử dụng nhịp thay vì div"? Bởi vì đó không phải là những gì bạn nói. – Quentin

18

này đã làm việc cho tôi:

.container { 
 
    display: inline-flex; 
 
} 
 

 
.slide { 
 
    float: left; 
 
}
<div class="container"> 
 
    <div class="slide">something1</div> 
 
    <div class="slide">something2</div> 
 
    <div class="slide">something3</div> 
 
    <div class="slide">something4</div> 
 
</div>

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

+0

Điều này với tràn: ẩn làm việc một điều trị cho tôi. Cảm ơn. – Alfie

12

Các kết hợp bạn cần là

white-space: nowrap 

trên phụ huynh và

display: inline-block; // or inline 

trên con

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