aria-current
Marks the element that represents the current item in a set — the active page in a nav, the current step in a wizard, today in a date picker. More specific than aria-selected; use it on links and on items where selection isn't the right metaphor.
When to use
On the one item that represents “where you are” within a set of related items. The classic case is the active link in a primary navigation: a screen reader announces “Pricing, current page, link”, and sighted users see a highlighted item that matches.
Other common cases:
- The current step in a multi-step form or wizard (
aria-current="step"). - Today’s date in a calendar grid (
aria-current="date"). - The active breadcrumb (
aria-current="page"). - The currently-playing item in a media playlist (
aria-current="true").
How it differs from related states:
aria-current— “you are here” inside a navigation or set of items. Used on links and similar widgets that aren’t selection-based.aria-selected— selection inside a select-style container (tablist, listbox, tree, grid). Selection is something the user changes.aria-pressed— toggle button. The button itself is on or off.aria-checked— checkbox or radio. Independent choice.
How to keep it in sync
Valid values: "page", "step", "location", "date", "time", "true", "false". Pick the most specific token — "page" for nav links, "step" for wizards, "date" for calendars. "true" is the generic fall-back when none of the others fit. "false" (the default) means “not current”; usually you just omit the attribute on non-current items.
In a navigation menu, exactly one link should carry aria-current at any time. Update it client-side when the route changes; server-rendered pages can render it directly in the HTML.
Style the current item visually so sighted users see the same cue. A common pattern is [aria-current="page"] { font-weight: 600; }.
Common failures
- Using
aria-current="true"on every navigation link, or on none of them. - Using
aria-selectedon a navigation link — wrong semantic; the link is not a selectable option. - Forgetting to update
aria-currentafter client-side route changes in a single-page app. - Styling the active state with CSS but never setting
aria-current. Screen readers announce nothing distinguishing. - Using
aria-current="page"on a button that isn’t a navigation link. - Setting
aria-currenton the<nav>container instead of the individual link.
Example
<nav aria-label="Primary">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/pricing" aria-current="page">Pricing</a></li>
<li><a href="/docs">Docs</a></li>
</ul>
</nav>