Menu
Last Updated: September 2026Menus are interactive elevated surfaces that house a variety of actions or category of actions the user can take. Submenus are supported for flexibility in menu content organization.
Anatomy
link- 1Item
- 2Item
- 3Separator
- 4Danger item
Variants
linkBasic
Root + Trigger + Content + Item compound API.
With icons and shortcuts
LeftIcon, Label, and Right slots compose each row.
With descriptions
Label + Description for denser option lists.
Submenu
Nest Menu.SubmenuRoot with SubmenuTrigger and SubmenuContent.
Disabled item
disabled on Menu.Item prevents selection.
Usage Guidelines
linkWhen to use
- •For contextual actions anchored to a control (row menus, overflow, profile).
- •When several related actions should stay off the main chrome until needed.
- •For nested action groups via SubmenuRoot / SubmenuTrigger / SubmenuContent.
When not to use
- •For primary page navigation — use NavigationItem or Link.
- •For a single action — use Button.
- •For form field selection — use Select.
Group related actions and place destructive items last with danger.
Don't use Menu as the app's primary navigation — use NavigationItem.
Compose Trigger with render={<Button … />} for accessible open controls.
Don't omit Menu.Item.Label — every item needs a clear name.
Behaviors
linkCompound parts
- •Menu (Root), Trigger, Backdrop, Content, Item, Separator, SubmenuRoot, SubmenuTrigger, SubmenuContent.
- •Menu.Item merges ListItem slots: Label, Description, LeftIcon, RightIcon, Left, Right, Submenu.
Positioning
- •Content accepts align, side, sideOffset, alignOffset, and keepMounted.
- •SubmenuContent defaults to side="right" with a fixed offset.
Outside menu roots
- •Menu.Item can render as a ListItem when used outside Menu root context.
- •Inside a Menu root it wires Base UI menu item behavior automatically.
Content Guidelines
linkLabels
- •Start with verbs for actions ('Export summary', 'Cancel visit').
- •Keep labels short; put detail in Description when needed.
Accessibility
linkText & Labels
- •Every item needs a Label (or equivalent accessible name).
- •Danger items should still read clearly without relying on color alone.
ARIA attributes
- •Built on Base UI Menu — roles and aria-expanded are handled by the primitives.
Keyboard Support
- •Enter / Space on Trigger opens.
- •Arrow keys move between items; Enter activates.
- •Escape closes; submenu arrows open nested menus.
WCAG Compliance Standards
FAQs
linkIs there an items=[] API?
No — compose Menu.Item children. Older pattern docs that pass items are outdated.
How do I open from a Button?
Use Menu.Trigger with render={<Button variant="neutral">…</Button>}.
How do submenus work?
Wrap SubmenuTrigger + SubmenuContent in SubmenuRoot. SubmenuTrigger auto-adds a chevron via Menu.Item.Submenu.