Rosenberger

reading-flow: flex-visual; a prístupnosť vo flexboxe

Keď robíš layout vo flexboxe, veľmi rýchlo narazíš na rozdiel medzi:

Historicky sa to riešilo “trikmi” typu order, row-reverse alebo prehadzovaním DOM. Problém: vizuálny layout a klávesnicový focus sa často začnú správať inak, než používateľ očakáva.

reading-flow: flex-visual; je novší spôsob, ako povedať: “pri čítaní/fokuse sa drž vizuálneho poradia flexu”.

Poznámka: Podpora ešte nie je všade, takže sa oplatí mať fallback.

Príklad: vizuálne otočenie bez mätúceho tabovania

Máš dva prvky a na desktop-e chceš mať sidebar vizuálne vľavo, ale HTML nechceš prehadzovať:

<div class="layout">
  <main>…hlavný obsah…</main>
  <aside>…sidebar…</aside>
</div>

Bez reading-flow to často skončí tak, že:

S reading-flow: flex-visual; vieš zosúladiť fokus/čítanie s vizuálnym poradím:

.layout {
  display: flex;
  flex-direction: row-reverse;
  gap: 1rem;
  reading-flow: flex-visual;
}

Prečo je to lepšie pre prístupnosť

Fallback (keď reading-flow nie je podporované)

Najbezpečnejšie je spraviť fallback tak, aby bol aspoň konzistentný:

Príklad:

.layout {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

@media (min-width: 48rem) {
  .layout {
    flex-direction: row-reverse;
    /* ak je podporované, zosúladí sa reading/focus s vizuálom */
    reading-flow: flex-visual;
  }
}

Ak chceš mať kompatibilitu úplne striktne (aj na starších prehliadačoch), stále platí: najspoľahlivejšie je mať DOM poradie rovnaké ako vizuálne poradie.