When a Control Needs aria-label
aria-label can give an icon button a name. It can also replace good visible text with a different name, making one control mean different things to different users.
I begin with native HTML and visible text. ARIA should fill a real gap, not decorate every element.
An icon button needs a name
<button aria-label="Close">
<svg aria-hidden="true">...</svg>
</button>
The X icon has no reliable text name. aria-label="Close" names the button, while aria-hidden keeps the decorative SVG quiet.
If the button already contains text, use it:
<button>Close</button>
Prefer a visible form label
This technically names an input:
<input type="email" aria-label="Email address">
A visible label helps everyone:
<label for="email">Email address</label>
<input id="email" type="email">
A compact search field may reasonably use aria-label="Search website" when no visible label fits. That exception is not a reason to hide every form label.
Match what the control says on screen
This name remains close to the visible action:
<button aria-label="Delete account">Delete</button>
This does not:
<button aria-label="Send newsletter">Continue</button>
If useful text already exists elsewhere, reference it instead of copying it:
<h2 id="dialog-title">Delete project?</h2>
<div role="dialog" aria-labelledby="dialog-title">...</div>
ARIA does not create native behaviour
Avoid rebuilding a button:
<div role="button" aria-label="Save"></div>
when HTML already has one:
<button>Save</button>
Several navigation regions can benefit from distinct names:
<nav aria-label="Main">...</nav>
<nav aria-label="Footer">...</nav>
One obvious navigation landmark may need no extra label. Context matters.
Use aria-label when a control genuinely lacks a useful name. If the page already says clearly what it is, let the HTML speak for itself.
Filed under Accessibility and HTML on
Enjoyed this article?
If you found it useful, share it with a friend or someone who might find it helpful too. Thanks for reading!
Related articles
- Finding Hidden Content With hidden="until-found"
Let Find in Page and fragment navigation reveal collapsed content with hidden=until-found, while keeping a usable fallback.
- The HTML Details That Make Forms More Accessible
Build clearer forms with visible labels, autocomplete, connected help and errors, fieldsets, and visible focus.
- When CSS Layout Order Stops Matching the HTML
Keep Grid and Flexbox layouts aligned with the HTML order so keyboard focus and screen reader reading do not jump around the page.