2013-08-20 13 views
6

Jak mogę zmusić DIV rosnąć szersza niż okno przeglądarki, aby pomieścić to dzieci poziomo, zamiast zmuszać ich na nowych wierszyWymusza div rosnąć szersza niż okno przeglądarki

tj rozważyć następujący kod z skrzypce . Wewnątrz elementu kontenera znajduje się 6 elementów podrzędnych, wszystkie o minimalnej szerokości 200 pikseli i wszystkie ustawione jako pływające: w lewo. Gdy rozmiar okna jest odpowiednio duży, wszystkie są w jednym rzędzie. Kiedy jest zwężony, zaczynają naciskać na nowe wiersze. Najlepiej byłoby, gdyby pozostały w jednym wierszu, a przeglądarka wyświetla pasek przewijania.

http://jsfiddle.net/krippy2k/x8sDp/20/

.container { 
} 

.child-element { 
    min-width: 200px; 
    float: left; 
    height: 100px; 
} 

.child1 { 
    background-color: purple; 
} 
.child2 { 
    background-color: orange; 
} 
.child3 { 
    background-color: black; 
} 
.child4 { 
    background-color: green; 
} 
.child5 { 
    background-color: blue; 
} 
.child6 { 
    background-color: red; 
} 

<div class="container"> 
    <div class="child-element child1"></div> 
    <div class="child-element child2"></div> 
    <div class="child-element child3"></div> 
    <div class="child-element child4"></div> 
    <div class="child-element child5"></div> 
    <div class="child-element child6"></div> 
</div> 

Odpowiedz

12

Albo można zapewnić width do elementu nadrzędnego, w przeciwnym wypadku można użyć float: left; z display: inline-block; i white-space: nowrap;

.container { 
    white-space: nowrap; 
} 

.child-element { 
    min-width: 200px; 
    display: inline-block; 
    height: 100px; 
} 

Demo

Dla white-space z 4px między każdy el ement, można użyć margin-left: -4px;

Demo 2

+0

miałem w zasadzie to samo pytanie jak PO , a ta odpowiedź była najlepszym rozwiązaniem. Coś, co dodałem, unosiło kontener. Dało to kontenerowi szerokość jego dzieci, a nie szerokość kontenera ograniczającego pole. – Brodie

+0

Biała przestrzeń między elementami jest w rzeczywistości fizyczną białą przestrzenią (spacje, tabulacje, znaki nowej linii) w html (sprowadzonym do pojedynczej spacji) między znacznikami potomnymi, renderowanymi za pomocą dowolnej czcionki/rozmiaru, która została sprowadzona kaskadowo. Aby to wyeliminować, możesz ustawić "font-size: 0;" w kontenerze, pamiętając o jawnym ustawieniu go w razie potrzeby w elementach podrzędnych. –

0

Dodawanie ogromny szerokości do pojemnika działa

.container { 
    width: 999999px; 
} 

Chociaż nie jestem pewien, dlaczego chcesz zrobić coś takiego, z usability/punktu interfejsu widzenia.

+0

FYI jest dla projektanta przepływu pracy, który może zawierać wiele poziomów elementów zagnieżdżonych. Pewne elementy mają być umieszczone obok siebie, takie jak klauzule Then/Else, które stają się trudniejsze do odczytania, gdy Else jest zmuszana pod Później. – Gerald

+0

Rozumiem, czy nie byłaby jakaś forma widoku drzewa? Naprawdę nie wiem, co robisz, ale imo poziome przewijanie w pionie zazwyczaj powoduje bardzo mylące interfejsy, chyba że twoim celem są ekrany dotykowe. Ponownie, jest to raczej niedoinformowana opinia. – cernunnos

+0

Myślałem o drzewie, ale byłoby to denerwujące z powodu konieczności przeciągania i upuszczania.Aby być z nim produktywnym przy projektowaniu i rozwiązywaniu problemów, drzewo naprawdę musiałoby zostać w pełni rozwinięte, co pozostawiłoby nam ten sam problem. Projektant Workflow Foundation w Visual Studio 2012 jest bardzo podobny do tego, do czego dążę. – Gerald

6

Zamiast unoszenia dzieci, ustaw je w bloku inline i ustaw white-space:nowrap na kontenerze.

.container { 
    white-space:nowrap; 
} 

.child-element { 
    display:inline-block; 
    min-width: 200px; 
    height: 100px; 
} 

http://jsfiddle.net/x8sDp/24/

+0

IMHO jest to lepsze rozwiązanie, ponieważ ruchomy może mieć niezamierzone konsekwencje w pozostałej części układu, ponieważ w zasadzie usuwa element z reszty struktury strony. Często pływający tworzy trochę marionetek trudnych do opanowania. – orionrush

1

Wystarczy ustawić .container do display:table i .child-elements być display:table-cell i usunąć float:left z .child-element:

.container { 
    display: table; 
} 

.child-element { 
    min-width: 200px; 
    display: table-cell; 
    height: 100px; 
} 

DEMO

Powiązane problemy