Přístupnost je důležitá disciplína, s jejíž pomocí mohou vývojáři vyjít vstříc různým skupinám lidí a jež se jen zdánlivě týká pouze handicapovaných minorit, jako jsou zrakově postižení.
Díky přístupnosti se zkrátka mohou různé skupiny lidí dostat k informacím na webu bez velkých překážek.
V nových CSS layoutech může přístupnost pokazit poněkud kontroverzní možnost změny pořadí prvků ve stránce.
Přístupnost a pořadí ve flexboxu nebo gridu
Musím vás upozornit na to, že jakmile odlišíte pořadí zobrazování od pořadí v kódu, může se stát, že při ovládání z klávesnice (tabulátorem) nebo při použití nejrůznějších asistivních technologií (například odečítačů obrazovky) přestane uživatelům pořadí dávat smysl.
→ Související: Testování webů v odečítačích obrazovky
Také proto je ve specifikaci obsaženo toto důrazné varování:
Autoři musí použít změnu pořadí pouze pro vizuální, nikoliv logické přeskupování obsahu.
Logické pořadí je zpravidla pořadí zápisu kódu a jeho využití si můžete představit v těchto kontextech konzumace stránky:
- Roboti
Například stroje vyhledávačů, jako je Google. Roboti postupují podle pořadí v HTML nebo DOMu. - Sekvenční navigace stránkou
Tento typ procházení využívají například uživatelé odečítačů obrazovky nebo uživatelé, kteří z nějakého důvodu nemohou použít jiný způsob navigace – ať už z důvodu trvalého či dočasného postižení rukou, jako je třeba zlomenina. - Hlas a jiná média
Přeskupení vizuálního pořadí nezmění řazení v nevizuálních médiích, například v řeči. 
Může se tedy stát, že někdo, kdo se naviguje pomocí klávesnice, bude procházet odkazy na vašem webu a najednou odskočí z dolní do horní části dokumentu, protože tam je další položka logického pořadí.
Ve specifikaci mřížky se dále píše:
CSS grid dává autorům velkou moc přeskupit dokument. Nejedná se však o náhradu za správné uspořádání zdroje dokumentu.
Něco vám řeknu. Specifikace má pravdu. Pokud chcete pro přístupnost něco udělat, rozhodně dbejte na to, aby pořadí v kódu dávalo smysl v případě, kdy byste stránku četli bez stylů.
Dotčené vlastnosti
Problém se týká všech CSS vlastností, které mohou v nových systémech rozvržení ovlivnit vizuální pořadí:
- Vlastnost 
order, která změní způsob automatického umísťování položek. - Deklarace 
grid-auto-flow:dense, jež automaticky přeskupí položky jinak, než jsou uvedeny v DOMu. - Vlastnost 
grid-area, která umístí položky do konkrétního místa mřížky a opět nemusí respektovat pořadí ve zdroji. - Vlastnost 
flex-directiona hodnoty, které převracejí pořadí –row-reverseacolumn-reverse. 
Možností, jak přeskupit obsah, je samozřejmě více a vztáhnout to můžeme i na starý dobrý float, takže tento text berte jako obecné varování.
Příklad
Pojďme si to ukázat na jednoduchém demu postaveném na vlastnosti order a flexboxu se čtyřmi položkami:
<div class="container">
  <a class="item item--1" href="#">Item 1</a>
  <a class="item item--2" href="#">Item 2</a>
  <a class="item item--3" href="#">Item 3</a>  
  <a class="item item--4" href="#">Item 4</a>
