TechnicalIntermediate

aria-describedby

aria-describedby is an ARIA attribute that links an element to one or more other elements that provide additional descriptive text, giving assistive technology users supplementary context beyond the element's accessible name.

In simple terms: aria-describedby is like a footnote. The main name of something tells you what it is, and aria-describedby adds extra helpful details, like 'password must be at least 8 characters' next to a password box.

What Is aria-describedby?

`aria-describedby` is a WAI-ARIA attribute that creates a relationship between an element and one or more other elements that contain descriptive text. Unlike `aria-label`, which sets the accessible name, `aria-describedby` provides supplementary information that helps users understand context, requirements, or additional details about the element. When a screen reader encounters an element with `aria-describedby`, it first announces the element's name and role, then after a brief pause, announces the content of the referenced description elements. This two-tier announcement gives users the essential information immediately and additional context right after. The attribute works by referencing the `id` attribute of the describing element. Multiple descriptions can be referenced using a space-separated list of IDs, and their content will be concatenated in order.

Why It Matters

Many interface elements need more context than a simple name can provide. A password input labeled "Password" is clear enough, but users also need to know the requirements: minimum length, required character types, and other constraints. A delete button needs the user to understand what they are about to delete and that the action is permanent. `aria-describedby` bridges this gap by associating supplementary instructions, warnings, error messages, or contextual information with the relevant interface element. Without it, screen reader users must hunt through surrounding content to find these details, assuming they realize the details exist at all. WCAG Success Criterion 3.3.2 (Labels or Instructions) requires that labels or instructions are provided when content requires user input. While labels handle the "what" question, `aria-describedby` often handles the "how" by connecting instructions to the fields they apply to. Criterion 1.3.1 (Info and Relationships) requires that information and relationships conveyed visually are also available programmatically, which `aria-describedby` directly supports.

How It Works

The basic pattern connects an element to a description using `id` references: ```html <label for="email">Email Address</label> <input type="email" id="email" aria-describedby="email-hint"> <p id="email-hint">We'll never share your email with third parties.</p> ``` In this example, a screen reader announces: "Email Address, edit text. We'll never share your email with third parties." **Multiple descriptions** can be combined: ```html <label for="password">Password</label> <input type="password" id="password" aria-describedby="pw-req pw-error"> <p id="pw-req">Must be at least 8 characters with one number.</p> <p id="pw-error" class="error">Password is too short.</p> ``` The screen reader reads both descriptions in order, giving the user requirements and the current error state. **Common use cases include:** - **Form field instructions.** Help text, format requirements, and character limits associated with input fields. - **Error messages.** Validation errors linked to the field that caused them, so users hear the error when they navigate to the problematic field. - **Tooltips and additional context.** Supplementary information that appears on hover or focus. - **Confirmation dialogs.** Descriptive text explaining the consequences of an action, linked to the action button. - **Group descriptions.** Additional context for a group of related controls. **Important technical details:** The referenced elements can be visually hidden using CSS and the description will still be read by screen readers. This is useful when descriptive text would clutter the visual interface. However, if the referenced element has `aria-hidden="true"`, the description will not be read. ```html <!-- Visually hidden description still works --> <button aria-describedby="delete-desc">Delete</button> <p id="delete-desc" class="visually-hidden"> This will permanently delete the file and cannot be undone. </p> ``` `aria-describedby` differs from `aria-details`, which was introduced in ARIA 1.2. While `aria-describedby` expects a flat text description that screen readers can read aloud, `aria-details` references structured content like tables or lists that users may want to navigate into. Be mindful that not all screen readers handle `aria-describedby` identically. Some announce descriptions automatically, while others require users to request additional information with a keyboard shortcut. Testing across multiple screen readers ensures your implementation works broadly.

Frequently Asked Questions

What is the difference between aria-label and aria-describedby?
aria-label provides the accessible name (what something is), while aria-describedby provides a description (additional context about it). Screen readers announce the name first, then the description after a brief pause. The name is essential; the description is supplementary.
Can aria-describedby reference multiple elements?
Yes. You can provide a space-separated list of element IDs, and the descriptions will be concatenated in the order listed. For example, aria-describedby='hint1 hint2' will read both referenced elements together.
Does the referenced element need to be visible?
The referenced element can be hidden with CSS (display:none or visibility:hidden) and aria-describedby will still work. However, it will not work if the referenced element is hidden with aria-hidden='true'.

Need help making your website ADA compliant?

Our team specializes in ADA-compliant web design and remediation. Get a free accessibility audit today.

Last updated: 2026-03-15