Zagnieżdżone aria-hidden
Silktide sprawdza treści oznaczone jako widoczne dla , które znajdują się wewnątrz kontenera oznaczonego jako ukryty przed nimi. Ukrycie ma pierwszeństwo: wewnętrzne oznaczenie nie ma wpływu, a treść pozostaje ukryta.
<!-- Problem: akapit pozostaje ukryty mimo aria-hidden="false" -->
<div aria-hidden="true">
<p aria-hidden="false">Ważna treść</p>
</div>
Dlaczego to ważne
Gdy element ma aria-hidden="true", wszystko wewnątrz niego jest usuwane z . Standard nie zapewnia sposobu, aby element potomny mógł ponownie się w nim znaleźć — aria-hidden="false" wewnątrz ukrytego kontenera po prostu nic nie robi. Autorzy stosujący ten wzorzec sądzą, że ponownie udostępnili wewnętrzną treść, w rezultacie czego użytkownicy widzący ją widzą, ale użytkownicy nie mogą do niej dotrzeć, a nikt nie jest świadomy tej luki.
Jak to naprawić
- Zmień strukturę znaczników tak, aby treść, która powinna być udostępniona, nie znajdowała się wewnątrz ukrytego kontenera — przenieś ją na zewnątrz, aby była elementem równorzędnym, a nie potomnym.
- Jeśli wszystko wewnątrz kontenera powinno być dostępne, usuń
aria-hidden="true"z elementu nadrzędnego. - Nigdy nie polegaj na
aria-hidden="false", aby cofnąć stan ukrycia elementu nadrzędnego; po wprowadzeniu poprawki można zwykle usunąć także wewnętrzny atrybut.
Jak Silktide to testuje
- Znajduje każdy element na stronie z
aria-hidden="false". - Przechodzi w górę przez jego elementy nadrzędne, szukając dowolnego elementu z
aria-hidden="true". - Zgłasza każdy element, którego
aria-hidden="false"znajduje się wewnątrz ukrytego elementu nadrzędnego.
Rozwiązywanie problemów
Skrypt przełącza aria-hidden elementu nadrzędnego
Silktide testuje stronę podczas jej ładowania. Jeśli stan ukrycia występuje tylko chwilowo, zanim skrypt go usunie, wynik odzwierciedla ten początkowy stan — należy jednak pamiętać, że użytkownicy technologii wspomagających korzystający z wolnych połączeń również go doświadczają, a zagnieżdżone aria-hidden="false" nadal nic nie robi, dopóki ten stan trwa.