Skip to content

<nav> - Navigation Element

Landmark HTML5

The <nav> element represents a section of a page that contains navigation links, either to other pages or to parts within the current page. Not all groups of links need to be in a <nav> element—only sections that consist of major navigation blocks are appropriate for this element.

Result
<nav>
<!-- Navigation links -->
</nav>

The <nav> element has no element-specific attributes.

This element supports all global attributes.

The most common use is for the main site navigation menu:

Result

A navigation menu with dropdown submenus:

Result

Breadcrumbs showing the user’s location in the site hierarchy:

Result

Navigation for jumping to different sections of a long document:

Result

Secondary navigation in the footer:

Result

Navigation for multi-page content:

Result

Responsive navigation with hamburger menu:

Result

When you have multiple <nav> elements, use aria-label or aria-labelledby to distinguish them:

<!-- Good: Labeled navigation -->
<nav aria-label="Primary">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
<nav aria-label="Footer">
<ul>
<li><a href="/privacy">Privacy</a></li>
<li><a href="/terms">Terms</a></li>
</ul>
</nav>
<!-- Or use aria-labelledby -->
<nav aria-labelledby="primary-nav-heading">
<h2 id="primary-nav-heading">Main Menu</h2>
<ul>...</ul>
</nav>

Not every group of links needs to be in a <nav> element:

<!-- Good: Major navigation blocks only -->
<nav aria-label="Primary">
<a href="/">Home</a>
<a href="/products">Products</a>
</nav>
<main>
<p>Visit our <a href="/store">store</a> or <a href="/support">support</a> pages.</p>
<!-- Inline links don't need <nav> -->
</main>
<footer>
<p>&copy; 2025 | <a href="/privacy">Privacy</a> | <a href="/terms">Terms</a></p>
<!-- Simple footer links may not need <nav> -->
</footer>
<!-- Use <nav> for substantial link groups -->
<footer>
<nav aria-label="Footer">
<ul>
<li><a href="/about">About</a></li>
<li><a href="/careers">Careers</a></li>
<li><a href="/press">Press</a></li>
<li><a href="/privacy">Privacy</a></li>
</ul>
</nav>
</footer>

Structure navigation links with lists for better accessibility:

<!-- Good: List structure -->
<nav aria-label="Primary">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</nav>
<!-- Acceptable but less semantic -->
<nav aria-label="Primary">
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/contact">Contact</a>
</nav>

Mark the current page in navigation:

<nav aria-label="Primary">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about" aria-current="page">About</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</nav>

The <nav> element creates a navigation landmark that assistive technologies can identify and navigate to:

<!-- Creates a navigation landmark -->
<nav aria-label="Primary navigation">
<ul>
<li><a href="/">Home</a></li>
</ul>
</nav>

Screen reader users can jump between navigation landmarks using keyboard shortcuts:

  • JAWS: ; key
  • NVDA: D key
  • VoiceOver: VO + U, then use arrow keys

Provide skip links for keyboard users to bypass navigation:

Result

Ensure all navigation items are keyboard accessible:

<nav aria-label="Primary">
<button aria-expanded="false" aria-controls="menu">
Menu
</button>
<ul id="menu" hidden>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
<script>
// Ensure Enter and Space keys work on buttons
// Ensure Escape closes menus
// Ensure Tab navigates through items
</script>

Use aria-current to indicate the current page or location:

<nav aria-label="Breadcrumb">
<ol>
<li><a href="/">Home</a></li>
<li><a href="/products">Products</a></li>
<li><a href="/products/laptops" aria-current="page">Laptops</a></li>
</ol>
</nav>

Values for aria-current:

  • page - Current page
  • step - Current step in a process
  • location - Current location in a hierarchy
  • date - Current date in a calendar
  • time - Current time
  • true - Current item in a set
BrowserVersion
Chrome5+
Firefox4+
Safari5+
EdgeAll versions
IE9+
<!-- Wrong: Nav for every group of links -->
<p>Check out our <nav><a href="/blog">blog</a></nav> for updates.</p>
<footer>
<nav>
<a href="/privacy">Privacy</a>
</nav>
</footer>
<!-- Correct: Nav for major navigation blocks -->
<nav aria-label="Primary">
<a href="/">Home</a>
<a href="/blog">Blog</a>
<a href="/contact">Contact</a>
</nav>
<p>Check out our <a href="/blog">blog</a> for updates.</p>
<footer>
<p><a href="/privacy">Privacy</a> | <a href="/terms">Terms</a></p>
</footer>
<!-- Wrong: Multiple navs without labels -->
<nav>
<a href="/">Home</a>
</nav>
<nav>
<a href="/privacy">Privacy</a>
</nav>
<!-- Correct: Label each nav -->
<nav aria-label="Primary">
<a href="/">Home</a>
</nav>
<nav aria-label="Footer">
<a href="/privacy">Privacy</a>
</nav>
<!-- Incomplete: No current page indicator -->
<nav>
<a href="/">Home</a>
<a href="/about">About</a>
</nav>
<!-- Better: Mark current page -->
<nav>
<a href="/">Home</a>
<a href="/about" aria-current="page">About</a>
</nav>