Skip to content

Navigation Menu

Site navigation with dropdown panels of links.

  • Actions: use Dropdown Menu.
  • App navigation in a column: use Sidebar.

Install

Terminal
pnpm dlx shadcn@latest add @acme/navigation-menu

Or import from the package: import { NavigationMenu } from '@acme/react'

Examples

Menu basic

navigation-menu-basic.tsx
'use client'

import {
  NavigationMenu,
  NavigationMenuContent,
  NavigationMenuItem,
  NavigationMenuLink,
  NavigationMenuList,
  NavigationMenuTopLink,
  NavigationMenuTrigger,
} from '@/components/ui/navigation-menu'

export default function NavigationMenuBasic() {
  return (
    <NavigationMenu aria-label="Product">
      <NavigationMenuList>
        <NavigationMenuItem>
          <NavigationMenuTrigger>Product</NavigationMenuTrigger>
          <NavigationMenuContent>
            <NavigationMenuLink href="#invoicing" description="Send and track invoices">
              Invoicing
            </NavigationMenuLink>
            <NavigationMenuLink href="#payments" description="Cards, bank transfers, payouts">
              Payments
            </NavigationMenuLink>
            <NavigationMenuLink href="#reports" description="Revenue and tax reports">
              Reports
            </NavigationMenuLink>
            <NavigationMenuLink href="#integrations" description="Accounting and CRM apps">
              Integrations
            </NavigationMenuLink>
          </NavigationMenuContent>
        </NavigationMenuItem>
        <NavigationMenuItem>
          <NavigationMenuTopLink href="#pricing">Pricing</NavigationMenuTopLink>
        </NavigationMenuItem>
      </NavigationMenuList>
    </NavigationMenu>
  )
}

Props

Navigation Menu props
PropTypeDefaultDescription
aria-labelstring—Names the navigation landmark.
NavigationMenuLink.descriptionstring—One line under a panel link.
NavigationMenuLink.hrefstring—Link target.

Accessibility

Keyboard
KeyAction
Enter / SpaceOpens a panel
TabMoves through panel links
EscapeCloses the panel and returns focus
Role
navigation with disclosure buttons
You provide
  • An aria-label when there is more than one navigation landmark.
Built in
  • Triggers expose aria-expanded.
  • Panel motion is removed under reduced motion.
WCAG 2.2 criteria
2.1.1, 2.4.3, 4.1.2

Don’t

  • Put actions or forms in a navigation panel.

Tokens

  • color.popover
  • color.accent
  • elevation.2
  • z.dropdown