Menu API
API reference docs for the React Menu component. Learn about the props, CSS, and other APIs of this exported module.
Demos
Import
import Menu from '@mui/joy/Menu';
// or
import { Menu } from '@mui/joy';
Learn about the difference by reading this guide on minimizing bundle size.
Props of the native component are also available.
Name | Type | Default | Description |
---|---|---|---|
actions | ref | - | A ref with imperative actions. It allows to select the first or last menu item. |
color | 'danger' | 'neutral' | 'primary' | 'success' | 'warning' | 'neutral' | The color of the component. It supports those theme colors that make sense for this component. To learn how to add your own colors, check out Themed components—Extend colors. |
component | elementType | - | The component used for the root node. Either a string to use a HTML element or a component. |
disablePortal | bool | false | The |
invertedColors | bool | false | If |
keepMounted | bool | false | Always keep the children in the DOM. This prop can be useful in SEO situation or when you want to maximize the responsiveness of the Popper. |
modifiers | Array<{ data?: object, effect?: func, enabled?: bool, fn?: func, name?: any, options?: object, phase?: 'afterMain' | 'afterRead' | 'afterWrite' | 'beforeMain' | 'beforeRead' | 'beforeWrite' | 'main' | 'read' | 'write', requires?: Array<string>, requiresIfExists?: Array<string> }> | - | Popper.js is based on a "plugin-like" architecture, most of its features are fully encapsulated "modifiers". |
onClose | func | - | Triggered when focus leaves the menu and the menu should close. |
onItemsChange | func | - | Function called when the items displayed in the menu change. |
open | bool | false | Controls whether the menu is displayed. |
size | 'sm' | 'md' | 'lg' | string | 'md' | The size of the component (affect other nested list* components because the To learn how to add custom sizes to the component, check out Themed components—Extend sizes. |
slotProps | { root?: func | object } | {} | The props used for each slot inside. |
slots | { root?: elementType } | {} | The components used for each slot inside. See Slots API below for more details. |
sx | Array<func | object | bool> | func | object | - | The system prop that allows defining system overrides as well as additional CSS styles. See the `sx` page for more details. |
variant | 'outlined' | 'plain' | 'soft' | 'solid' | string | 'outlined' | The global variant to use. To learn how to add your own variants, check out Themed components—Extend variants. |
ref
is forwarded to the root element.To learn how to customize the slot, check out the Overriding component structure guide.
Slot name | Class name | Default component | Description |
---|---|---|---|
root | .MuiMenu-root | 'ul' | The component that renders the root. |
These class names are useful for styling with CSS. They are applied to the component's slots when specific states are triggered.
Class name | Rule name | Description |
---|---|---|
.Mui-expanded | Class name applied to the root element when the menu open. | |
.MuiMenu-colorContext | colorContext | Class name applied to the root element when color inversion is triggered. |
.MuiMenu-colorDanger | colorDanger | Class name applied to the root element if color="danger" . |
.MuiMenu-colorNeutral | colorNeutral | Class name applied to the root element if color="neutral" . |
.MuiMenu-colorPrimary | colorPrimary | Class name applied to the root element if color="primary" . |
.MuiMenu-colorSuccess | colorSuccess | Class name applied to the root element if color="success" . |
.MuiMenu-colorWarning | colorWarning | Class name applied to the root element if color="warning" . |
.MuiMenu-listbox | listbox | Class name applied to the listbox element. |
.MuiMenu-sizeLg | sizeLg | Class name applied to the root element if size="lg" . |
.MuiMenu-sizeMd | sizeMd | Class name applied to the root element if size="md" . |
.MuiMenu-sizeSm | sizeSm | Class name applied to the root element if size="sm" . |
.MuiMenu-variantOutlined | variantOutlined | Class name applied to the root element if variant="outlined" . |
.MuiMenu-variantPlain | variantPlain | Class name applied to the root element if variant="plain" . |
.MuiMenu-variantSoft | variantSoft | Class name applied to the root element if variant="soft" . |
.MuiMenu-variantSolid | variantSolid | Class name applied to the root element if variant="solid" . |
You can override the style of the component using one of these customization options:
- With a global class name.
- With a rule name as part of the component's
styleOverrides
property in a custom theme.
Source code
If you did not find the information in this page, consider having a look at the implementation of the component for more detail.