Menu
A list of actions in a dropdown, enhanced with keyboard navigation.
API reference
Import the component and place its parts the following way:
import { Menu } from '@base-ui-components/react/menu';
<Menu.Root>
<Menu.Trigger />
<Menu.Positioner>
<Menu.Popup>
<Menu.Arrow />
<Menu.Item />
<Menu.Separator />
<Menu.Group>
<Menu.GroupLabel />
</Menu.Group>
<Menu.RadioGroup>
<Menu.RadioItem />
</Menu.RadioGroup>
<Menu.CheckboxItem />
{/* Submenu */}
<Menu.Root>
<Menu.SubmenuTrigger />
<Menu.Positioner>
<Menu.Popup>...</Menu.Popup>
</Menu.Positioner>
</Menu.Root>
</Menu.Popup>
</Menu.Positioner>
</Menu.Root>
Root
Groups all parts of the menu. Doesn’t render its own HTML element.
Prop | Type | Default | |
---|---|---|---|
closeParentOnEsc | boolean | true | |
defaultOpen | boolean | false | |
delay | number | 100 | |
disabled | boolean | false | |
loop | boolean | true | |
onOpenChange | (open, event) => void | undefined | |
open | boolean | undefined | |
openOnHover | boolean | undefined | |
orientation | 'horizontal' | 'vertical' | 'vertical' |
Trigger
A button that opens the menu.
Renders a <button>
element.
Prop | Type | Default | |
---|---|---|---|
className | string | (state) => string | undefined | |
disabled | boolean | false | |
label | string | undefined | |
render | | React.ReactElement | undefined |
Positioner
Positions the menu popup against the trigger.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
align | 'start' | 'center' | 'end' | 'center' | |
alignOffset | number | 0 | |
anchor | | React.Ref | undefined | |
arrowPadding | number | 5 | |
className | string | (state) => string | undefined | |
collisionBoundary | | 'clippingAncestors' | 'clipping-ancestors' | |
collisionPadding | number | Rect | 5 | |
container | React.Ref | HTMLElement | null | undefined | |
keepMounted | boolean | false | |
positionMethod | 'absolute' | 'fixed' | 'absolute' | |
render | | React.ReactElement | undefined | |
side | | 'bottom' | 'bottom' | |
sideOffset | number | 0 | |
sticky | boolean | false |
CSS Variable | Type | |
---|---|---|
--anchor-height | number | |
--anchor-width | number | |
--available-height | number | |
--available-width | number | |
--transform-origin | string |
Popup
A container for the menu items.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
className | string | (state) => string | undefined | |
id | string | undefined | |
render | | React.ReactElement | undefined |
Arrow
Displays an element positioned against the menu anchor.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
className | string | (state) => string | undefined | |
render | | React.ReactElement | undefined |
Item
An individual interactive item in the menu.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
closeOnClick | boolean | true | |
disabled | boolean | false | |
id | string | undefined | |
label | string | undefined | |
onClick | (event) => void | undefined |
Group
Groups related menu items with the corresponding label.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
children | React.ReactNode | undefined | |
className | string | (state) => string | undefined | |
render | | React.ReactElement | undefined |
Group Label
An accessible label that is automatically associated with its parent group.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
className | string | (state) => string | undefined | |
render | | React.ReactElement | undefined |
Radio Group
Groups related radio items.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
children | React.ReactNode | undefined | |
className | string | (state) => string | undefined | |
defaultValue | any | undefined | |
onValueChange | (value, event) => void | () => {} | |
render | | React.ReactElement | undefined | |
value | any | undefined |
Radio Item
A menu item that works like a radio button in a given group.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
value | any | undefined | |
closeOnClick | boolean | true | |
disabled | boolean | false | |
id | string | undefined | |
label | string | undefined | |
onClick | (event) => void | undefined |
Radio Item Indicator
Indicates whether the radio item is selected.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
className | string | (state) => string | undefined | |
keepMounted | boolean | true | |
render | | React.ReactElement | undefined |
Checkbox Item
A menu item that toggles a setting on or off.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
checked | boolean | undefined | |
closeOnClick | boolean | true | |
defaultChecked | boolean | false | |
disabled | boolean | false | |
id | string | undefined | |
label | string | undefined | |
onCheckedChange | function | undefined | |
onClick | (event) => void | undefined |
Checkbox Item Indicator
Indicates whether the checkbox item is ticked.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
className | string | (state) => string | undefined | |
keepMounted | boolean | true | |
render | | React.ReactElement | undefined |
Submenu Trigger
A menu item that opens a submenu.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
className | string | (state) => string | undefined | |
disabled | boolean | false | |
label | string | undefined | |
render | | React.ReactElement | undefined |
Separator
A separator element accessible to screen readers.
Renders a <div>
element.
Prop | Type | Default | |
---|---|---|---|
className | string | (state) => string | undefined | |
render | | React.ReactElement | undefined |