2015-04-07 21 views
25

Chcę używać Flexbox, który ma pewną liczbę elementów, które mają tę samą szerokość. Zauważyłem, że Flexbox rozprowadza przestrzeń równomiernie, a nie samą przestrzeń.Jak zrobić elementy flexbox tego samego rozmiaru?

Na przykład:

.header { 
 
    display: flex; 
 
} 
 

 
.item { 
 
    flex-grow: 1; 
 
    text-align: center; 
 
    border: 1px solid black; 
 
}
<div class="header"> 
 
    <div class="item">asdfasdfasdfasdfasdfasdf</div> 
 
    <div class="item">z</div> 
 
</div>

Pierwsza pozycja jest dużo większy niż sekundę. Jeśli mam 3 elementy, 4 elementy lub n elementów, chcę, aby wszystkie pojawiały się w tej samej linii z równą ilością miejsca na element.

Wszelkie pomysły?

http://codepen.io/anon/pen/gbJBqM

Odpowiedz

51

Ustaw je tak, że ich flex-basis jest 0 (a więc wszystkie elementy mają ten sam punkt początkowy) i pozwolić im się rozwijać:

flex: 1 1 0

18

Można dodać flex-basis: 100% do osiągnięcia tego celu .

Updated Example

.header { 
    display: flex; 
} 

.item { 
    flex-basis: 100% 
    text-align: center; 
    border: 1px solid black; 
} 

Na co warto, można również użyć flex: 1 do tych samych wyników, jak również.

skrótowym z flex: 1 jest taka sama jak flex: 1 1 0, co jest równoważne:

.item { 
    flex-grow: 1; 
    flex-shrink: 1; 
    flex-basis: 0; 
    text-align: center; 
    border: 1px solid black; 
} 
+0

To nie jest poprawne. Domyślna wartość flex to 'flex: 0 1 auto'. Co oznacza, że ​​ustawienie 'flex: 1' spowoduje' flex: 1 1 auto'. To nie zadziała. Poprawną odpowiedzią jest 'flex: 1 1 0' jak podano powyżej przez Adama –

+3

@ r.sendecky Nie, jesteś tym, który jest niepoprawny. Jak stwierdziłem w mojej odpowiedzi, skrót słowa 'flex: 1' daje w wyniku' flex: 1 1 0' ** not ** 'flex: 1 1 auto', tak jak ty roszczenia. Zapoznaj się z oficjalną specyfikacją W3 w sekcji ['flex stenografia'] (https://www.w3.org/TR/css-flexbox-1/#flex-property): kiedy 'flex-basis' jest" pominięty w skrócie skróconym, jego określoną wartością jest "0", a nie "auto". Dzięki za losowe trafienie. –

+1

@ r.sendecky - Zobacz także [ten przykład] (https://jsfiddle.net/o25wto2d/) utworzony w celu wizualizacji odmian. –

2

Dodawanie szerokości: 0 pomógł mi rozwiązać problem

.item { 
     flex-grow: 1 1 0; 
     width: 0; 
    } 

tu jest link, który pomoże mi rozwiązać mój problem: Always equal flexbox columns

+0

Wygląda na to, że jest to konieczne, jeśli zawartość '.item' spowoduje, że będzie on szerszy niż' .item' w sposób naturalny. – Bungle

Powiązane problemy