2009-04-05 17 views
128

Potrzebuję utworzyć styl DIV kontenera, który zawiera wiele innych DIV. Pojawia się pytanie, czy te DIV nie będą się zawijać, jeśli wielkość okna przeglądarki zostanie zmniejszona.Jak zrobić DIV nie zawijać?

Próbowałem zrobić to jak poniżej.

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

Działa to w większości przypadków. Jednak w niektórych szczególnych przypadkach renderowanie jest nieprawidłowe. Zauważyłem, że DIV kontenera zmienia się na 3000px szerokości w RTL IE7; i staje się brudny.

Czy istnieje inny sposób na zapobieganie zawijaniu pojemnika DIV?

+0

I dodaje ten tag: ** white-space: nowrap; ** i ten tag: ** text-overflow: wielokropek; ** do mojego kod –

Odpowiedz

10

overflow: hidden powinien dać ci prawidłowe zachowanie. Domyślam się, że RTL jest pomieszany, ponieważ masz float: left na enkapsulowanych div s.

Oprócz tego błędu, masz odpowiednie zachowanie.

+1

Sprawdzę, czy jest to spowodowane "float: left" na enkapsulowanych div. Ale ten sam kod działa poprawnie w Firefoksie i Safari, tylko nie w IE. Tak naprawdę to wątpię. –

179

Spróbuj użyć white-space: nowrap; w stylu pojemnika (zamiast overflow: hidden;)

3

spróbować użyć width: 3000px; dla przypadku IE.

33

Jeśli nie chcesz, aby określić minimalną szerokość bo nie wiem ilość elementów jedyną rzeczą, która pracowała dla mnie brzmiało:

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

Ale tylko w Chrome i Safari:/

24

następujące pracował dla mnie bez pływających (I zmodyfikowany przykład trochę za efekt wizualny):

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

Elementy div mogą być oddzielone spacjami. Jeśli nie chcesz tego, użyj margin-right: -4px; zamiast margin: 5px; dla .slide (jest brzydki, ale it's a tricky problem to deal with).

+0

Świetna odpowiedź. Dodałem podobny przykład poniżej, ale usunąłem go po tym, jak zobaczyłem twoje. Jeśli nie muszą wspierać IE9, można również użyć schematu flexbox: https://jsfiddle.net/7gsrb38L/1/ – ValentinVoilean

+0

Można używać komentarzy HTML między DIV '

' 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 '
'w kodzie źródłowym. – Fleuv

1

można użyć

display: table; 

do pojemnika i therfore uniknąć overflow: hidden;. Powinien wykonać to zadanie, jeśli używałeś go tylko do celów wypaczania.

2

Żadne z powyższych nie działało dla mnie.

W moim przypadku musiałem dodać następujące kontrolą użytkownika stworzył:

display:inline-block; 
-1

Znacznik <span> służy do grupowania elementów inline w dokumencie.
(source)

+0

Chociaż jest to prawdą, nie wydaje się, aby w ogóle adresować pytanie. – Quentin

+0

To doskonale odpowiada na pytanie, ponieważ span i div są identyczne w wieczności, z wyjątkiem tego, że div jest zawijany, a span nie. Możesz wdrożyć dowolne obejście. –

+2

Czy to oznacza, że ​​Twoja sugestia brzmi "Użyj przęseł zamiast elementów div"? Bo nie to powiedziałeś. – Quentin

18

Ten pracował dla mnie:

.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

To z przepełnieniem: ukryty sprawiło mi przyjemność. Dzięki. – Alfie

12

Combo trzeba to

white-space: nowrap 

od rodzica i

display: inline-block; // or inline 

na dzieci