12.10. Właściwość order
Zmiana wizualnej kolejności elementów
Domyślnie, elementy flex są wyświetlane w takiej samej kolejności, w jakiej występują w kodzie źródłowym HTML.
Właściwość order
pozwala **zmienić tę wizualną kolejność** bez modyfikowania struktury HTML. Stosuje się ją bezpośrednio do **elementu flex**.
Elementy flex są sortowane na podstawie wartości ich właściwości order
, od najmniejszej do największej. Elementy z taką samą wartością order
zachowują swoją względną kolejność z kodu HTML.
Wartości order
Właściwość order
przyjmuje wartości **liczbowe całkowite** (dodatnie, ujemne lub zero).
- Wartość domyślna:
0
. Oznacza to, że jeśli nie ustawiszorder
, wszystkie elementy mająorder: 0
i są wyświetlane zgodnie z kolejnością w HTML. - Liczby ujemne: Elementy z ujemnym
order
(np.order: -1
) pojawią się **przed** elementami zorder: 0
. - Liczby dodatnie: Elementy z dodatnim
order
(np.order: 1
) pojawią się **po** elementach zorder: 0
. - Sortowanie: Elementy są sortowane rosnąco według wartości
order
.order: -2
pojawi się przedorder: -1
, które pojawi się przedorder: 0
, które pojawi się przedorder: 1
, itd.
Przykład:
<div class="container">
<div class="item item-1">1 (HTML)</div>
<div class="item item-2">2 (HTML)</div>
<div class="item item-3">3 (HTML)</div>
<div class="item item-4">4 (HTML)</div>
</div>
.container {
display: flex;
border: 1px solid black;
}
.item {
padding: 20px;
margin: 5px;
background-color: lightblue;
border: 1px solid navy;
}
/* Zmiana kolejności */
.item-1 { order: 2; background-color: lightcoral; } /* Będzie jako ostatni */
.item-2 { order: -1; background-color: lightgreen; } /* Będzie jako pierwszy */
.item-3 { order: 1; background-color: lightyellow; } /* Będzie jako trzeci */
.item-4 { /* order: 0; (domyślnie) */ } /* Będzie jako drugi */
Wizualny efekt:
Jak widać, mimo że w HTML kolejność to 1, 2, 3, 4, wizualnie elementy ułożyły się w kolejności 2, 4, 3, 1, zgodnie z wartościami order
(-1, 0, 1, 2).
Znaczenie dla dostępności (Accessibility)
Bardzo ważne: Właściwość order
zmienia tylko **wizualną** kolejność renderowania elementów. **Nie zmienia** ona kolejności elementów w drzewie DOM ani kolejności, w jakiej elementy otrzymują fokus podczas nawigacji klawiaturą (np. klawiszem Tab).
Może to prowadzić do problemów z dostępnością, gdy wizualna kolejność znacząco różni się od logicznej kolejności w DOM. Użytkownicy nawigujący klawiaturą lub korzystający z czytników ekranu mogą doświadczać nielogicznych przeskoków fokusu.
Zalecenie: Używaj właściwości order
oszczędnie i tylko wtedy, gdy zmiana wizualnej kolejności nie wpływa negatywnie na logiczny przepływ treści i nawigację. W miarę możliwości staraj się, aby kolejność w HTML odpowiadała pożądanej kolejności wizualnej.
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Stwórz kontener flex z trzema elementami (A, B, C). Użyj właściwości order
, aby wyświetlić je w kolejności C, A, B.
Rozwiązanie:
HTML:
<div class="container-task1">
<div class="item item-a">A</div>
<div class="item item-b">B</div>
<div class="item item-c">C</div>
</div>
CSS:
.container-task1 {
display: flex;
border: 1px solid black;
}
.item {
padding: 20px;
margin: 5px;
background-color: #eee;
}
.item-a { order: 1; } /* Będzie drugi */
.item-b { order: 2; } /* Będzie trzeci */
.item-c { order: 0; } /* Będzie pierwszy */
/* Lub np. .item-c { order: -1; } .item-a { order: 0; } .item-b { order: 1; } */
Efekt: Elementy ułożą się wizualnie w kolejności C, A, B.
Zadanie 2 (do samodzielnego wykonania)
Stwórz kontener flex z pięcioma elementami. Użyj order
, aby przenieść ostatni element na sam początek.
Zadanie 3 (do samodzielnego wykonania)
Stwórz kontener flex z czterema elementami. Nadaj elementom 1 i 3 właściwość order: 1;
, a elementom 2 i 4 pozostaw domyślne order: 0;
. Zaobserwuj wynikową kolejność (pamiętaj, że elementy z tym samym order
zachowują kolejność z HTML).
FAQ - Najczęściej zadawane pytania
Jaka jest domyślna wartość order
?
Domyślną wartością jest 0
. Wszystkie elementy flex bez jawnie ustawionego order
mają order: 0
.
Czy mogę używać liczb dziesiętnych w order
?
Nie, specyfikacja CSS wymaga, aby wartość order
była liczbą całkowitą (integer).
Jak order
wpływa na nawigację klawiaturą (Tab)?
order
**nie wpływa** na kolejność nawigacji klawiaturą. Fokus będzie przeskakiwał między elementami zgodnie z ich kolejnością w drzewie DOM (kodzie HTML), co może być mylące, jeśli wizualna kolejność jest inna. Należy o tym pamiętać ze względu na dostępność.
Czy order
działa z display: grid
?
Tak, właściwość order
działa również w kontekście CSS Grid Layout, pozwalając na zmianę wizualnej kolejności elementów siatki w ramach ich kontenera.