justify-content i align-items w jednym zdaniu
W kontenerze flex justify-content rozkłada elementy wzdłuż osi głównej (w poprzek wiersza), a align-items ustawia je na osi poprzecznej (w górę i w dół wiersza). Obie właściwości ustawia się na kontenerze:
Pudełko jest wyśrodkowane w obu kierunkach: tak samo daleko od krawędzi początkowej i końcowej oraz od góry i dołu. Usuń height: 140px, a align-items: center nie będzie miało nic do zrobienia, bo kontener skurczy się do wysokości elementu.
Wszystkie wartości justify-content, zmierzone
Każdy wiersz poniżej to te same trzy elementy z innym justify-content. Liczby w etykiecie nad każdym wierszem to odstępy zostawione przez przeglądarkę: przed pierwszym elementem, między elementami i po ostatnim.
Kontener ma 420px, a elementy zajmują 180px, więc zostaje 240px wolnej przestrzeni. Gdzie trafia:
| Wartość | Wolna przestrzeń trafia | Odstępy w demo |
|---|---|---|
flex-start (i start) | cała za elementy | 0 / 0 / 0 / 240 |
center | połowa przed, połowa za | 120 / 0 / 0 / 120 |
flex-end (i end) | cała przed elementy | 240 / 0 / 0 / 0 |
space-between | tylko między elementy | 0 / 120 / 120 / 0 |
space-around | po równo z obu stron każdego elementu, więc krawędzie dostają połowę | 40 / 80 / 80 / 40 |
space-evenly | każdy odstęp równy, łącznie z krawędziami | 60 / 60 / 60 / 60 |
flex-start podąża za kierunkiem flex, a start za kierunkiem pisma. Różnią się tylko przy row-reverse lub column-reverse, gdzie flex-start jest na odwróconym końcu.
Wszystkie wartości align-items
align-items działa w poprzek wiersza. Elementy poniżej mają różne wysokości, żeby było widać, co robi z nimi każda wartość:
| Wartość | Co dzieje się na osi poprzecznej |
|---|---|
stretch (domyślna) | Elementy bez ustawionej wysokości rosną, żeby wypełnić kontener |
flex-start (i start) | Elementy są u góry, z własną wysokością |
center | Elementy są wyśrodkowane, z własną wysokością |
flex-end (i end) | Elementy są na dole |
baseline | Elementy przesuwają się tak, żeby pierwsze linijki tekstu miały wspólną linię bazową |
W pudełku baseline trzy etykiety "Ag" stoją na jednej linii, choć pierwsza jest większa, a druga ma nad sobą padding. To wartość dla wiersza, który łączy duży nagłówek z małym tekstem albo etykietę z polem formularza.
Kliknij, żeby wyrównać
Kliknij dowolną komórkę siatki 3 na 3. Pudełko przesunie się tam, a poniżej pojawi się CSS, który je tam umieszcza:
Wiersze selektora zmieniają align-items, a kolumny justify-content. Środkowa komórka to klasyczne "wyśrodkowanie diva".
W kolumnie obie się zamieniają
justify-content zawsze podąża za osią główną. Przy flex-direction: column oś główna jest pionowa, więc justify-content przesuwa elementy w górę i w dół, a align-items w poprzek:
Jeśli je pomylisz, zamień obie właściwości miejscami zamiast przepisywać układ.
align-self i marginesy auto: tylko jeden element
align-self na elemencie nadpisuje align-items dla tego elementu. We flexboxie nie ma justify-self; żeby przesunąć jeden element wzdłuż osi głównej, nadaj mu margines auto, który zabiera całą wolną przestrzeń po tej stronie:
Zielony element sam opada na dół, a bursztynowy zostaje zepchnięty na sam koniec wiersza, podczas gdy pozostałe zostają na początku.
Gdy linii jest kilka: align-content
align-items wyrównuje elementy wewnątrz ich linii. Gdy kontener zawija się na kilka linii, align-content rozmieszcza same linie i przyjmuje te same wartości co justify-content. Nic nie robi w kontenerze nowrap, którego jedyna linia zawsze wypełnia wysokość kontenera. Strona o flex-wrap to pokazuje.
Częste błędy
- Mylenie osi.
justify-contentto kierunek przepływu,align-itemsdziała w poprzek niego. W kolumnie wyśrodkowanie w pionie tojustify-content: center. - Brak wolnej przestrzeni. Element z
flex: 1zabiera całe miejsce, więcjustify-contentnie ma czego rozkładać. To samo dzieje się, gdy kontener mainline-flexi jest dokładnie tak szeroki jak jego elementy. - Brak wysokości dla
align-items. Kontener tak wysoki jak jego treść nie zostawia nic do wyrównania. Ustawheightalbomin-height. - Szukanie
justify-selfwe flexboxie. Jest tam ignorowane. Użyj na elemenciemargin-inline-start: auto(albomargin-left: auto). align-items: stretch, które nie rozciąga. Element z własnymheightje zachowuje. Usuń wysokość (użyjmin-height, jeśli potrzebne jest minimum).- Ustawianie tych właściwości na elementach. Obie idą na kontener flex. Tylko
align-selfustawia się na elemencie.
Najczęściej zadawane pytania
Czym różni się justify-content od align-items?
justify-content rozkłada elementy wzdłuż osi głównej, czyli w kierunku, w którym płyną (poziomo przy flex-direction: row). align-items ustawia je wzdłuż osi poprzecznej (pionowo w wierszu). W kolumnie obie się zamieniają: justify-content działa pionowo.
Czym różnią się space-between, space-around i space-evenly?
space-between nie dodaje miejsca przed pierwszym elementem ani po ostatnim, a resztę dzieli między elementy. space-around daje każdemu elementowi tyle samo miejsca po obu stronach, więc krawędzie dostają pół odstępu. space-evenly sprawia, że każdy odstęp jest równy, łącznie z krawędziami.
Dlaczego justify-content nie działa?
Zwykle nie ma wolnej przestrzeni do rozłożenia: jakiś element ma flex-grow albo flex: 1, albo kontener jest tylko tak szeroki jak jego elementy (na przykład przy display: inline-flex lub kontenerze z float). Sprawdź też, czy display: flex jest na rodzicu, a nie na elementach.
Dlaczego align-items center nie wyśrodkowuje w pionie?
Kontener jest prawdopodobnie dokładnie tak wysoki jak jego treść, więc nie ma w czym wyśrodkowywać. Nadaj kontenerowi flex wysokość albo min-height, a elementy przesuną się na jego środek.
Co robi align-self?
align-self nadpisuje align-items kontenera dla jednego elementu. Na przykład align-self: flex-end na jednym dziecku przesuwa tylko je na koniec osi poprzecznej, a pozostałe zostają tam, gdzie umieściło je align-items.
Czy we flexboxie jest justify-self?
Nie. Flexbox ignoruje justify-self, bo oś główna jest wspólna dla wszystkich elementów. Żeby przesunąć jeden element wzdłuż osi głównej, użyj marginesu auto, na przykład margin-inline-start: auto. justify-self działa w grid.