Přístupnost nemusí bolet. Podíváme se na časté chyby, které kodéři a designéři sekají jako slepý Baťa cvičky. Pak si ukážeme pár jednoduchých tipů, jak bez velké námahy pomoci nevidomým uživatelům vašich webů. A hlavně se podíváme na několik správně nakódovaných návrhových vzorů. Víte jak navrhout například přístupný našeptávač?
Martin Michálek je frontend designér na volné noze s takřka dvacetiletou praxí. Píše blog Vzhůru dolů, spoluzaložil a vede spolek Frontendisti.cz. Hlavně ale pomáhá s návrhem a implementací webových uživatelských rozhraní. V poslední době pracuje pro klienty jako jsou VašeČočky.cz, Svobodná Evropa nebo Česká televize.
5. Dobrá struktura nadpisů je jeden z důležitých výstupů práce frontendisty. Tady je vidět struktura jednoho
z článků na Vzhůru dolů. Hezky to zpracují vyhledávače nebo třeba odečítače obrazovky zrakově
postižených. Těm ale takovéhle zpracování stránky nějaký čas zabere.
6. Vezměme tři typy uživatelů: běžní (jen po ránu nevyspalí), krátkozrací a nevidomí.
8. režimy
čtečky4Nadpisy
Šipky
Ctrl+F
Orientační body
Čtečky pro nevidomé mají 4 režimy: Procházají nadpisovou strukturu, používají šipky pro rychlé čtení nebo
tabulátor pro procházení aktivních častí. Stejně jako my pak používají CTRL+F, když něco nemohou najít.
A ten nejrychlejší režim - navigaci po orientačních bodech.
10. <div role="main">
<main>
×
Používat role atributy nebo HTML5 strukturální elementy?Já dřív HTML5 elementy nedoporučoval, protože
čtečky podporovaly role atributy, ale moc ne HTML5 tagy. A kvůli starších Explorerů bylo nutné používat
zbytečné Javascripty. https://www.vzhurudolu.cz/prirucka/html5-struktura
12. <main role="main">
<header role="banner">
<div role="search">
<aside role="complementary">
<footer role="contentinfo">
<nav role="navigation">
Q
D
Používejte prostě obojí. Jsou tu ještě klávesové zkratky čteček pro přechod na konkrétní prkvy. Skok na
hlavní obsah nebo navigaci a jedno tlačítko? Bude tenhle uživatel pořád pětkrát pomalejší než vy?
13. @media print {
body > *:not(main) {
display: none;
}
}
Dá se s tím navíc kreativně pracovat v kodérské praxi. Tady třeba pro tisk schovávám
všechno, co není hlavní obsah stránky.
14. 1. Struktura stránky
2. Tlačítka
3. Schovávání obsahu
4. Klávesnice
5. Našeptávač
6. Testování
2. Tlačítka
17. <span>
Tlačítko
</span>
Vezměme to ale z jiné strany - představme si, že jsme prasátka a chceme udělat tlačítko ze spanu. Viděli
jste to někde? Ve vlastním kódu ale ne, že ne?
23. <span> ✔
<a> ✔ ✔ ✔
<button> ✔ ✔ ✔ ✔ ✔
Vypadá Kliká Zaměření Význam Mezerník
Není to vidět, ale nativní <button> nebo <input type="submit> v sobě mají nečekanou škálu funkcí. U
<spanu> chybějí všechny, ale některé z nich nemá ani <a>: chybí role="button" a možnost aktivace
mezerníkem.
26. Jak třeba ale v HTML zapíšete záložkovou navigaci nebo tooltip? Tak, aby čtečka pochopila význam?
Slouží k tomu WAI-ARIA role pro widgety. Další obsah pro atribut role="". Jsou součástí specifikace HTML5
a velmi doporučuji se všechny naučit.
30. 1. Struktura stránky
2. Tlačítka
3. Schovávání obsahu
4. Klávesnice
5. Našeptávač
6. Testování
3. Schovávání obsahu
31. display: none;
visibility: hidden;
<div hidden>…</div>
⨯ ⨯⨯
Když chcete prvek schovat, použijete asi display: none. Jenže opravdu to chcete? Prvek nebude vidět ve
čtečkách, ale i Google dá schovanému obsahu menší váhu.
Takže pokud schovávat, nezkusit to dělat chytřeji?
32. max-height: 0;
overflow: hidden;
opacity: 0;
⨯ ⨯
Čtečky nijak neřeší ořezaný obsah, takže tohle všechno normálně přečtou.
Hlavně max-height: 0; je užitečný pro různé rozklikávání obsahu nebo navigací na mobilech.
33. <a href="#main" class="skip-link">
Přejít na obsah
</a>
.skip-link {
position: absolute;
top: 0;
right: 100%;
}
.skip-link:focus {
right: auto;
}
⨯
→ vrdl.cz
Další příklad je obsah jen pro čtečky. Odkazy pro přecházení na obsah se stále hodí. Ne všichni mají čtečky,
které umějí ARIA role. Progressive enahancement používáme i při kódování pro zrakově hendikepované.
34. <span class="icon" aria-hidden="true">
</span>
⨯ ⨯
Některé prvky bývají v kódu jen pro servisní účely. Jako tady span pro ikonku. Je lepší je před čtečkami
schovat, nejlépe pomocí atributu aria-hidden="".
36. 1. Struktura stránky
2. Tlačítka
3. Schovávání obsahu
4. Klávesnice
5. Našeptávač
6. Testování
4. Klávesnice
37. • Interaktivní: <a>, <input>, <video>…
• Nejsou „disabled“
• Nejsou „hidden“
TAB:focus &
Které prvky jsou samy od sebe „fokusovatelné“ (zaměřitelné)
a je možné k nim přistoupit pomocí tabulátoru?
40. Přidání focusu a možnosti tabnutí:
<ul tabindex="0">
…
</ul>
tabindex="0" umožní zaměřit jinak klávesnicí nezaměřitelný element.
Brzy si ukážeme jedno použití.
42. * {
outline: none;
}
❌
Zbavíte se sice (pro někoho) ošklivého okraje, ale znemožníte zaměřit element z klávesnice.
Kdyžtak to změňte, ale rozumně.
43. TAB TAB
Neotevírejte vrstvy na focus. Znamená to pak, že musím tabulátorem projít všechny otevírané vrstvy. Lepší
je použít k otevření vrstev nebo podnavigací mezerník.
44. • tabulátor - posun po aktivních elementech
• mezerník - aktivace elementu
• enter - odeslání, přechod jinam
45. 1. Struktura stránky
2. Tlačítka
3. Schovávání obsahu
4. Klávesnice
5. Našeptávač
6. Testování
5. Našeptávač