Accessible Navigation Menu
Accessible Navigation Menu
Accessible navigation menus enable all users to understand and use site navigation regardless of how they interact with the interface. Proper navigation accessibility combines semantic structure, keyboard support, and clear current page indication.
What Is an Accessible Navigation Menu
Navigation menus present links to different sections or pages of a website or application. Accessible navigation uses proper semantic markup, allows keyboard operation, communicates current location, and supports assistive technology navigation commands.
Unlike action menus (which use role=“menu”), navigation menus typically use standard list and link markup. The nav element wraps the navigation, providing a landmark. Links within use the standard anchor element for expected link behavior.
WCAG requirements for navigation include keyboard operability (2.1.1), multiple ways to navigate (2.4.5 for AA), location indication (2.4.8 for AAA), and consistent navigation (3.2.3). Design systems address these through navigation component patterns.
How Accessible Navigation Menus Work
Semantic structure uses the nav element to create a navigation landmark. Screen readers can jump directly to navigation landmarks, making them easily discoverable. The nav element wraps an unordered list of links:
The structure provides meaning to assistive technologies. Screen readers announce “navigation” when entering the region. The list structure helps users understand how many items exist and their position within the list.
Keyboard navigation for simple navigation uses standard Tab behavior. Each link receives focus in sequence. This differs from menu pattern navigation (which uses arrow keys) because navigation links benefit from standard link behavior.
Current page indication uses aria-current=“page” on the link to the current page. Screen readers announce “current page” alongside the link text. Visual styling should also distinguish the current page link.
Multiple navigation regions need unique labels. Primary and secondary navigations should have accessible names via aria-label or aria-labelledby: “Primary navigation” and “Secondary navigation” help users distinguish landmarks.
Key Considerations
- Wrap navigation in nav element for landmark accessibility
- Use unordered list with list items containing links
- Apply aria-current=“page” to the current page link
- Label multiple navigation regions distinctly
- Maintain consistent navigation order across pages
- Ensure all links have meaningful, unique text
- Provide visible focus indication on navigation links
Common Questions
Should navigation menus use the menu role?
Generally, navigation menus should not use role=“menu”. The menu role is for action menus (like right-click context menus) and implies specific keyboard behavior (arrow key navigation).
Navigation menus are lists of links and should use standard list markup. The nav element with ul/li/a structure provides appropriate semantics. Screen readers handle this common pattern well, and users get expected link behaviors.
How should dropdown navigation work?
Dropdown or flyout navigation that reveals submenus on hover or click adds complexity. The triggering element needs aria-expanded to indicate submenu state. Keyboard access typically uses Enter or arrow keys to expand.
Submenus can use nested lists within the parent list item. When expanded, keyboard focus should move into the submenu. Escape or clicking away should collapse submenus and return focus appropriately.
How can current location be indicated accessibly?
aria-current=“page” provides programmatic current page indication. Screen readers announce this state. The attribute can also take values like “step” (in a process), “location” (in a breadcrumb), or “date” (in a calendar).
Visual indication should accompany aria-current. Different styling (underline, background color, icon) helps sighted users identify current location. The combination of visual and programmatic indication serves all users.
Summary
Accessible navigation menus use nav landmarks, list-based structure, and aria-current for current page indication. Standard link behavior enables keyboard navigation. Distinct labels differentiate multiple navigation regions. This semantic approach provides robust navigation support across browsers and assistive technologies.
Buoy scans your codebase for design system inconsistencies before they ship
Detect Design Drift Free