Nested aria-hidden
Silktide checks for content marked as visible to inside a container that is marked as hidden from it. Hiding wins: the inner marking has no effect, and the content remains hidden.
<!-- Problem: the paragraph stays hidden despite aria-hidden="false" -->
<div aria-hidden="true">
<p aria-hidden="false">Important content</p>
</div>
Why this matters
When an element has aria-hidden="true", everything inside it is removed
from the . The
standard provides no way for a descendant to
opt back in - aria-hidden="false" inside a hidden container simply does
nothing. Authors who use this pattern believe they have re-exposed the inner
content, so the result is content that sighted users can see but
users cannot reach, with
nobody aware of the gap.
How to fix it
- Restructure the markup so the content that should be exposed is not inside the hidden container - move it out to be a sibling instead of a descendant.
- If everything inside the container should actually be available, remove
the
aria-hidden="true"from the ancestor. - Never rely on
aria-hidden="false"to undo an ancestor's hidden state; once the fix is made, the inner attribute can usually be deleted too.
How Silktide tests this
- Find every element on the page with
aria-hidden="false". - Walk up its ancestors looking for any element with
aria-hidden="true". - Report each element whose
aria-hidden="false"is trapped inside a hidden ancestor.
Troubleshooting
A script toggles the ancestor's aria-hidden
Silktide tests the page as it loads. If the hidden state only exists
momentarily before a script removes it, the finding reflects that initial
state - but note that assistive-technology users on slow connections
experience that state too, and the nested aria-hidden="false" still does
nothing while it lasts.
This check reports nothing even though I expect findings
ARIA testing can be turned off per website. Check the advanced settings for the website.