</div>
Jak vidíte, tentokrát jsem vyměnil divy za odkazy, a to proto, abychom mohli obsahem navigovat pomocí tabulátoru.
Kontejner (.container) je obyčejný flexbox, ale za ukázání kódu stojí předpis pro třetí položku:
.item--3 {
  order: -1;
}
Původní pořadí (1, 2, 3, 4) se tedy při prohlížení stránky v prohlížeči změní na 3, 1, 2, 4.
Jenže navigační pořadí je prohlížečem stále bráno podle HTML.
Zkuste si to naživo v CodePenu: vrdl.in/ykj23.
Zachránce tabindex? Leda kulový
Někteří z vás si určitě řekli, že situaci může přeci zachránit vlastnost tabindex, atribut HTML, který nastaví pořadí navigace pomocí tabulátorů:
<div class="container">
  <a class="item item--1" href="#" tabindex="2">Item 1</a>
  <a class="item item--2" href="#" tabindex="3">Item 2</a>
  <a class="item item--3" href="#" tabindex="1">Item 3</a>  
  <a class="item item--4" href="#" tabindex="4">Item 4</a>
</div>
V prohlížeči to po přidání atributů tabindex může vypadat nadějně.
Pořadí navigace je nyní správné, protože odpovídá logickému uspořádání položek na obrazovce:
| Typ řazení | Pořadí | 
|---|---|
| HTML, DOM | 1, 2, 3, 4 | 
| Vizuální | 3, 1, 2, 4 | 
| Navigační, logické | 1, 2, 3, 4 | 
Zdá se, že problém jsme vyřešili. Pořadí v HTML a pořadí navigační se neliší.
Jenže chyba lávky! Otázka totiž zní: Jak moc je tabindex pro tyto případy v praxi použitelný?
Atribut tabindex totiž nastavuje pořadí pro celý dokument, takže jakmile bychom takto zapsali samostatnou komponentu a tu pak vkládali na různá místa DOMu, napácháme s tabindex více škody než užitku.
A pak – neumím si představit, že bychom kvůli jedné komponentě s order natvrdo měnili pořadí tabindex pro celou stránku.
Z mého pohledu je tedy tabindex pro opravu tohoto problému použitelný jen velmi omezeně.
Ale zkusit si to v CodePenu klidně můžete.
Pomůže aria-flowto?
Léonie Watson v článku „Flexbox & the keyboard navigation disconnect“ už před lety upozorňovala na vlastnost aria-flowto, která v rámci specifikace WAI-ARIA umožňuje právě lokální změnu navigačního pořadí. Je to prostě takový tabindex pro komponenty.
Hned jsem to vyzkoušel, ale zdá se, že stále platí to, co píše Léonie v článku z roku 2016: Tahle vlastnost má extrémně špatnou podporu v prohlížečích. Alespoň něco se v prohlížečích nemění…
Pomůže nám vůbec něco? Ani ne
Odlišení pořadí navigačního od vizuálního je možné ve flexboxu a teď i gridu mnoha různými způsoby, tedy nejen vlastností order.
Bohužel se to zdá jako aktuálně nevyřešitelný problém, protože jej myslím nijak konkrétně neřeší specifikace, natož pak prohlížeče.
Odkážu vás na další zdroje, ale nic veselého se tam nedozvíte:
- Varování ve specifikaci flexboxu. vrdl.in/9e6zu
 - Totéž ve specifikaci CSS gridu. vrdl.in/il128
 - Adrian Roselli: „Source Order Matters“. vrdl.in/h0lgw
 - Manuel Matuzovic: „The Dark Side of the grid (Part 2)“. vrdl.in/sju8i
 - Rachel Andrew: „Content re-ordering and accessibility“. vrdl.in/1qad6
 - Léonie Watson: „Flexbox & the keyboard navigation“. vrdl.in/42mb5
 
Komunitu, tedy vývojáře, lidi kolem webových specifikací a prohlížečů, zde ještě čeká dost práce. Jednoho by to v roce 2022 překvapilo.
Ponaučení do praxe zní: Jakmile použijete některou z vlastností, která rozpojuje pořadí vizuální od pořadí logického, přemýšlejte, jak velký vliv to bude mít na přístupnost a hlavně na vaše uživatele tam venku.
          
Komentáře
Máte doplnění, komentář nebo jste našli chybu?
Pro přidání názoru se prosím
přihlaste nebo si zřiďte účet.