Navigation Menu
Overview
NavigationMenu is the Reka-UI-backed primitive for header-style nav with text-link triggers and content panels. It is a compound:
NavigationMenuis the root.NavigationMenuTextItem(andNavigationMenuTextItemWrapper) render top-level text links.NavigationMenuIconItemrenders icon-only top-level items.NavigationMenuContentColumn,ContentList,ContentLink,ContentHeadline, andContentSeparatorcompose the panel.
It is typically used inside HeaderBasic's desktop slot. The hover panel anchors to the trigger <li> with top: 100%; left: 0; z-index: var(--z-index-popover) so it sits naturally below the header rather than at a fixed pixel offset. Text-item surface tones are restricted to Exclude<SurfaceTone, 'bright'> because the triggers live on neutral header chrome.
Reach for NavigationMenu when the header needs simple text links with optional flyouts. For catalog-driven mega menus, use the dedicated MegaMenu compound instead.
Key Business & UX Benefits
- Compound parts (text items, icon items, content columns, headlines, separators) give marketing a kit to build editorial flyouts without bespoke header code per campaign.
- Hover panels anchor to the trigger position rather than fixed pixel offsets, so the menu still lines up when the header height or branding changes.
- Surface-tone constraints keep text triggers legible on every header treatment, protecting brand consistency on international and seasonal skins.
- Pairs cleanly with
MegaMenufor catalog-driven flows, so teams can grow from a simple link header to a full mega menu without swapping components mid-project.
Usage
Feature List
- Compound primitive: root plus `NavigationMenuTextItem`, `IconItem`, `ContentColumn`, `ContentList`, `ContentLink`, `ContentHeadline`, and `ContentSeparator`
- Hover panels anchor to the trigger `<li>` with `top: 100%; left: 0; z-index: var(--z-index-popover)`, so flyouts line up when header height changes
- Text-item `surfaceTone` typed as `Exclude<SurfaceTone, 'bright'>`, restricting triggers to the neutral header chrome they're designed for
- Typically used inside `HeaderBasic`'s desktop slot, so the same primitive backs every basic header
- Pairs with `MegaMenu` for catalog-driven flyouts, so teams can grow from simple links to a full mega menu without swapping components
- Built on reka-ui, so keyboard navigation, focus management, and ARIA semantics ship out of the box
API Reference
LNavigationMenu
| Prop | Default | Type |
|---|---|---|
as | string | |
surfaceTone | light | SurfaceTone ("dark" | "light" | "bright") |
value | string |
| Slot | Type |
|---|---|
default | {} |
| Event | Type |
|---|---|
select | (event: "select", value: string): void |
update:value | (event: "update:value", value: string): void |
LNavigationMenuContentColumn
| Prop | Default | Type |
|---|---|---|
width | 243px | string |
| Slot | Type |
|---|---|
default | {} |
LNavigationMenuContentHeadline
| Slot | Type |
|---|---|
default | {} |
LNavigationMenuContentLink
| Prop | Default | Type |
|---|---|---|
hrefrequired | string | |
target | string |
| Slot | Type |
|---|---|
default | {} |
LNavigationMenuContentList
| Slot | Type |
|---|---|
default | {} |
LNavigationMenuContentSeparator
LNavigationMenuIconItem
| Prop | Default | Type |
|---|---|---|
labelrequired | string | |
active | boolean | |
disabled | boolean | |
count | string | |
href | string | |
orientation | vertical | "vertical" | "horizontal" |
| Slot | Type |
|---|---|
default | {} |
content | {} |
LNavigationMenuTextItem
| Prop | Default | Type |
|---|---|---|
as | string | |
hrefrequired | string | |
active | boolean | |
disabled | boolean | |
inTopbar | boolean | |
surfaceTone | "dark" | "light" | |
orientation | vertical | "vertical" | "horizontal" |
variant | string |
| Slot | Type |
|---|---|
default | {} |
content | {} |
LNavigationMenuTextItemWrapper
| Prop | Default | Type |
|---|---|---|
as | div | "button" | "a" | "div"Element to render the wrapper as. Defaults to |
surfaceTone | "dark" | "light" | |
border | bottom | "bottom" | "full" |
inTopbar | boolean | |
variant | string |
| Slot | Type |
|---|---|
default | {} |