Command Palette

Search for a command to run...

Navigation Menu

A responsive navigation menu with flyout submenus for desktop and mobile devices.

Installation

npm i @radix-ui/react-navigation-menu

Usage

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, navigationMenuTriggerStyle, } from "@/components/ui/navigation-menu" import { cn } from "@/lib/utils" import Link from "next/link" export function NavigationMenuDemo() { return ( <NavigationMenu> <NavigationMenuList> <NavigationMenuItem> <NavigationMenuTrigger>Getting Started</NavigationMenuTrigger> <NavigationMenuContent> <ul className="grid gap-3 p-4 md:w-[400px] lg:w-[500px] lg:grid-cols-[.75fr_1fr]"> <li className="row-span-3"> <NavigationMenuLink asChild> <a className="flex h-full w-full select-none flex-col justify-end rounded-md bg-gradient-to-b from-muted/50 to-muted p-6 no-underline outline-none focus:shadow-md" href="/" > <div className="mb-2 mt-4 text-lg font-medium"> shadcn/ui </div> <p className="text-sm leading-tight text-muted-foreground"> Beautifully designed components built with Radix UI and Tailwind CSS. </p> </a> </NavigationMenuLink> </li> <ListItem href="/docs" title="Introduction"> Re-usable components built using Radix UI and Tailwind CSS. </ListItem> <ListItem href="/docs/installation" title="Installation"> How to install dependencies and structure your app. </ListItem> <ListItem href="/docs/primitives/typography" title="Typography"> Styles for headings, paragraphs, lists...etc </ListItem> </ul> </NavigationMenuContent> </NavigationMenuItem> <NavigationMenuItem> <NavigationMenuTrigger>Components</NavigationMenuTrigger> <NavigationMenuContent> <ul className="grid w-[400px] gap-3 p-4 md:w-[500px] md:grid-cols-2 lg:w-[600px]"> {components.map((component) => ( <ListItem key={component.title} title={component.title} href={component.href} > {component.description} </ListItem> ))} </ul> </NavigationMenuContent> </NavigationMenuItem> <NavigationMenuItem> <Link href="/docs" legacyBehavior passHref> <NavigationMenuLink className={navigationMenuTriggerStyle()}> Documentation </NavigationMenuLink> </Link> </NavigationMenuItem> </NavigationMenuList> </NavigationMenu> ) } const ListItem = React.forwardRef< React.ElementRef<"a">, React.ComponentPropsWithoutRef<"a"> >(({ className, title, children, ...props }, ref) => { return ( <li> <NavigationMenuLink asChild> <a ref={ref} className={cn( "block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground", className )} {...props} > <div className="text-sm font-medium leading-none">{title}</div> <p className="line-clamp-2 text-sm leading-snug text-muted-foreground"> {children} </p> </a> </NavigationMenuLink> </li> ) }) ListItem.displayName = "ListItem" const components = [ { title: "Alert Dialog", href: "/docs/primitives/alert-dialog", description: "A modal dialog that interrupts the user with important content and expects a response.", }, { title: "Hover Card", href: "/docs/primitives/hover-card", description: "For sighted users to preview content available behind a link.", }, { title: "Progress", href: "/docs/primitives/progress", description: "Displays an indicator showing the completion progress of a task.", }, { title: "Scroll-area", href: "/docs/primitives/scroll-area", description: "Visually or semantically separates content.", }, { title: "Tabs", href: "/docs/primitives/tabs", description: "A set of layered sections of content—known as tab panels—that are displayed one at a time.", }, { title: "Tooltip", href: "/docs/primitives/tooltip", description: "A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.", }, ]

Examples

Mobile Navigation

With Custom Indicator

Props

ComponentPropsDescription
NavigationMenuNavigationMenuPrimitive.NavigationMenuProps
orientation?: "horizontal" | "vertical"
dir?: "ltr" | "rtl"
The root component of the navigation menu.
NavigationMenuListNavigationMenuPrimitive.NavigationMenuListPropsThe container for navigation menu items.
NavigationMenuItemNavigationMenuPrimitive.NavigationMenuItemPropsA navigation menu item.
NavigationMenuTriggerNavigationMenuPrimitive.NavigationMenuTriggerPropsThe trigger for a submenu.
NavigationMenuContentNavigationMenuPrimitive.NavigationMenuContentProps
forceMount?: boolean
The content displayed when the menu item is triggered.
NavigationMenuLinkNavigationMenuPrimitive.NavigationMenuLinkProps
asChild?: boolean
A link item within the navigation menu.
NavigationMenuViewportNavigationMenuPrimitive.NavigationMenuViewportPropsThe viewport for the navigation menu content.
NavigationMenuIndicatorNavigationMenuPrimitive.NavigationMenuIndicatorPropsThe indicator showing the active menu item.
navigationMenuTriggerStyleFunctionA utility function that returns the default trigger style class.