Poziom
AA
Od wersji
WCAG 2.1
Pozycje
17 / 193
/ Kryterium WCAG

1.4.13 Treść spod kursora lub fokusu

Gdy najechanie kursorem albo przejście klawiszem Tab pokazuje dodatkową treść, użytkownik musi móc ją zamknąć, najechać na nią kursorem i mieć ją na ekranie tak długo, jak potrzebuje.

/ Czego wymaga

Kryterium dotyczy dymków podpowiedzi, rozwijanych podmenu i kart podglądu, które pojawiają się, gdy kursor zatrzyma się na kontrolce albo gdy kontrolka dostanie fokus z klawiatury. Stawia im trzy warunki. Najwięcej tracą na ich braku osoby korzystające z powiększenia ekranu: przy dużym powiększeniu dymek potrafi zasłonić dokładnie to, co właśnie czytały, albo zniknąć, gdy tylko ruszą kursorem w jego stronę. Osobom z drżeniem rąk lub ograniczoną sprawnością dłoni treść zamyka się przy najmniejszym poślizgu.

Treść musi dać się zamknąć bez przesuwania kursora i fokusu, zwykle klawiszem Escape, chyba że informuje o błędzie w polu albo niczego nie zasłania ani nie zastępuje. Musi dać się wskazać: kursor może przejść z elementu wywołującego na nową treść i ta się nie zamyka. Musi być trwała: zostaje, dopóki użytkownik nie zabierze kursora lub fokusu, sam jej nie zamknie albo dopóki informacja nie przestanie być aktualna. Dymki rysowane przez samą przeglądarkę, na przykład z niezmienionego atrybutu title, są z kryterium wyłączone.

/ Jak strony go nie spełniają

  • Dymek zrobiony samym CSS na :hover zamyka się, gdy tylko kursor opuści element wywołujący, więc nie da się na niego najechać ani przeczytać go przy dużym powiększeniu.
  • Własny dymek zasłania sąsiedni tekst, a Escape nic nie robi, więc jedynym sposobem na pozbycie się go jest odsunięcie kursora.
  • Kilkupikselowa przerwa między przyciskiem menu a podmenu sprawia, że podmenu zamyka się, gdy kursor przez nią przechodzi.
  • Podpowiedź znika po krótkiej chwili sama, na timerze, bez względu na to, czy czytelnik skończył czytać.
  • Dymek otwiera się tylko po najechaniu myszą i nigdy po fokusie z klawiatury, przez co osoby korzystające z klawiatury go nie dostają, a strona nie spełnia też kryterium 2.1.1.

/ Jak sprawdzić samodzielnie

  1. Najedź kursorem na każdą kontrolkę, która pokazuje dymek, podmenu albo wyskakujący panel, a potem przesuń kursor z niej na nową treść. Treść ma przez cały czas zostać otwarta.
  2. Gdy treść jest widoczna, naciśnij Escape, nie ruszając kursora. Powinna się zamknąć, chyba że niczego nie zasłania albo informuje o błędzie w polu.
  3. Przejdź do tych samych kontrolek klawiszem Tab i sprawdź, czy ta sama treść pojawia się po fokusie i zostaje, dopóki nie przejdziesz dalej albo nie naciśniesz Escape.
  4. Zostaw kursor w miejscu na dłuższą chwilę i sprawdź, czy treść nie zamyka się sama. Powtórz całość przy powiększonym widoku przeglądarki, gdzie dymek łatwiej zasłania inną treść.

/ Jak to naprawić

  • Dodaj obsługę zdarzenia keydown dla klawisza Escape, która ukrywa dymek i zostawia fokus na elemencie wywołującym.
  • Ustaw dymek tak, by stykał się z elementem wywołującym, i trzymaj go otwartego, dopóki :hover pasuje do tego elementu albo do samego dymka. Wtedy kursor może na niego przejść.
  • Pokazuj treść także po fokusie, a nie tylko po najechaniu (zdarzenia focus i blur albo :focus-visible i :focus-within w CSS), i powiąż ją z elementem wywołującym przez aria-describedby oraz role="tooltip".
  • Usuń każdy setTimeout, który chowa treść. Zamykaj ją tylko po zdarzeniu mouseleave, blur, po Escape albo wtedy, gdy informacja przestaje być prawdziwa.
  • Dla wszystkiego, co jest dłuższe niż krótka podpowiedź albo zawiera linki, użyj przycisku, który rozwija i zwija treść, zamiast panelu pokazywanego po najechaniu.

/ Co sprawdza nasz skaner

Nasz test tooltip-hover-only wyszukuje elementy z role="tooltip" albo z nazwą klasy zawierającą słowo tooltip. Zgłasza taki element, gdy żadna kontrolka nie wskazuje na niego przez aria-describedby, a element obok niego nie przyjmuje fokusu z klawiatury. Test na nic nie najeżdża kursorem, więc nie wie, czy dymek da się zamknąć klawiszem Escape, wskazać kursorem i czy zostaje otwarty. Te trzy warunki trzeba sprawdzić ręcznie.

/ Kto je łamie, według naszych pomiarów

Zmierzone podmioty łamiące to kryterium, najwięcej wystąpień na górze
PodmiotSektorWystąpieniaWynik
Warszawacity · PL4920
Bydgoszczcity · PL427
Düsseldorfcity · DE409
Zielona Góracity · PL397
Hamburgcity · DE3423
Radomcity · PL262
Wrocławcity · PL192
Politechnika Łódzkaeducation · PL185
Lublincity · PL1617
Politechnika Wrocławskaeducation · PL1417
Stuttgartcity · DE136
Policjagovernment · PL1112
Trybunał Konstytucyjnygovernment · PL614
San Diegocity · US263
Houstoncity · US17
PKP Intercitytransport · PL12
State of Washingtongovernment · US19

Jedna strona na podmiot, mierzona automatycznie w tygodniowym cyklu. Jeśli podmiot coś naprawił od ostatniego pomiaru, zmiana będzie widoczna przy następnym, a każdy podmiot może odpowiedzieć na swojej stronie.

/ Pytania o to kryterium

Czy atrybut title narusza kryterium 1.4.13?

Nie. Kryterium wyłącza treść, której wygląd kontroluje przeglądarka i której autor nie zmienił, a natywny dymek z atrybutu title jest tu podręcznikowym przykładem. Nie znaczy to, że title jest dobrym wyborem: przeglądarki pokazują go tylko po najechaniu myszą, więc osoby korzystające z klawiatury i ekranu dotykowego nigdy go nie widzą. Ważna informacja powinna być widocznym tekstem.

Czy dymek musi się zamykać klawiszem Escape?

Kryterium wymaga sposobu zamknięcia treści bez przesuwania kursora i fokusu, a Escape jest zwyczajowym sposobem, by go zapewnić. Zamykanie nie jest wymagane, gdy treść informuje o błędzie w polu albo niczego na stronie nie zasłania ani nie zastępuje. Dymek, który pojawia się nad pustym tłem, spełnia więc kryterium także bez takiej możliwości.

Czy 1.4.13 dotyczy menu i paneli otwieranych kliknięciem?

Nie. Kryterium dotyczy treści, która pojawia się po najechaniu kursorem albo po otrzymaniu fokusu z klawiatury i znika, gdy kursor lub fokus odchodzi. Menu albo okno dialogowe otwierane kliknięciem, dotknięciem lub klawiszem Enter jest poza jego zakresem. Podmenu nawigacji, które rozwija się po najechaniu kursorem, już do niego należy.