Làm thế nào để làm cho một DIV không bọc?


179

Tôi cần tạo kiểu DIV chứa nhiều DIV khác. Người ta hỏi rằng các DIV này sẽ không bao bọc nếu cửa sổ trình duyệt bị thay đổi kích thước thành hẹp.

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 thấy DIV container 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 cho một container DIV không bọc không?


tôi đã thêm thẻ này: trắng-space: nowrap; và thẻ này: văn bản tràn: dấu chấm lửng; theo mã của tôi
saber tabatabaee yazdi

Câu trả lời:


245

Hãy thử sử dụng white-space: nowrap;theo kiểu thùng chứa (thay vì overflow: hidden;)


48

Nếu tôi không muốn xác định chiều rộng tối thiểu vì tôi không biết số lượng phần tử, điều duy nhất làm việc với tôi là:

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

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


33

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 tách bằng khoảng trắng. 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 nhưng đó là một vấn đề khó giải quyết ).


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

Bạn có thể sử dụng nhận xét HTML giữa các div </div><!-- --><div class="slide">nếu bạn muốn xóa khoảng trắng thừa giữa chúng. Kiểu khối nội tuyến làm cho khoảng trắng trong mã của bạn được chọn làm khoảng trắng trong tài liệu HTML.
Jo.

@Jo. để giảm kích thước trang, bạn có thể sử dụng cái gì đó không được hiển thị, ví dụ như khi sử dụng php: </div><?php ?><div class="slide">render như </div><div class="slide">trong mã nguồn.
Fleuv

Ngoài ra, nếu bạn tạo HTML bằng JavaScript, bạn có thể tránh các khoảng trắng. Tôi sử dụng DOThtml . HTML trên có thể được thay thế bằng cái này:dot("body").div(dot.iterate(4, function(i){return dot.div("something something something something").class("slide");})).class("container")
JSideris

30

Combo bạn cần là

white-space: nowrap

về cha mẹ và

display: inline-block; // or inline

về những đứa trẻ


25

Điều 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/


Đ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

10

overflow: hiddennên cho bạn hành vi đúng. Tôi đoán là nó đã RTLbị rối vì bạn có float: lefttrên divs đóng gói .

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


1
Tôi sẽ kiểm tra xem đó có phải là do "float: left" trên các div được đóng gói hay không. 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.
Morgan Cheng


2

Không ai ở trên làm việc cho tôi.

Trong trường hợp của tôi, tôi cần thêm phần sau vào điều khiển người dùng mà tôi đã tạo:

display:inline-block;


1

bạn có thể dùng

display: table;

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


0
<div style="height:200px;width:200px;border:; white-space: nowrap;overflow-x: scroll;overflow-y: hidden;">
   <p>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.</p>
</div>

0

Sử dụng display:flexwhite-space:nowrap

p{
  display:flex;
  white-space:nowrap;
  overflow:auto;
}
<h2>Sample Text.</h2>

<p>Some example text that will not wrap..lla et dictum interdum, nisi lorem egestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Mauris ante ligula, facilisis sed ornare eu, lobortis in odio. Praesent convallis urna a lacus interdum ut hendrerit risus congue. Nunc sagittis dictum nisi, sed ullamcorper ipsum d</p>

<h3>Then some other text</h3>


-1

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


Mặc dù điều này là đúng, nhưng nó hoàn toàn không xuất hiện để giải quyết câu hỏi.
Quentin

Điều này hoàn toàn giải quyết câu hỏi bởi vì span và div giống hệt nhau trong việc chia sẻ ngoại trừ div được bao bọc và span thì 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.
Mike

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
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.