Kurs HTML

12.10. Właściwość order

Strona główna > Kurs CSS > Rozdział 12: Flexbox > 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 ustawisz order, 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 z order: 0.
  • Liczby dodatnie: Elementy z dodatnim order (np. order: 1) pojawią się **po** elementach z order: 0.
  • Sortowanie: Elementy są sortowane rosnąco według wartości order. order: -2 pojawi się przed order: -1, które pojawi się przed order: 0, które pojawi się przed order: 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:

2 (HTML)
4 (HTML)
3 (HTML)
1 (HTML)

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.