2013-07-19 14 views
8

Tak więc mam trzy elementy div wewnątrz jednego elementu div.Rozdzielnice dla dzieci rozwiń, aby wypełnić szerokość div jednostki nadrzędnej.

<div class="parent"> 
<div class="child> Text</div> 
<div class="child">Text</div> 
<div class="child">Text</div> 
</div> 

chcę DIV dziecko do wypełnienia szerokości rodzica (łączna szerokość dzieci powinna być dominująca). Jednak tak się nie dzieje, brakuje mi czasu. Myślę, że dzieje się tak dlatego, że divy podrzędne określają szerokość na podstawie ich zawartości.

Jak osiągnąć to, czego chcę?

CSS-

.child { 
    background: white; 
    color: #a7a9ac; 
    cursor: pointer; 
    font-size: 15px; 
    border-right: 1px; 
    border-top: 0; 
    border-bottom: 0; 
    border-left: 0; 
    border-style: solid; 
    border-color: @faded-grey; 
    padding-right: 10px; 
    margin: 0 auto; 
    height: 100%; 
} 

.parent { 
    border-top: 1px; 
    border-left: 0; 
    border-bottom: 1; 
    border-style: solid; 
    border-color: @faded-grey; 
    border-right: 0; 
    width: 100%; 
    margin-right: 0px; 
    height: 80px; 

} 
+0

mógłbyś pisać css, którego używasz? – cr0atIAN

+0

Istnieje wiele sposobów, ale zależy to od tego, co chcesz. Czy chcesz _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ __ _ __ __ __ __ __ __ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ A może chcesz, aby były równomiernie rozłożone, tj. Za pomocą 'width: 33%'? –

+0

zestaw CSS, wypróbowana szerokość: 33%, ale kładzie divy jeden nad drugim – praks5432

Odpowiedz

8

Jeśli wiesz, że zawsze będzie troje dzieci, można po prostu użyć:

.parent > .child { 
    float: left; 
    width: 33%; 
} 

.parent { 
    overflow: auto; /*or whatever float wrapping technique you want to use*/ 
} 

Jeśli nie wiesz, ile dzieci tam są, trzeba będzie używaj tabel CSS, flexbox, lub może łączyć inline-bloki z text-align: justify.

8

Możesz dodać te trzy właściwości do reguły .child CSS:

width:33%; 
float:left;  
box-sizing: border-box; 

Ostatnia linia sprawia, że ​​na pewno będzie to również pracować podczas dodawania granic, padding i margines na polach.

ONLINE DEMO

Ps: nie bezpośrednio związane, ale jest też błąd w border-bottom dla rodzica, skorygowanej w skrzypcach powyżej. Gdy używasz non-0 wartość należy określić jednostki:

border-bottom:1px; 
+0

'box-sizing: border-box' jest magia! Bardzo dziękuję. –

+1

Niesamowity sos! Z należytym szacunkiem dla innych odpowiedzi, myślę, że jest to najlepsza odpowiedź. – Phil

+0

Wykonaj środkową szerokość 34%, w przeciwnym razie wypełnisz tylko 99% kontenera. – Sami

6

mi potrzebne do mojego rozwiązania, aby pomieścić wariancję liczby elementów, aby były całkowicie elastyczne.

Odkryłem interesujące rozwiązanie tego problemu. Zasadniczo wyświetla się jak stół. Każda akcja Element dostępne szerokości i to działa również dla obrazów bardzo dobrze: http://jsfiddle.net/8Qa72/6/

.table { 
    display: table; 
    width: 400px; 
} 

.table .row { 
    display: table-row; 
} 

.table .row .cell { 
    display: table-cell; 
    padding: 5px; 
} 

.table .row .cell .contents { 
    background: #444; 
    width: 100%; 
    height: 75px; 
} 
+1

Innym ciekawym rozwiązaniem jest użycie 'display: inline-block' spróbuj, czasami ratuje życie ;-) –

+0

Jak? Nie rozkłada równomiernie dostępnej szerokości rodzica między dziećmi. Czy możesz pokazać mi w JSFiddle? –

+0

Masz rację, musisz określić procent jednostki nadrzędnej dla każdego dziecka, jeśli chcesz coś podobnego. Próbowałem "dynamicznego" approch i "naprawionego" approch http://jsfiddle.net/dBeNv/40/ –

Powiązane problemy