Menu
The Menu component provide end users with a list of options on temporary surfaces.
MenuArrow API
Import
import * as Menu from '@base_ui/react/Menu';
const MenuArrow = Menu.Arrow;Props of the native component are also available.
| Name | Type | Default | Description | 
|---|---|---|---|
| className | func | string | - | Class names applied to the element or a function that returns them based on the component's state. | 
| hideWhenUncentered | bool | false | If  | 
| render | element | func | - | A function to customize rendering of the component. | 
ref is forwarded to the root element.Theme default props
You can useMenuArrow to change the default props of this component with the theme.MenuItem API
Import
import * as Menu from '@base_ui/react/Menu';
const MenuItem = Menu.Item;Props of the native component are also available.
| Name | Type | Default | Description | 
|---|---|---|---|
| closeOnClick | bool | true | If  | 
| disabled | bool | false | If  | 
| id | string | - | The id of the menu item. | 
| label | string | - | A text representation of the menu item's content. Used for keyboard text navigation matching. | 
| onClick | func | - | The click handler for the menu item. | 
ref is forwarded to the root element.Theme default props
You can useMenuItem to change the default props of this component with the theme.MenuPopup API
Import
import * as Menu from '@base_ui/react/Menu';
const MenuPopup = Menu.Popup;Props of the native component are also available.
| Name | Type | Description | 
|---|---|---|
| className | func | string | Class names applied to the element or a function that returns them based on the component's state. | 
| id | string | The id of the popup element. | 
| render | element | func | A function to customize rendering of the component. | 
ref is forwarded to the root element.Theme default props
You can useMenuPopup to change the default props of this component with the theme.MenuPositioner API
Import
import * as Menu from '@base_ui/react/Menu';
const MenuPositioner = Menu.Positioner;Props of the native component are also available.
| Name | Type | Default | Description | 
|---|---|---|---|
| alignment | 'center' | 'end' | 'start' | 'center' | The alignment of the Menu element to the anchor element along its cross axis. | 
| alignmentOffset | number | 0 | The offset of the Menu element along its alignment axis. | 
| anchor | HTML element | object | func | - | The anchor element to which the Menu popup will be placed at. | 
| arrowPadding | number | 5 | Determines the padding between the arrow and the Menu popup's edges. Useful when the popover popup has rounded corners via  | 
| className | func | string | - | Class names applied to the element or a function that returns them based on the component's state. | 
| collisionBoundary | HTML element | Array<HTML element> | string | { height?: number, width?: number, x?: number, y?: number } | 'clippingAncestors' | The boundary that the Menu element should be constrained to. | 
| collisionPadding | number | { bottom?: number, left?: number, right?: number, top?: number } | 5 | The padding of the collision boundary. | 
| container | HTML element | func | - | The container element to which the Menu popup will be appended to. | 
| hideWhenDetached | bool | false | If  | 
| keepMounted | bool | false | Whether the menu popup remains mounted in the DOM while closed. | 
| positionStrategy | 'absolute' | 'fixed' | 'absolute' | The CSS position strategy for positioning the Menu popup element. | 
| render | element | func | - | A function to customize rendering of the component. | 
| side | 'bottom' | 'left' | 'right' | 'top' | 'bottom' | The side of the anchor element that the Menu element should align to. | 
| sideOffset | number | 0 | The gap between the anchor element and the Menu element. | 
| sticky | bool | false | If  | 
ref is forwarded to the root element.Theme default props
You can useMenuPositioner to change the default props of this component with the theme.MenuRoot API
Import
import * as Menu from '@base_ui/react/Menu';
const MenuRoot = Menu.Root;Props of the native component are also available.
| Name | Type | Default | Description | 
|---|---|---|---|
| animated | bool | true | If  | 
| closeParentOnEsc | bool | true | Determines if pressing the Esc key closes the parent menus. This is only applicable for nested menus. | 
| defaultOpen | bool | false | If  | 
| delay | number | 100 | The delay in milliseconds until the menu popup is opened when  | 
| dir | 'ltr' | 'rtl' | 'ltr' | The direction of the Menu (left-to-right or right-to-left). | 
| disabled | bool | false | If  | 
| loop | bool | true | If  | 
| onOpenChange | func | - | Callback fired when the component requests to be opened or closed. | 
| open | bool | - | Allows to control whether the dropdown is open. This is a controlled counterpart of  | 
| openOnHover | bool | nested | Whether the menu popup opens when the trigger is hovered after the provided  | 
| orientation | 'horizontal' | 'vertical' | 'vertical' | The orientation of the Menu (horizontal or vertical). | 
MenuTrigger API
Import
import * as Menu from '@base_ui/react/Menu';
const MenuTrigger = Menu.Trigger;Props of the native component are also available.
| Name | Type | Default | Description | 
|---|---|---|---|
| className | func | string | - | Class names applied to the element or a function that returns them based on the component's state. | 
| disabled | bool | false | If  | 
| focusableWhenDisabled | bool | false | If  | 
| label | string | - | Label of the button | 
| render | element | func | - | A function to customize rendering of the component. | 
ref is forwarded to the root element.Theme default props
You can useMenuTrigger to change the default props of this component with the theme.SubmenuTrigger API
Import
import { SubmenuTrigger } from '@base_ui/react/Menu';| Name | Type | Default | Description | 
|---|---|---|---|
| className | func | string | - | Class names applied to the element or a function that returns them based on the component's state. | 
| disabled | bool | false | If  | 
| disableFocusOnHover | bool | false | If  | 
| label | string | - | A text representation of the menu item's content. Used for keyboard text navigation matching. | 
| render | element | func | - | A function to customize rendering of the component. |