12.6. Właściwość justify-content
Wyrównanie wzdłuż osi głównej
Właściwość justify-content jest stosowana do **kontenera flex** i definiuje, jak elementy flex są **rozmieszczone i wyrównane wzdłuż osi głównej (main axis)**.
Pozwala ona kontrolować dystrybucję wolnej przestrzeni pozostałej w kontenerze wzdłuż osi głównej, gdy suma rozmiarów elementów flex jest mniejsza niż rozmiar kontenera w tym kierunku.
Pamiętaj, że oś główna jest pozioma przy flex-direction: row (domyślnie) i pionowa przy flex-direction: column. Zatem justify-content kontroluje wyrównanie **poziome** dla wierszy i **pionowe** dla kolumn.
Możliwe wartości justify-content
Właściwość justify-content może przyjmować kilka wartości:
-
flex-start(wartość domyślna):- Elementy są pakowane na początku osi głównej (po lewej przy
row, na górze przycolumn). - Cała wolna przestrzeń znajduje się na końcu osi głównej.
.container { display: flex; justify-content: flex-start; /* Domyślne */ }<!-- Przy row: [1][2][3] --> <!-- Przy column: --> <!-- [1] --> <!-- [2] --> <!-- [3] --> <!-- --> <!-- --> - Elementy są pakowane na początku osi głównej (po lewej przy
-
flex-end:- Elementy są pakowane na końcu osi głównej (po prawej przy
row, na dole przycolumn). - Cała wolna przestrzeń znajduje się na początku osi głównej.
.container { display: flex; justify-content: flex-end; }<!-- Przy row: [1][2][3] --> <!-- Przy column: --> <!-- --> <!-- --> <!-- [1] --> <!-- [2] --> <!-- [3] --> - Elementy są pakowane na końcu osi głównej (po prawej przy
-
center:- Elementy są grupowane na środku osi głównej.
- Wolna przestrzeń jest równo rozdzielana na początku i na końcu osi głównej.
.container { display: flex; justify-content: center; }<!-- Przy row: [1][2][3] --> <!-- Przy column: --> <!-- --> <!-- [1] --> <!-- [2] --> <!-- [3] --> <!-- --> -
space-between:- Pierwszy element jest na początku osi głównej, ostatni na końcu.
- Pozostała wolna przestrzeń jest równo rozdzielana **pomiędzy** elementami.
- Brak przestrzeni przed pierwszym i za ostatnim elementem.
.container { display: flex; justify-content: space-between; }<!-- Przy row: [1] [2] [3] --> <!-- Przy column: --> <!-- [1] --> <!-- --> <!-- [2] --> <!-- --> <!-- [3] --> -
space-around:- Wolna przestrzeń jest równo rozdzielana **wokół** każdego elementu.
- Odstępy między elementami są dwa razy większe niż odstęp przed pierwszym i za ostatnim elementem (bo każdy element "wnosi" połowę odstępu z każdej strony).
.container { display: flex; justify-content: space-around; }<!-- Przy row: [1] [2] [3] --> <!-- Przy column: --> <!-- --> <!-- [1] --> <!-- --> <!-- --> <!-- [2] --> <!-- --> <!-- --> <!-- [3] --> <!-- --> -
space-evenly:- Wolna przestrzeń jest równo rozdzielana **pomiędzy** każdym elementem oraz **przed pierwszym i za ostatnim** elementem.
- Wszystkie odstępy (przed pierwszym, między elementami, za ostatnim) są równe.
.container { display: flex; justify-content: space-evenly; }<!-- Przy row: [1] [2] [3] --> <!-- Przy column: --> <!-- --> <!-- [1] --> <!-- --> <!-- [2] --> <!-- --> <!-- [3] --> <!-- -->
Wizualizacja (dla flex-direction: row):
justify-content: flex-start; (domyślne)
justify-content: flex-end;
justify-content: center;
justify-content: space-between;
justify-content: space-around;
justify-content: space-evenly;
(Powyżej znajduje się prosta wizualizacja działania różnych wartości justify-content przy flex-direction: row.)
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Stwórz kontener flex z trzema elementami. Użyj justify-content: center;, aby wyśrodkować je w poziomie.
Rozwiązanie:
HTML:
<div class="container-task1">
<div class="item">A</div>
<div class="item">B</div>
<div class="item">C</div>
</div>
CSS:
.container-task1 {
display: flex;
justify-content: center; /* Wyśrodkowanie wzdłuż osi głównej (poziomej) */
border: 1px solid black;
padding: 10px;
}
.item {
padding: 15px;
margin: 5px;
background-color: #eee;
border: 1px solid #ccc;
}
Efekt: Trzy szare pudełka (A, B, C) zostaną zgrupowane na środku kontenera w poziomie.
Zadanie 2 (do samodzielnego wykonania)
Stwórz kontener flex z dwoma elementami. Użyj justify-content: space-between;, aby umieścić jeden element na lewym końcu, a drugi na prawym końcu kontenera.
Zadanie 3 (do samodzielnego wykonania)
Stwórz kontener flex z flex-direction: column; i nadaj mu wysokość (np. height: 300px;). Umieść w nim trzy elementy. Użyj justify-content: space-around;, aby rozłożyć je równomiernie w pionie z odstępami wokół nich.
FAQ - Najczęściej zadawane pytania
Jaka jest domyślna wartość justify-content?
Domyślną wartością jest flex-start. Oznacza to, że elementy są domyślnie pakowane na początku osi głównej.
Czy justify-content działa, gdy elementy wypełniają całą przestrzeń?
Jeśli suma rozmiarów elementów flex (uwzględniając flex-grow, flex-basis) jest równa lub większa niż rozmiar kontenera wzdłuż osi głównej, nie ma wolnej przestrzeni do rozdzielenia. W takim przypadku justify-content nie będzie miał widocznego efektu (poza potencjalnym wpływem na pozycjonowanie przy przepełnieniu).
Jaka jest różnica między space-around a space-evenly?
W space-around odstępy między elementami są dwa razy większe niż odstęp przed pierwszym i za ostatnim elementem. W space-evenly wszystkie odstępy (przed pierwszym, między elementami i za ostatnim) są sobie równe.
Czy justify-content działa w wieloliniowych kontenerach flex?
Tak, justify-content nadal kontroluje wyrównanie elementów **wewnątrz każdej linii flex** wzdłuż osi głównej. Nie wpływa ono na rozkład przestrzeni **między liniami** - do tego służy align-content.