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
.