Kompleksowy przewodnik po implementacji dostępnych etykiet narzędziowych z wykorzystaniem stanów hover i focus, zapewniający użyteczność dla wszystkich użytkowników, w tym osób z niepełnosprawnościami.
Implementacja etykiet narzędziowych: Dostępne informacje przy najechaniu kursorem i zaznaczeniu
Etykiety narzędziowe (tooltips) to małe, kontekstowe komunikaty pomocy, które pojawiają się, gdy użytkownik najedzie kursorem myszy na element lub go zaznaczy. Mogą one dostarczać dodatkowych informacji, wyjaśniać przeznaczenie elementu lub oferować wskazówki dotyczące korzystania z funkcji. Jednakże, etykiety narzędziowe mogą łatwo stać się koszmarem pod względem dostępności, jeśli nie zostaną prawidłowo wdrożone. Ten przewodnik przedstawia najlepsze praktyki tworzenia etykiet narzędziowych, które są użyteczne dla wszystkich, w tym użytkowników z niepełnosprawnościami.
Dlaczego dostępność ma znaczenie w przypadku etykiet narzędziowych
Dostępność to nie tylko kwestia zgodności z przepisami; to tworzenie lepszego doświadczenia użytkownika dla wszystkich. Kiedy etykiety narzędziowe nie są dostępne, może to wykluczyć użytkowników, którzy polegają na technologiach asystujących, takich jak czytniki ekranu, nawigacja za pomocą klawiatury czy wprowadzanie głosowe. Rozważmy następujące scenariusze:
- Użytkownicy czytników ekranu: Jeśli etykieta narzędziowa nie jest odpowiednio oznaczona, czytnik ekranu może nie ogłosić jej obecności ani treści.
- Użytkownicy klawiatury: Jeśli etykieta narzędziowa pojawia się tylko po najechaniu kursorem, użytkownicy klawiatury nie będą mieli do niej dostępu.
- Użytkownicy z niepełnosprawnościami ruchowymi: Precyzyjne ruchy myszą wymagane do interakcji typu hover mogą być trudne lub niemożliwe do wykonania.
- Użytkownicy z niepełnosprawnościami poznawczymi: Źle zaplanowana czasowo lub myląca etykieta narzędziowa może powodować frustrację i utrudniać zrozumienie.
Stosując najlepsze praktyki w zakresie dostępności, możemy zapewnić, że etykiety narzędziowe będą ulepszać, a nie utrudniać doświadczenie użytkownika dla wszystkich.
Kluczowe zasady dla dostępnych etykiet narzędziowych
Poniższe zasady są kluczowe dla tworzenia dostępnych etykiet narzędziowych:
- Zapewnij alternatywny dostęp: Upewnij się, że etykiety narzędziowe są dostępne zarówno przy najechaniu kursorem, jak i przy zaznaczeniu za pomocą klawiatury.
- Używaj atrybutów ARIA: Używaj atrybutów ARIA (Accessible Rich Internet Applications), aby prawidłowo identyfikować i opisywać etykiety narzędziowe dla technologii asystujących.
- Zarządzaj focusem: Kontroluj, gdzie trafia fokus, gdy etykieta narzędziowa jest wyświetlana i ukrywana.
- Zapewnij wystarczający kontrast: Zapewnij odpowiedni kontrast kolorów między tekstem etykiety a tłem.
- Zapewnij wystarczająco dużo czasu: Daj użytkownikom wystarczająco dużo czasu na przeczytanie treści etykiety narzędziowej.
- Umożliw ich zamykanie: Zapewnij jasny sposób na zamknięcie etykiety narzędziowej.
- Unikaj nadużywania: Używaj etykiet narzędziowych oszczędnie i tylko wtedy, gdy jest to konieczne.
Techniki implementacji
1. Używanie najechania kursorem i fokusu
Najważniejszym aspektem dostępnych etykiet narzędziowych jest zapewnienie, że są one dostępne zarówno dla użytkowników myszy, jak i klawiatury. Oznacza to, że etykieta narzędziowa powinna pojawiać się zarówno po najechaniu kursorem, jak i gdy element otrzyma fokus.
HTML:
<a href="#" aria-describedby="tooltip-example">Przykładowy link</a>
<div id="tooltip-example" role="tooltip" style="display: none;">To jest przykładowa etykieta narzędziowa.</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; /* Upewnij się, że etykieta jest na wierzchu */
}
Wyjaśnienie:
aria-describedby
: Ten atrybut łączy link z elementem etykiety narzędziowej za pomocą jego ID. Informuje to technologie asystujące, że etykieta narzędziowa dostarcza dodatkowych informacji o linku.role="tooltip"
: Ta rola ARIA identyfikuje element jako etykietę narzędziową.- CSS używa selektora sąsiedniego rodzeństwa (
+
), aby pokazać etykietę narzędziową, gdy link jest najechany kursorem lub zaznaczony.
JavaScript (Zaawansowana kontrola - opcjonalnie):
Podczas gdy CSS może obsługiwać proste pokazywanie/ukrywanie, JavaScript pozwala na bardziej solidną kontrolę, zwłaszcza gdy etykiety narzędziowe są generowane dynamicznie lub wymagają bardziej złożonego zachowania.
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. Używanie atrybutów ARIA
Atrybuty ARIA są niezbędne do dostarczania informacji semantycznych technologiom asystującym. Oto omówienie kluczowych atrybutów:
aria-describedby
: Jak wspomniano wcześniej, ten atrybut ustanawia relację między elementem wyzwalającym a elementem etykiety narzędziowej.role="tooltip"
: Ten atrybut jawnie definiuje element jako etykietę narzędziową.aria-hidden="true"
/aria-hidden="false"
: Użyj ich, aby wskazać, czy etykieta narzędziowa jest aktualnie widoczna dla technologii asystujących. Gdy etykieta jest ukryta, ustawaria-hidden="true"
. Gdy jest widoczna, ustawaria-hidden="false"
. Jest to szczególnie ważne, gdy używasz JavaScriptu do kontrolowania widoczności etykiety.
Przykład:
<button aria-describedby="help-tooltip">Wyślij</button>
<div id="help-tooltip" role="tooltip" aria-hidden="true">Kliknij tutaj, aby wysłać formularz.</div>
JavaScript (dla 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. Zarządzanie focusem
Gdy etykieta narzędziowa się pojawia, generalnie *nie powinna* ona kraść fokusu z elementu wyzwalającego. Fokus powinien pozostać na elemencie, który wywołał etykietę. Zapewnia to, że użytkownicy klawiatury mogą kontynuować nawigację po stronie bez nieoczekiwanych przerw.
Mogą jednak wystąpić sytuacje, w których *chcesz* przenieść fokus do etykiety narzędziowej, szczególnie jeśli zawiera ona interaktywne elementy (np. linki, przyciski). W takim przypadku upewnij się, że:
- Etykieta narzędziowa jest wizualnie odróżniona, aby wskazać, że ma fokus.
- Istnieje jasny sposób na przywrócenie fokusu do pierwotnego elementu wyzwalającego (np. przycisk zamknięcia w etykiecie).
W większości przypadków unikanie zarządzania focusem w samej etykiecie jest preferowane ze względu na prostotę i użyteczność.
4. Zapewnienie wystarczającego kontrastu
Kontrast kolorów jest kluczowy dla czytelności. Upewnij się, że kolor tekstu w etykietach narzędziowych ma wystarczający kontrast w stosunku do koloru tła. Wytyczne dotyczące dostępności treści internetowych (WCAG) zalecają współczynnik kontrastu co najmniej 4.5:1 dla normalnego tekstu i 3:1 dla dużego tekstu (18pt lub 14pt pogrubiony).
Użyj internetowych narzędzi do sprawdzania kontrastu, aby zweryfikować, czy wybrane kolory spełniają standardy dostępności. Przykłady takich narzędzi to:
- WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
- Coolors: https://coolors.co/contrast-checker
Przykład (dobry kontrast):
.tooltip {
background-color: #000;
color: #fff;
}
Przykład (słaby kontrast):
.tooltip {
background-color: #fff;
color: #eee;
}
5. Zapewnienie wystarczającej ilości czasu
Użytkownicy potrzebują wystarczająco dużo czasu na przeczytanie treści etykiety narzędziowej. Unikaj etykiet, które znikają zbyt szybko. Chociaż nie ma magicznej liczby, staraj się zapewnić minimalny czas wyświetlania wynoszący kilka sekund. Ponadto etykieta powinna pozostać widoczna tak długo, jak użytkownik najeżdża kursorem lub ma zaznaczony element wyzwalający. Jeśli musisz zamknąć etykietę z powodu innych zdarzeń, poinformuj o tym użytkownika.
Jeśli treść etykiety jest długa, rozważ zapewnienie użytkownikowi możliwości jej ręcznego zamknięcia (np. za pomocą przycisku zamknięcia lub naciśnięcia klawisza Escape).
6. Umożliwienie ich zamykania
Chociaż etykiety narzędziowe często znikają automatycznie, gdy użytkownik odsunie mysz lub usunie fokus, dobrą praktyką jest zapewnienie jasnego sposobu na ich ręczne zamknięcie, zwłaszcza w przypadku długich etykiet lub etykiet zawierających elementy interaktywne.
Metody zamykania etykiet narzędziowych:
- Przycisk zamknięcia: Umieść widoczny przycisk zamknięcia wewnątrz etykiety.
- Klawisz Escape: Pozwól użytkownikom zamknąć etykietę, naciskając klawisz Escape.
- Kliknięcie na zewnątrz: Zamknij etykietę, gdy użytkownik kliknie w dowolnym miejscu poza etykietą i elementem wyzwalającym. (Używaj z ostrożnością, ponieważ może to być rozpraszające).
Przykład (przycisk zamknięcia):
<div id="my-tooltip" role="tooltip" aria-hidden="true">
To jest treść mojej etykiety narzędziowej.
<button onclick="hideTooltip()">Zamknij</button>
</div>
Przykład (klawisz Escape):
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
hideTooltip(); // Zastąp swoją funkcją ukrywania etykiety
}
});
7. Unikanie nadużywania
Etykiety narzędziowe powinny być używane oszczędnie i tylko wtedy, gdy dostarczają naprawdę pomocnych informacji. Nadużywanie etykiet może zaśmiecać interfejs, rozpraszać użytkowników i prowadzić do frustracji.
Alternatywy dla etykiet narzędziowych:
- Czytelne etykiety: Używaj jasnych i opisowych etykiet dla pól formularzy, przycisków i linków.
- Pomoc kontekstowa: Dostarczaj tekst pomocy bezpośrednio w interfejsie, w pobliżu odpowiednich elementów.
- Dokumentacja pomocy: Linkuj do obszernej dokumentacji pomocy dla bardziej złożonych funkcji.
Zaawansowane zagadnienia
Zawartość dynamiczna
Jeśli treść Twojej etykiety narzędziowej jest generowana dynamicznie (np. ładowana z API lub aktualizowana na podstawie danych wejściowych użytkownika), upewnij się, że atrybut aria-describedby
i widoczność etykiety są odpowiednio aktualizowane. Użyj JavaScriptu do zarządzania tymi aktualizacjami.
Pozycjonowanie
Starannie rozważ pozycjonowanie swoich etykiet narzędziowych. Unikaj umieszczania ich w sposób, który zasłania ważną treść lub powoduje przesunięcia układu. Pamiętaj o różnych rozmiarach i rozdzielczościach ekranu i użyj CSS, aby zapewnić, że etykiety są zawsze widoczne w obrębie okna przeglądarki.
Urządzenia mobilne
Etykiety narzędziowe tradycyjnie opierają się na interakcjach typu hover, które nie są dostępne na urządzeniach dotykowych. W przypadku urządzeń mobilnych rozważ użycie alternatywnych metod interakcji, takich jak:
- Dotknięcie: Wyświetl etykietę, gdy użytkownik dotknie elementu.
- Długie naciśnięcie: Wyświetl etykietę, gdy użytkownik długo naciśnie element.
- Pokaż przy zaznaczeniu: Wyświetl, gdy element otrzyma fokus. Można to osiągnąć za pomocą JavaScriptu, sprawdzając wsparcie dla dotyku (np.
('ontouchstart' in window)
) i odpowiednio zmieniając zachowanie wyświetlania.
Testowanie etykiet narzędziowych
Dokładnie przetestuj swoje etykiety narzędziowe, aby upewnić się, że są dostępne dla wszystkich użytkowników. Użyj kombinacji testów manualnych i zautomatyzowanych narzędzi do testowania dostępności.
Metody testowania:
- Nawigacja za pomocą klawiatury: Sprawdź, czy etykiety narzędziowe są dostępne przy użyciu klawiatury.
- Testowanie z czytnikiem ekranu: Użyj czytnika ekranu, aby upewnić się, że etykiety są prawidłowo ogłaszane.
- Analiza kontrastu kolorów: Użyj narzędzia do sprawdzania kontrastu kolorów, aby zweryfikować wystarczający kontrast.
- Testowanie na urządzeniach mobilnych: Przetestuj etykiety na różnych urządzeniach mobilnych i rozmiarach ekranu.
- Zautomatyzowane testowanie dostępności: Użyj narzędzi takich jak axe DevTools, WAVE lub Lighthouse, aby zidentyfikować potencjalne problemy z dostępnością.
Internacjonalizacja (i18n) i Lokalizacja (l10n)
Tworząc etykiety narzędziowe dla globalnej publiczności, pamiętaj o internacjonalizacji i lokalizacji:
- Kierunek tekstu: Wspieraj zarówno kierunek tekstu od lewej do prawej (LTR), jak i od prawej do lewej (RTL). Używaj logicznych właściwości CSS (np.
margin-inline-start
,margin-inline-end
) zamiast właściwości fizycznych (np.margin-left
,margin-right
) do układu. - Tłumaczenia specyficzne dla języka: Zapewnij tłumaczenia treści etykiet dla różnych języków.
- Formaty daty i godziny: Dostosuj formaty daty i godziny do ustawień regionalnych użytkownika.
- Formaty liczb: Używaj odpowiednich formatów liczb dla różnych regionów (np. separatory dziesiętne, separatory tysięcy).
Podsumowanie
Implementacja dostępnych etykiet narzędziowych wymaga starannego planowania i dbałości o szczegóły. Postępując zgodnie z zasadami i technikami opisanymi w tym przewodniku, możesz tworzyć etykiety narzędziowe, które są użyteczne dla wszystkich, niezależnie od ich umiejętności. Pamiętaj, że dostępność to ciągły proces, dlatego kontynuuj testowanie i doskonalenie swoich etykiet, aby zapewnić, że spełniają one potrzeby wszystkich Twoich użytkowników.