What is aria-hidden?
The aria-hidden attribute is part of WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications). When applied with the value "true", it removes an element and all its descendants from the accessibility tree used by assistive technologies like screen readers.
Crucially, aria-hidden does not affect visual rendering. Elements remain visible on the page--they are simply ignored by screen readers and other assistive technologies.
The Accessibility Tree vs the DOM
- DOM (Document Object Model) - The complete HTML structure as rendered by the browser
- Accessibility Tree - A subset of the DOM that assistive technologies interact with
When you add aria-hidden="true" to an element, you're removing it from the accessibility tree, telling assistive technologies "this element doesn't exist for your users."
Understanding this distinction is fundamental to building accessible web applications. The htmlhtmlelement resource covers how browsers construct these structures, while our web-development services ensure your applications meet accessibility standards from the ground up.
1<!-- aria-hidden="true" - Completely hidden from assistive technology -->2<div aria-hidden="true">3 This content is invisible to screen readers.4</div>5 6<!-- aria-hidden="false" - Explicitly exposed to assistive technology -->7<div aria-hidden="false">8 This content is available to screen readers.9</div>10 11<!-- aria-hidden (no value) - Browser determines visibility -->12<div aria-hidden>13 Visibility depends on rendering state.14</div>When to Use aria-hidden
Decorative Elements and Icons
The most common use case is hiding purely decorative elements that don't convey meaningful content:
<!-- Decorative icon - hidden from screen readers -->
<button aria-label="Search">
<svg aria-hidden="true" width="24" height="24">
<circle cx="11" cy="11" r="8"/>
</svg>
</button>
The icon is purely decorative--the aria-label provides the accessible name. Adding aria-hidden="true" prevents screen readers from announcing "graphic" unnecessarily.
Duplicated Content
When the same content appears multiple times, hiding the duplicate prevents confusion:
<div class="logo">
<img src="logo.svg" alt="Company Name">
<span aria-hidden="true">Company Name</span>
</div>
Off-Screen or Collapsed Content
Content that is visually hidden but present in the DOM should be hidden from assistive technology:
// When opening a modal
modal.setAttribute('aria-hidden', 'false');
modal.focus();
Interactive patterns like modals often involve multiple ARIA attributes working together. The web-share resource covers additional interaction patterns that benefit from proper accessibility implementation.
| Technique | Visually Hidden | Accessibility Tree | Preserves Space |
|---|---|---|---|
| aria-hidden="true" | No | Removed | Yes |
| display: none | Yes | Removed | No |
| visibility: hidden | Yes | Present | Yes |
| opacity: 0 | Yes | Present | Yes |
Common Mistakes to Avoid
Never Hide Focusable Elements
The most serious mistake is applying aria-hidden="true" to elements that can receive keyboard focus. This creates a significant accessibility barrier:
- A keyboard user can tab into the element
- The screen reader announces nothing (because it's hidden)
- The user is confused about where they are
- Navigation becomes impossible
This creates a keyboard trap--a major accessibility failure.
aria-hidden is Inherited
The attribute is inherited by all descendants. Adding aria-hidden="true" to a container hides everything inside, even elements with aria-hidden="false":
<!-- The child is still hidden because parent has aria-hidden="true" -->
<div aria-hidden="true">
<span aria-hidden="false">This is still hidden</span>
</div>
Don't Use aria-hidden for Security
Never use aria-hidden as a security measure. The hidden content remains in the DOM and accessible through other means.
Understanding DOM interactions is key to avoiding these pitfalls. The closure resource explores how JavaScript scope affects accessibility implementations, while requestdevice covers additional browser APIs that interact with accessibility features.
JavaScript and aria-hidden
Setting and Getting aria-hidden
// Hide an element
element.setAttribute('aria-hidden', 'true');
// Show an element
element.setAttribute('aria-hidden', 'false');
// Using the IDL property (modern browsers)
element.ariaHidden = "true";
element.ariaHidden = "false";
// Check current state
const isHidden = element.getAttribute('aria-hidden') === 'true';
Practical Example: Modal Dialog
function openModal(modal) {
// Hide the main content from screen readers
document.getElementById('main-content').setAttribute('aria-hidden', 'true');
// Show the modal
modal.setAttribute('aria-hidden', 'false');
modal.focus();
}
function closeModal(modal) {
// Hide the modal
modal.setAttribute('aria-hidden', 'true');
// Restore main content
document.getElementById('main-content').setAttribute('aria-hidden', 'false');
// Return focus to the trigger element
document.getElementById('modal-trigger').focus();
}
Dynamic interactions like these are central to modern web development. Our team builds JavaScript-powered interfaces that prioritize accessibility, ensuring all users can navigate effectively regardless of their assistive technology needs.
Guidelines for using aria-hidden correctly
Do Hide Decorative Content
Use aria-hidden for purely decorative elements like icons, ornamental graphics, and visual flourishes that don't convey meaningful information.
Don't Hide Focusable Elements
Never apply aria-hidden to buttons, links, inputs, or any interactive element. This creates keyboard traps for assistive technology users.
Test with Screen Readers
Automated tools catch some issues, but manual testing with NVDA, JAWS, VoiceOver, or TalkBack is essential to verify correct behavior.
Prefer Native HTML
The First Rule of ARIA states: use native HTML when possible. aria-hidden supplements semantic HTML--it doesn't replace it.
Testing aria-hidden Implementation
Automated Testing
Accessibility tools like axe, WAVE, and Lighthouse will flag:
- Focusable elements inside aria-hidden containers
- Redundant aria-hidden attributes on already-hidden elements
Manual Testing with Screen Readers
The only way to truly verify your implementation is to test with actual assistive technology:
| Tool | Platform | Cost |
|---|---|---|
| NVDA | Windows | Free |
| JAWS | Windows | Commercial |
| VoiceOver | macOS/iOS | Free |
| TalkBack | Android | Free |
When testing:
- Navigate by tab and by quick navigation (H for headings, K for links)
- Listen for unexpected announcements or missing content
- Verify that hidden content is not announced
Comprehensive testing is part of our web development methodology, ensuring every project meets WCAG accessibility guidelines. The statustext resource covers additional accessibility states that screen readers announce to users.
Related Attributes and Alternatives
role="presentation" and role="none"
These roles remove semantic meaning while keeping content accessible:
<!-- Remove semantic meaning of the table -->
<table role="presentation">
<tr><td>Data that is purely visual</td></tr>
</table>
The hidden HTML Attribute
The native HTML hidden attribute provides semantic hiding:
<!-- Hidden from both visual and accessibility tree -->
<div hidden>This content is hidden from everyone</div>
Inert Attribute
The newer inert attribute disables an element and all descendants:
<!-- Check browser support before using -->
<div inert>This content and all descendants are inert</div>
For additional accessibility patterns, the htmltableelement resource covers semantic table markup, while filereadersync explores file handling with proper accessibility considerations.
Frequently Asked Questions
Conclusion
The aria-hidden attribute is a powerful tool for managing what assistive technology users experience, but it must be used carefully:
Key Takeaways:
- aria-hidden affects only the accessibility tree, not visual appearance
- Never hide focusable elements--this creates keyboard traps
- Use it for decorative content, not meaningful content
- Test with screen readers to verify your implementation
- Prefer native HTML when possible--ARIA supplements, doesn't replace
When used correctly, aria-hidden helps create a cleaner experience for assistive technology users by removing unnecessary noise. When used incorrectly, it creates barriers that can completely break navigation for screen reader users.
Building accessible web experiences requires attention to detail across all aspects of development. Our web development services ensure your digital products work for everyone, while our SEO services help search engines understand your accessible markup.