Prototyper UI

Menubar

A horizontal menu bar with multiple dropdown menus, built on Base UI

Loading...

Installation

pnpm dlx shadcn@latest add https://prototyper-ui.com/r/menubar.json
npx shadcn@latest add https://prototyper-ui.com/r/menubar.json
yarn dlx shadcn@latest add https://prototyper-ui.com/r/menubar.json
bunx --bun shadcn@latest add https://prototyper-ui.com/r/menubar.json

This will add the following files to your project:

  • components/ui/menubar.tsx
  • components/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-componentdata-slotPurposeRequired
MenubarmenubarRoot container, horizontal barYes
MenubarMenumenubar-menuIndividual menu within the barYes
MenubarTriggermenubar-triggerButton that opens a menuYes
MenubarPortalmenubar-portalRenders children into a portalNo
MenubarContentmenubar-contentThe popup panel containing menu itemsYes
MenubarGroupmenubar-groupGroups related menu itemsNo
MenubarLabelmenubar-labelNon-interactive label for a groupNo
MenubarItemmenubar-itemIndividual actionable menu itemYes
MenubarCheckboxItemmenubar-checkbox-itemToggleable checkbox menu itemNo
MenubarRadioGroupmenubar-radio-groupGroups radio menu itemsNo
MenubarRadioItemmenubar-radio-itemRadio-selectable menu itemNo
MenubarSeparatormenubar-separatorVisual separator between itemsNo
MenubarShortcutmenubar-shortcutKeyboard shortcut hint textNo
MenubarSubmenubar-subRoot for a submenuNo
MenubarSubTriggermenubar-sub-triggerItem that opens a submenuNo
MenubarSubContentmenubar-sub-contentPopup panel for a submenuNo

Examples

Application Menu

Loading...

Styling

Data Slots

Use data-slot attributes to target specific parts of the menubar:

Slot nameElement
menubarThe horizontal bar container
menubar-menuIndividual menu root
menubar-triggerThe trigger button
menubar-portalPortal wrapper
menubar-contentThe popup panel
menubar-groupGroup wrapper
menubar-labelGroup label
menubar-itemIndividual menu item
menubar-checkbox-itemCheckbox menu item
menubar-radio-groupRadio group wrapper
menubar-radio-itemRadio menu item
menubar-separatorVisual separator line
menubar-shortcutKeyboard shortcut text
menubar-subSubmenu root
menubar-sub-triggerSubmenu trigger item
menubar-sub-contentSubmenu 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

Root container that renders a horizontal menu bar.

Prop

Type

All Base UI Menubar props are forwarded via ...props.

Individual menu within the menu bar. Wraps DropdownMenu.

Prop

Type

All Base UI Menu.Root props are forwarded via ...props.

Button within the menu bar that opens a dropdown menu.

Prop

Type

All Base UI Menu.Trigger props are forwarded via ...props.

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.

Groups related menu items together.

All Base UI Menu.Group props are forwarded via ...props.

Non-interactive label for a group of menu items.

Prop

Type

All Base UI Menu.GroupLabel props are forwarded via ...props.

Individual actionable menu item.

Prop

Type

All Base UI Menu.Item props are forwarded via ...props.

Toggleable checkbox menu item with a check indicator.

Prop

Type

All Base UI Menu.CheckboxItem props are forwarded via ...props.

Groups radio menu items for single-selection behavior.

All Base UI Menu.RadioGroup props are forwarded via ...props.

Radio-selectable menu item within a radio group.

Prop

Type

All Base UI Menu.RadioItem props are forwarded via ...props.

Visual separator between menu items or groups.

Prop

Type

All Base UI Menu.Separator props are forwarded via ...props.

Displays a keyboard shortcut hint aligned to the right of a menu item.

Prop

Type

All standard span props are forwarded via ...props.

Root provider for a submenu.

All Base UI Menu.SubmenuRoot props are forwarded via ...props.

Menu item that opens a submenu on hover or keyboard navigation.

Prop

Type

All Base UI Menu.SubmenuTrigger props are forwarded via ...props.

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

KeyAction
SpaceActivates the focused menu item
EnterActivates the focused menu item
ArrowDownMoves focus to the next menu item
ArrowUpMoves focus to the previous menu item
ArrowRightOpens the next menu or a submenu
ArrowLeftOpens the previous menu or closes a submenu
EscapeCloses the currently open menu
HomeMoves focus to the first menu item
EndMoves focus to the last menu item

ARIA Attributes

  • Menubar receives role="menubar".
  • MenubarTrigger receives role="menuitem" within the menubar context.
  • MenubarContent receives role="menu".
  • MenubarItem receives role="menuitem".
  • MenubarCheckboxItem receives role="menuitemcheckbox" with aria-checked.
  • MenubarRadioItem receives role="menuitemradio" with aria-checked.
  • MenubarSub content receives role="menu" for nested menus.
  • data-disabled is set on disabled items, which sets aria-disabled.
  • Focus is managed within the menu bar and returns to the trigger when a menu closes.

On this page