12.3. 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:
-
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] -->
-
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] -->
-
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] -->
-
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;
flex-direction: row-reverse;
flex-direction: column;
flex-direction: column-reverse;
(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.