Menubar
A horizontal menu bar with multiple dropdown menus, built on Base UI
Installation
pnpm dlx shadcn@latest add https://prototyper-ui.com/r/menubar.jsonnpx shadcn@latest add https://prototyper-ui.com/r/menubar.jsonyarn dlx shadcn@latest add https://prototyper-ui.com/r/menubar.jsonbunx --bun shadcn@latest add https://prototyper-ui.com/r/menubar.jsonThis will add the following files to your project:
components/ui/menubar.tsxcomponents/ui/menu.tsx(dependency)
Usage
import {
Menubar,
MenubarMenu,
MenubarTrigger,
MenubarContent,
MenubarItem,
} from "@/components/ui/menubar"
<Menubar>
<MenubarMenu>
<MenubarTrigger>File</MenubarTrigger>
<MenubarContent>
<MenubarItem>New File</MenubarItem>
<MenubarItem>Open</MenubarItem>
<MenubarItem>Save</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>Anatomy
<Menubar>
<MenubarMenu>
<MenubarTrigger />
<MenubarContent>
<MenubarLabel />
<MenubarSeparator />
<MenubarGroup>
<MenubarItem>
<MenubarShortcut />
</MenubarItem>
</MenubarGroup>
<MenubarCheckboxItem />
<MenubarRadioGroup>
<MenubarRadioItem />
</MenubarRadioGroup>
<MenubarSub>
<MenubarSubTrigger />
<MenubarSubContent>
<MenubarItem />
</MenubarSubContent>
</MenubarSub>
</MenubarContent>
</MenubarMenu>
</Menubar>| Sub-component | data-slot | Purpose | Required |
|---|---|---|---|
Menubar | menubar | Root container, horizontal bar | Yes |
MenubarMenu | menubar-menu | Individual menu within the bar | Yes |
MenubarTrigger | menubar-trigger | Button that opens a menu | Yes |
MenubarPortal | menubar-portal | Renders children into a portal | No |
MenubarContent | menubar-content | The popup panel containing menu items | Yes |
MenubarGroup | menubar-group | Groups related menu items | No |
MenubarLabel | menubar-label | Non-interactive label for a group | No |
MenubarItem | menubar-item | Individual actionable menu item | Yes |
MenubarCheckboxItem | menubar-checkbox-item | Toggleable checkbox menu item | No |
MenubarRadioGroup | menubar-radio-group | Groups radio menu items | No |
MenubarRadioItem | menubar-radio-item | Radio-selectable menu item | No |
MenubarSeparator | menubar-separator | Visual separator between items | No |
MenubarShortcut | menubar-shortcut | Keyboard shortcut hint text | No |
MenubarSub | menubar-sub | Root for a submenu | No |
MenubarSubTrigger | menubar-sub-trigger | Item that opens a submenu | No |
MenubarSubContent | menubar-sub-content | Popup panel for a submenu | No |
Examples
Application Menu
Styling
Data Slots
Use data-slot attributes to target specific parts of the menubar:
| Slot name | Element |
|---|---|
menubar | The horizontal bar container |
menubar-menu | Individual menu root |
menubar-trigger | The trigger button |
menubar-portal | Portal wrapper |
menubar-content | The popup panel |
menubar-group | Group wrapper |
menubar-label | Group label |
menubar-item | Individual menu item |
menubar-checkbox-item | Checkbox menu item |
menubar-radio-group | Radio group wrapper |
menubar-radio-item | Radio menu item |
menubar-separator | Visual separator line |
menubar-shortcut | Keyboard shortcut text |
menubar-sub | Submenu root |
menubar-sub-trigger | Submenu trigger item |
menubar-sub-content | Submenu popup panel |
Customization Examples
/* Change menubar background */
[data-slot="menubar"] {
@apply bg-muted;
}
/* Change menu item highlight color */
[data-slot="menubar-item"][data-highlighted] {
@apply bg-primary text-primary-foreground;
}{/* Override styles via className */}
<Menubar className="rounded-lg">
<MenubarMenu>
<MenubarTrigger className="font-bold">File</MenubarTrigger>
<MenubarContent className="w-64">
<MenubarItem className="font-medium">Custom Item</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>API Reference
Menubar
Root container that renders a horizontal menu bar.
Prop
Type
All Base UI Menubar props are forwarded via ...props.
MenubarMenu
Individual menu within the menu bar. Wraps DropdownMenu.
Prop
Type
All Base UI Menu.Root props are forwarded via ...props.
MenubarTrigger
Button within the menu bar that opens a dropdown menu.
Prop
Type
All Base UI Menu.Trigger props are forwarded via ...props.
MenubarContent
The popup panel containing menu items, rendered inside a portal with a positioner.
Prop
Type
All Base UI Menu.Popup props are forwarded via ...props.
MenubarGroup
Groups related menu items together.
All Base UI Menu.Group props are forwarded via ...props.
MenubarLabel
Non-interactive label for a group of menu items.
Prop
Type
All Base UI Menu.GroupLabel props are forwarded via ...props.
MenubarItem
Individual actionable menu item.
Prop
Type
All Base UI Menu.Item props are forwarded via ...props.
MenubarCheckboxItem
Toggleable checkbox menu item with a check indicator.
Prop
Type
All Base UI Menu.CheckboxItem props are forwarded via ...props.
MenubarRadioGroup
Groups radio menu items for single-selection behavior.
All Base UI Menu.RadioGroup props are forwarded via ...props.
MenubarRadioItem
Radio-selectable menu item within a radio group.
Prop
Type
All Base UI Menu.RadioItem props are forwarded via ...props.
MenubarSeparator
Visual separator between menu items or groups.
Prop
Type
All Base UI Menu.Separator props are forwarded via ...props.
MenubarShortcut
Displays a keyboard shortcut hint aligned to the right of a menu item.
Prop
Type
All standard span props are forwarded via ...props.
MenubarSub
Root provider for a submenu.
All Base UI Menu.SubmenuRoot props are forwarded via ...props.
MenubarSubTrigger
Menu item that opens a submenu on hover or keyboard navigation.
Prop
Type
All Base UI Menu.SubmenuTrigger props are forwarded via ...props.
MenubarSubContent
Popup panel for a submenu, rendered inside a portal with a positioner.
Prop
Type
All Base UI Menu.SubmenuPopup props are forwarded via ...props.
Accessibility
Keyboard Interactions
| Key | Action |
|---|---|
Space | Activates the focused menu item |
Enter | Activates the focused menu item |
ArrowDown | Moves focus to the next menu item |
ArrowUp | Moves focus to the previous menu item |
ArrowRight | Opens the next menu or a submenu |
ArrowLeft | Opens the previous menu or closes a submenu |
Escape | Closes the currently open menu |
Home | Moves focus to the first menu item |
End | Moves focus to the last menu item |
ARIA Attributes
Menubarreceivesrole="menubar".MenubarTriggerreceivesrole="menuitem"within the menubar context.MenubarContentreceivesrole="menu".MenubarItemreceivesrole="menuitem".MenubarCheckboxItemreceivesrole="menuitemcheckbox"witharia-checked.MenubarRadioItemreceivesrole="menuitemradio"witharia-checked.MenubarSubcontent receivesrole="menu"for nested menus.data-disabledis set on disabled items, which setsaria-disabled.- Focus is managed within the menu bar and returns to the trigger when a menu closes.