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.