Kurs HTML

12.6. Właściwość justify-content

Strona główna > Kurs CSS > Rozdział 12: Flexbox > 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:

  1. flex-start (wartość domyślna):

    • Elementy są pakowane na początku osi głównej (po lewej przy row, na górze przy column).
    • 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] -->
    <!--     -->
    <!--     -->
  2. flex-end:

    • Elementy są pakowane na końcu osi głównej (po prawej przy row, na dole przy column).
    • 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] -->
  3. 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] -->
    <!--     -->
  4. 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] -->
  5. 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] -->
    <!--     -->
  6. 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)
1
2
3
justify-content: flex-end;
1
2
3
justify-content: center;
1
2
3
justify-content: space-between;
1
2
3
justify-content: space-around;
1
2
3
justify-content: space-evenly;
1
2
3

(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.