Accessibility helpers enable inclusive web experiences. Use .visually-hidden
to hide content visually while keeping it accessible to screen readers, and
.visually-hidden-focusable for skip links that appear on focus.
Skip links help keyboard users bypass repetitive content. Use
.visually-hidden-focusable to show the link only when focused.
Place skip links as the first focusable element in the document.
Tab into this demo area to see the skip link appear.
Press Tab to reveal the skip link above.
Large applications may offer multiple skip destinations.
Tab to reveal multiple skip link options.
tabindex="-1" to skip targets
to ensure focus moves correctly when the skip link is activated.
<main id="main-content" tabindex="-1">...</main>
Use .visually-hidden to provide context for screen reader users
without affecting the visual layout. Essential for icon-only buttons, price formatting,
and hidden document structure.
Add hidden headings to improve navigation for screen reader users.
Lightning quick performance.
Enterprise-grade security.
Works on any device.
Provide accessible names for buttons that only display icons.
Add context to generic link text like "Read more" or "Learn more".
Make abbreviated content understandable for screen readers.
Icon-only buttons require accessible labels. Use .visually-hidden
spans or aria-label attributes to provide context.
Use role="group" and aria-label on the container.
Bootstrap's .btn-close uses aria-label by default.
Forms require careful attention to accessibility. Use visible labels when possible;
reserve .visually-hidden labels for compact layouts where context is clear.
Search fields often use placeholder text, but always include a proper label.
Provide clear required field indicators for both visual and screen reader users.
Associate error messages with inputs using aria-describedby
and aria-invalid.
Group related fields with <fieldset> and <legend>.
Use .visually-hidden-focusable on containers to show content
when any child element receives focus. Useful for toolbar panels and quick actions.
Tab into this section to reveal the hidden panel.
Live regions announce dynamic content changes to screen readers. Use
role="status" for non-urgent updates and role="alert"
for important announcements.
Use aria-live="polite" for updates that don't interrupt the user.
In production, wrap status in .visually-hidden if visual feedback
is provided elsewhere.
Use aria-live="assertive" for urgent announcements that interrupt.
Create hidden live regions for JavaScript-driven announcements.
<!-- Hidden status announcer -->
<div class="visually-hidden"
role="status"
aria-live="polite"
id="status-announcer">
<!-- Updated via JavaScript -->
</div>
<!-- Hidden alert announcer -->
<div class="visually-hidden"
role="alert"
aria-live="assertive"
id="alert-announcer">
<!-- Urgent announcements -->
</div>
Distinguish between decorative elements (hidden from assistive technology) and informative elements (described for screen readers).
Use empty alt="" and aria-hidden="true" for decorative images.
The decorative banner image above is hidden from screen readers.
When icons convey meaning, provide accessible labels.
When text describes the icon, hide the icon from assistive technology.
Combine visual indicators with screen reader context.
.visually-hidden for screen reader only content.visually-hidden-focusable for skip linksaria-hidden="true" to decorative iconsaria-describedbydisplay: none to hide content from screen readers (it hides from everyone)aria-live="assertive" (can be disruptive)