|
| 1 | +--- |
| 2 | +title: 'reading-flow: flex-visual; a prístupnosť vo flexboxe' |
| 3 | +excerpt: 'Ako zosúladiť vizuálne poradie prvkov s poriadkom čítania a fokusom — aj keď podpora ešte nie je všade.' |
| 4 | +tags: posts |
| 5 | +layout: layouts/post.njk |
| 6 | +date: 2026-01-23 |
| 7 | +--- |
| 8 | + |
| 9 | +Keď robíš layout vo flexboxe, veľmi rýchlo narazíš na rozdiel medzi: |
| 10 | + |
| 11 | +- **DOM poradím** (poradie elementov v HTML) |
| 12 | +- **vizuálnym poradím** (ako to vidíš na obrazovke) |
| 13 | +- **reading/focus poradím** (ako sa prvky prechádzajú čítačkou a klávesnicou) |
| 14 | + |
| 15 | +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. |
| 16 | + |
| 17 | +`reading-flow: flex-visual;` je novší spôsob, ako povedať: “pri čítaní/fokuse sa drž vizuálneho poradia flexu”. |
| 18 | + |
| 19 | +> Poznámka: Podpora ešte nie je všade, takže sa oplatí mať fallback. |
| 20 | +
|
| 21 | +## Príklad: vizuálne otočenie bez mätúceho tabovania |
| 22 | + |
| 23 | +Máš dva prvky a na desktop-e chceš mať sidebar vizuálne vľavo, ale HTML nechceš prehadzovať: |
| 24 | + |
| 25 | +```html |
| 26 | +<div class="layout"> |
| 27 | + <main>…hlavný obsah…</main> |
| 28 | + <aside>…sidebar…</aside> |
| 29 | +</div> |
| 30 | +``` |
| 31 | + |
| 32 | +Bez `reading-flow` to často skončí tak, že: |
| 33 | + |
| 34 | +- vizuálne je `aside` vľavo |
| 35 | +- ale focus/tab ide podľa DOM (`main` → `aside`), čo môže pôsobiť “proti smeru” |
| 36 | + |
| 37 | +S `reading-flow: flex-visual;` vieš zosúladiť fokus/čítanie s vizuálnym poradím: |
| 38 | + |
| 39 | +```css |
| 40 | +.layout { |
| 41 | + display: flex; |
| 42 | + flex-direction: row-reverse; |
| 43 | + gap: 1rem; |
| 44 | + reading-flow: flex-visual; |
| 45 | +} |
| 46 | +``` |
| 47 | + |
| 48 | +## Prečo je to lepšie pre prístupnosť |
| 49 | + |
| 50 | +- **Klávesnica**: focus prechádza prvky v rovnakom poradí, v akom ich používateľ vidí. |
| 51 | +- **Čitateľnosť UI**: minimalizuješ “kde mi práve skočil fokus?” momenty. |
| 52 | +- **Menej DOM hackov**: nemusíš prehadzovať HTML len kvôli layoutu. |
| 53 | + |
| 54 | +## Fallback (keď `reading-flow` nie je podporované) |
| 55 | + |
| 56 | +Najbezpečnejšie je spraviť fallback tak, aby bol aspoň konzistentný: |
| 57 | + |
| 58 | +- na menších šírkach nech je layout lineárny (napr. `flex-direction: column;`) |
| 59 | +- “otočenia” používaj len tam, kde to dáva zmysel a kde máš jasný fokus štýl |
| 60 | + |
| 61 | +Príklad: |
| 62 | + |
| 63 | +```css |
| 64 | +.layout { |
| 65 | + display: flex; |
| 66 | + flex-direction: column; |
| 67 | + gap: 1rem; |
| 68 | +} |
| 69 | + |
| 70 | +@media (min-width: 48rem) { |
| 71 | + .layout { |
| 72 | + flex-direction: row-reverse; |
| 73 | + /* ak je podporované, zosúladí sa reading/focus s vizuálom */ |
| 74 | + reading-flow: flex-visual; |
| 75 | + } |
| 76 | +} |
| 77 | +``` |
| 78 | + |
| 79 | +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**. |
| 80 | + |
0 commit comments