Kurs HTML

12.3. Właściwość flex-direction

Strona główna > Kurs CSS > Rozdział 12: Flexbox > Właściwość flex-direction

Ustalanie kierunku osi głównej

Właściwość flex-direction jest stosowana do **kontenera flex** i definiuje kierunek **osi głównej (main axis)**. To właśnie wzdłuż tej osi będą domyślnie układane elementy flex.

Zmiana flex-direction wpływa nie tylko na kierunek układania elementów, ale również na orientację osi poprzecznej (cross axis), która zawsze jest prostopadła do osi głównej.

Możliwe wartości flex-direction

Właściwość flex-direction może przyjmować cztery główne wartości:

  1. row (wartość domyślna):

    • Oś główna jest **pozioma**.
    • Elementy układane są w wierszu, od lewej do prawej (w językach LTR - Left-to-Right).
    • Oś poprzeczna jest pionowa.
    .container {
      display: flex;
      flex-direction: row; /* Domyślne, można pominąć */
    }
    
    <!-- Elementy ułożą się: [1] [2] [3] -->
  2. row-reverse:

    • Oś główna jest **pozioma**.
    • Elementy układane są w wierszu, ale w **odwrotnej kolejności**, od prawej do lewej (w językach LTR).
    • Oś poprzeczna jest pionowa.
    .container {
      display: flex;
      flex-direction: row-reverse;
    }
    
    <!-- Elementy ułożą się: [3] [2] [1] -->
  3. column:

    • Oś główna jest **pionowa**.
    • Elementy układane są w kolumnie, od góry do dołu.
    • Oś poprzeczna jest pozioma.
    .container {
      display: flex;
      flex-direction: column;
    }
    
    <!-- Elementy ułożą się: -->
    <!-- [1] -->
    <!-- [2] -->
    <!-- [3] -->
  4. column-reverse:

    • Oś główna jest **pionowa**.
    • Elementy układane są w kolumnie, ale w **odwrotnej kolejności**, od dołu do góry.
    • Oś poprzeczna jest pozioma.
    .container {
      display: flex;
      flex-direction: column-reverse;
    }
    
    <!-- Elementy ułożą się: -->
    <!-- [3] -->
    <!-- [2] -->
    <!-- [1] -->

Wizualizacja:

flex-direction: row;
1
2
3
flex-direction: row-reverse;
1
2
3
flex-direction: column;
1
2
3
flex-direction: column-reverse;
1
2
3

(Powyżej znajduje się prosta wizualizacja działania różnych wartości flex-direction.)

Wpływ na osie i właściwości wyrównania

Zmiana flex-direction ma kluczowy wpływ na działanie właściwości wyrównujących:

  • justify-content: Zawsze wyrównuje elementy wzdłuż **osi głównej**.
  • align-items: Zawsze wyrównuje elementy wzdłuż **osi poprzecznej** (w ramach pojedynczej linii flex).
  • align-content: Zawsze wyrównuje **linie flex** (gdy jest ich więcej niż jedna) wzdłuż **osi poprzecznej**.
  • align-self: Zawsze wyrównuje **pojedynczy element flex** wzdłuż **osi poprzecznej**.

Dlatego, jeśli zmienisz flex-direction na column, to justify-content będzie kontrolować wyrównanie pionowe, a align-items wyrównanie poziome.

Zadania praktyczne

Zadanie 1 (z rozwiązaniem)

Stwórz kontener flex z trzema elementami. Użyj flex-direction: column;, aby ułożyć je pionowo, jeden pod drugim.

Rozwiązanie:

HTML:

<div class="container-task1">
  <div class="item">Góra</div>
  <div class="item">Środek</div>
  <div class="item">Dół</div>
</div>

CSS:

.container-task1 {
  display: flex;
  flex-direction: column; /* Układ pionowy */
  border: 1px solid black;
  padding: 10px;
  width: 150px; /* Ogranicz szerokość dla lepszej wizualizacji */
}

.item {
  padding: 15px;
  margin: 5px;
  background-color: #eee;
  border: 1px solid #ccc;
  text-align: center;
}

Efekt: Trzy szare pudełka (Góra, Środek, Dół) ułożą się pionowo wewnątrz czarnej ramki kontenera.

Zadanie 2 (do samodzielnego wykonania)

Stwórz kontener flex z kilkoma elementami. Użyj flex-direction: row-reverse;, aby ułożyć je poziomo, ale w odwrotnej kolejności niż w kodzie HTML.

Zadanie 3 (do samodzielnego wykonania)

Stwórz kontener flex z elementami ułożonymi w kolumnie (flex-direction: column;). Następnie użyj justify-content (np. center, space-between), aby zobaczyć, jak kontroluje ono wyrównanie pionowe w tym przypadku.

FAQ - Najczęściej zadawane pytania

Jaka jest domyślna wartość flex-direction?

Domyślną wartością jest row. Oznacza to, że jeśli ustawisz tylko display: flex, elementy flex będą domyślnie układane w poziomie od lewej do prawej.

Czy flex-direction wpływa na kolejność w DOM?

Nie, flex-direction (podobnie jak właściwość order) zmienia tylko **wizualną** kolejność renderowania elementów. Kolejność elementów w drzewie DOM (w kodzie HTML) pozostaje niezmieniona. Ma to znaczenie np. dla nawigacji klawiaturą czy czytników ekranu, które zazwyczaj podążają za kolejnością DOM.

Jak flex-direction działa w językach RTL (Right-to-Left)?

Wartości row i row-reverse uwzględniają kierunek tekstu. W języku RTL (np. arabski, hebrajski), row układa elementy od prawej do lewej, a row-reverse od lewej do prawej. Wartości column i column-reverse działają tak samo niezależnie od kierunku tekstu (góra-dół / dół-góra).

Czy mogę użyć flex-direction na elemencie flex?

Nie, właściwość flex-direction stosuje się tylko do **kontenera flex**, aby zdefiniować kierunek układania jego dzieci (elementów flex). Nie ma ona zastosowania do samych elementów flex.