Komplexní průvodce implementací přístupných tooltipů s využitím stavů hover a focus, který zajišťuje použitelnost pro všechny uživatele včetně osob se zdravotním postižením.
Implementace tooltipů: Přístupné informace při najetí myší a fokusu
Tooltipy jsou malé kontextové nápovědy, které se objeví, když uživatel najede kurzorem myši na prvek nebo na něj zaměří fokus. Mohou poskytovat dodatečné informace, objasňovat účel prvku nebo nabízet tipy, jak funkci použít. Tooltipy se však mohou snadno stát noční můrou přístupnosti, pokud nejsou implementovány správně. Tento průvodce popisuje osvědčené postupy pro vytváření tooltipů, které jsou použitelné pro každého, včetně uživatelů se zdravotním postižením.
Proč na přístupnosti u tooltipů záleží
Přístupnost není jen o dodržování předpisů; je to o vytváření lepšího uživatelského prožitku pro všechny. Pokud tooltipy nejsou přístupné, mohou vyloučit uživatele, kteří se spoléhají na asistivní technologie, jako jsou čtečky obrazovky, klávesnicová navigace nebo hlasové ovládání. Zvažte tyto scénáře:
- Uživatelé čteček obrazovky: Pokud tooltip není správně označen, čtečka obrazovky nemusí oznámit jeho přítomnost nebo obsah.
- Uživatelé klávesnice: Pokud se tooltip zobrazí pouze při najetí myší, uživatelé klávesnice se k němu nedostanou.
- Uživatelé s motorickým postižením: Přesné pohyby myší potřebné pro interakce při najetí mohou být náročné nebo nemožné.
- Uživatelé s kognitivním postižením: Špatně načasovaný nebo matoucí tooltip může způsobit frustraci a ztížit porozumění.
Dodržováním osvědčených postupů v oblasti přístupnosti můžeme zajistit, že tooltipy uživatelský prožitek pro všechny spíše vylepší, než aby mu bránily.
Klíčové principy pro přístupné tooltipy
Následující principy jsou klíčové pro vytváření přístupných tooltipů:
- Poskytněte alternativní přístup: Zajistěte, aby byly tooltipy přístupné jak při najetí myší, tak při fokusu klávesnice.
- Používejte atributy ARIA: Používejte atributy ARIA (Accessible Rich Internet Applications) k správné identifikaci a popisu tooltipů pro asistivní technologie.
- Spravujte fokus: Kontrolujte, kam se přesune fokus, když je tooltip zobrazen a skryt.
- Zajistěte dostatečný kontrast: Poskytněte dostatečný barevný kontrast mezi textem a pozadím tooltipu.
- Poskytněte dostatek času: Dejte uživatelům dostatek času na přečtení obsahu tooltipu.
- Umožněte jejich zavření: Poskytněte jasný způsob, jak tooltip zavřít.
- Vyhněte se nadužívání: Používejte tooltipy střídmě a pouze v nezbytných případech.
Implementační techniky
1. Použití Hover a Focus
Nejdůležitějším aspektem přístupných tooltipů je zajištění jejich dostupnosti jak pro uživatele myši, tak pro uživatele klávesnice. To znamená, že tooltip by se měl objevit jak při najetí myší, tak při získání fokusu prvkem.
HTML:
<a href="#" aria-describedby="tooltip-example">Příklad odkazu</a>
<div id="tooltip-example" role="tooltip" style="display: none;">Toto je příklad tooltipu.</div>
CSS:
a:hover + div[role="tooltip"],
a:focus + div[role="tooltip"] {
display: block;
position: absolute;
background-color: #f0f0f0;
border: 1px solid #ccc;
padding: 5px;
z-index: 1000; /* Zajistí, že tooltip bude navrchu */
}
Vysvětlení:
aria-describedby
: Tento atribut propojuje odkaz s prvkem tooltipu pomocí jeho ID. Tím asistivním technologiím sděluje, že tooltip poskytuje další informace o odkazu.role="tooltip"
: Tato ARIA role identifikuje prvek jako tooltip.- CSS používá selektor sousedního sourozence (
+
) k zobrazení tooltipu, když je na odkaz najeto myší nebo když získá fokus.
JavaScript (Pokročilé ovládání - volitelné):
Zatímco CSS si poradí s jednoduchým zobrazením/skrytím, JavaScript umožňuje robustnější ovládání, zejména když jsou tooltipy generovány dynamicky nebo vyžadují složitější chování.
const link = document.querySelector('a[aria-describedby="tooltip-example"]');
const tooltip = document.getElementById('tooltip-example');
link.addEventListener('focus', () => {
tooltip.style.display = 'block';
});
link.addEventListener('blur', () => {
tooltip.style.display = 'none';
});
link.addEventListener('mouseover', () => {
tooltip.style.display = 'block';
});
link.addEventListener('mouseout', () => {
tooltip.style.display = 'none';
});
2. Použití ARIA atributů
ARIA atributy jsou nezbytné pro poskytování sémantických informací asistivním technologiím. Zde je rozpis klíčových atributů:
aria-describedby
: Jak již bylo zmíněno, tento atribut vytváří vztah mezi spouštěcím prvkem a prvkem tooltipu.role="tooltip"
: Tento atribut explicitně definuje prvek jako tooltip.aria-hidden="true"
/aria-hidden="false"
: Použijte je k označení, zda je tooltip aktuálně viditelný pro asistivní technologie. Když je tooltip skrytý, nastavtearia-hidden="true"
. Když je viditelný, nastavtearia-hidden="false"
. To je zvláště důležité při použití JavaScriptu k ovládání viditelnosti tooltipu.
Příklad:
<button aria-describedby="help-tooltip">Odeslat</button>
<div id="help-tooltip" role="tooltip" aria-hidden="true">Kliknutím odešlete formulář.</div>
JavaScript (pro aria-hidden):
const button = document.querySelector('button[aria-describedby="help-tooltip"]');
const tooltip = document.getElementById('help-tooltip');
button.addEventListener('focus', () => {
tooltip.setAttribute('aria-hidden', 'false');
tooltip.style.display = 'block';
});
button.addEventListener('blur', () => {
tooltip.setAttribute('aria-hidden', 'true');
tooltip.style.display = 'none';
});
button.addEventListener('mouseover', () => {
tooltip.setAttribute('aria-hidden', 'false');
tooltip.style.display = 'block';
});
button.addEventListener('mouseout', () => {
tooltip.setAttribute('aria-hidden', 'true');
tooltip.style.display = 'none';
});
3. Správa fokusu
Když se tooltip objeví, obecně by *neměl* ukrást fokus spouštěcímu prvku. Fokus by měl zůstat na prvku, který tooltip spustil. Tím se zajistí, že uživatelé klávesnice mohou pokračovat v navigaci po stránce bez neočekávaných přerušení.
Mohou však nastat situace, kdy *chcete* přesunout fokus na tooltip, zejména pokud tooltip obsahuje interaktivní prvky (např. odkazy, tlačítka). V takovém případě zajistěte, že:
- Tooltip je vizuálně odlišen, aby bylo zřejmé, že má fokus.
- Existuje jasný způsob, jak vrátit fokus na původní spouštěcí prvek (např. tlačítko pro zavření uvnitř tooltipu).
Ve většině případů je pro jednoduchost a použitelnost preferováno vyhýbat se správě fokusu uvnitř samotného tooltipu.
4. Zajištění dostatečného kontrastu
Barevný kontrast je klíčový pro čitelnost. Ujistěte se, že barva textu ve vašich tooltipech má dostatečný kontrast oproti barvě pozadí. Pokyny pro přístupnost webového obsahu (WCAG) doporučují kontrastní poměr alespoň 4.5:1 pro normální text a 3:1 pro velký text (18pt nebo 14pt tučně).
Použijte online nástroje pro kontrolu kontrastu k ověření, že vaše barevné volby splňují standardy přístupnosti. Příklady nástrojů pro kontrolu kontrastu zahrnují:
- WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
- Coolors: https://coolors.co/contrast-checker
Příklad (Dobrý kontrast):
.tooltip {
background-color: #000;
color: #fff;
}
Příklad (Špatný kontrast):
.tooltip {
background-color: #fff;
color: #eee;
}
5. Poskytnutí dostatečného času
Uživatelé potřebují dostatek času na přečtení obsahu tooltipu. Vyhněte se tooltipům, které mizí příliš rychle. Ačkoliv neexistuje žádné magické číslo, snažte se o minimální dobu zobrazení několika sekund. Tooltip by také měl zůstat viditelný, dokud uživatel najíždí myší na spouštěcí prvek nebo na něj má zaměřený fokus. Pokud potřebujete tooltip zavřít kvůli jiným událostem, poskytněte indikátor, že se tooltip zavře.
Pokud je obsah tooltipu zdlouhavý, zvažte poskytnutí způsobu, jakým může uživatel tooltip ručně zavřít (např. tlačítkem pro zavření nebo stisknutím klávesy Escape).
6. Umožnění jejich zavření
Ačkoliv tooltipy často mizí automaticky, když uživatel odsune myš nebo odstraní fokus, je dobrým zvykem poskytnout jasný způsob, jak je zavřít ručně, zejména u zdlouhavých tooltipů nebo tooltipů obsahujících interaktivní prvky.
Metody pro zavření tooltipů:
- Tlačítko pro zavření: Zahrňte vizuálně výrazné tlačítko pro zavření uvnitř tooltipu.
- Klávesa Escape: Umožněte uživatelům zavřít tooltip stisknutím klávesy Escape.
- Kliknutí mimo: Zavřete tooltip, když uživatel klikne kamkoli mimo tooltip a spouštěcí prvek. (Používejte s opatrností, může to být rušivé).
Příklad (Tlačítko pro zavření):
<div id="my-tooltip" role="tooltip" aria-hidden="true">
Toto je obsah mého tooltipu.
<button onclick="hideTooltip()">Zavřít</button>
</div>
Příklad (Klávesa Escape):
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
hideTooltip(); // Nahraďte vaší skutečnou funkcí pro skrytí tooltipu
}
});
7. Vyhýbání se nadužívání
Tooltipy by se měly používat střídmě a pouze tehdy, když poskytují skutečně užitečné informace. Nadužívání tooltipů může zahltit rozhraní, rozptylovat uživatele a vytvářet frustrující zážitek.
Alternativy k tooltipům:
- Jasné popisky: Používejte jasné a popisné popisky pro formulářová pole, tlačítka a odkazy.
- Kontextová nápověda: Poskytněte nápovědný text přímo v rozhraní, poblíž příslušných prvků.
- Dokumentace nápovědy: Odkazujte na komplexní dokumentaci nápovědy pro složitější funkce.
Pokročilá zvážení
Dynamický obsah
Pokud je obsah vašeho tooltipu generován dynamicky (např. načítán z API nebo aktualizován na základě uživatelského vstupu), zajistěte, aby byl atribut aria-describedby
a viditelnost tooltipu odpovídajícím způsobem aktualizovány. K řízení těchto aktualizací použijte JavaScript.
Polohování
Pečlivě zvažte polohování vašich tooltipů. Vyhněte se jejich umisťování tak, aby zakrývaly důležitý obsah nebo způsobovaly posuny v rozvržení. Mějte na paměti různé velikosti obrazovek a rozlišení a pomocí CSS zajistěte, aby byly tooltipy vždy viditelné v rámci viewportu.
Mobilní zařízení
Tooltipy se tradičně spoléhají na interakce při najetí myší (hover), které nejsou dostupné na dotykových zařízeních. Pro mobilní zařízení zvažte použití alternativních interakčních metod, jako jsou:
- Klepnutí (Tap): Zobrazte tooltip, když uživatel klepne na prvek.
- Dlouhé stisknutí (Long press): Zobrazte tooltip, když uživatel dlouze stiskne prvek.
- Zobrazení při fokusu: Zobrazte, když prvek získá fokus. Toho lze dosáhnout pomocí JavaScriptu, kontrolou podpory dotyku (např. `('ontouchstart' in window)`) a odpovídající úpravou chování zobrazení.
Testování vašich tooltipů
Důkladně testujte své tooltipy, abyste zajistili, že jsou přístupné všem uživatelům. Použijte kombinaci manuálního testování a automatizovaných nástrojů pro testování přístupnosti.
Metody testování:
- Navigace klávesnicí: Ověřte, že jsou tooltipy přístupné pomocí klávesnice.
- Testování s čtečkou obrazovky: Použijte čtečku obrazovky k ověření, že jsou tooltipy správně oznamovány.
- Analýza barevného kontrastu: Použijte nástroj pro kontrolu barevného kontrastu k ověření dostatečného kontrastu.
- Testování na mobilních zařízeních: Testujte tooltipy na různých mobilních zařízeních a velikostech obrazovek.
- Automatizované testování přístupnosti: Použijte nástroje jako axe DevTools, WAVE nebo Lighthouse k identifikaci potenciálních problémů s přístupností.
Internacionalizace (i18n) a lokalizace (l10n)
Při vývoji tooltipů pro globální publikum mějte na paměti internacionalizaci a lokalizaci:
- Směr textu: Podporujte směr textu zleva doprava (LTR) i zprava doleva (RTL). Pro rozvržení používejte logické vlastnosti CSS (např. `margin-inline-start`, `margin-inline-end`) místo fyzických vlastností (např. `margin-left`, `margin-right`).
- Překlady pro konkrétní jazyky: Poskytněte překlady obsahu tooltipů pro různé jazyky.
- Formáty data a času: Přizpůsobte formáty data a času místním zvyklostem uživatele.
- Formáty čísel: Používejte vhodné formáty čísel pro různé regiony (např. desetinné oddělovače, oddělovače tisíců).
Závěr
Implementace přístupných tooltipů vyžaduje pečlivé plánování a pozornost k detailu. Dodržováním principů a technik uvedených v tomto průvodci můžete vytvářet tooltipy, které jsou použitelné pro každého, bez ohledu na jeho schopnosti. Pamatujte, že přístupnost je nepřetržitý proces, takže pokračujte v testování a zdokonalování svých tooltipů, abyste zajistili, že splňují potřeby všech vašich uživatelů.