Skip to content

Select

The Select components let you create lists of options for users to choose from.

Option API

Import

import Option from '@mui/base/Option';
// or
import { Option } from '@mui/base';
You can learn about the difference by reading this guide on minimizing bundle size.

Props

Props of the native component are also available.

NameTypeDefaultDescription
value*any
The value of the option.
disabledboolfalse
If true, the option will be disabled.
labelstring
A text representation of the option's content. Used for keyboard text navigation matching.
slotProps{ root?: func
| object }
{}
The props used for each slot inside the Option.
slots{ root?: elementType }{}
The components used for each slot inside the Option. Either a string to use a HTML element or a component. See Slots API below for more details.

The ref is forwarded to the root element.

Slots

To learn how to customize the slot, check out the Overriding component structure guide.

NameDefault classDefault HTML tagDescription
root.MuiOption-root'li'The component that renders the root.

You can override the style of the component using one of these customization options:

CSS classes

These class names are useful for styling with CSS. They are applied to the root slot when specific states are triggered.

Global classDescription
.Mui-disabled
STATE
State class applied to the root `li` element if disabled={true}.
.Mui-selected
STATE
State class applied to the root `li` element if selected={true}.
.MuiOption-highlightedState class applied to the root `li` element if highlighted={true}.


OptionGroup API

Import

import OptionGroup from '@mui/base/OptionGroup';
// or
import { OptionGroup } from '@mui/base';
You can learn about the difference by reading this guide on minimizing bundle size.

Props

Props of the native component are also available.

NameTypeDefaultDescription
disabledboolfalse
If true all the options in the group will be disabled.
labelnode
The human-readable description of the group.
slotProps{ label?: func
| object, list?: func
| object, root?: func
| object }
{}
The props used for each slot inside the Input.
slots{ label?: elementType, list?: elementType, root?: elementType }{}
The components used for each slot inside the OptionGroup. Either a string to use a HTML element or a component. See Slots API below for more details.

The ref is forwarded to the root element.

Slots

To learn how to customize the slot, check out the Overriding component structure guide.

NameDefault classDefault HTML tagDescription
root.MuiOptionGroup-root'li'The component that renders the root.
label.MuiOptionGroup-label'span'The component that renders the label.
list.MuiOptionGroup-list'ul'The component that renders the list.

You can override the style of the component using one of these customization options:

CSS classes

These class names are useful for styling with CSS. They are applied to the root slot when specific states are triggered.

Global classDescription
.Mui-disabled
STATE
State class applied to the root `li` element if disabled={true}.


Select API

Import

import Select from '@mui/base/Select';
// or
import { Select } from '@mui/base';
You can learn about the difference by reading this guide on minimizing bundle size.

Props

Props of the native component are also available.

NameTypeDefaultDescription
autoFocusboolfalse
If true, the select element is focused during the first mount
defaultListboxOpenboolfalse
If true, the select will be initially open.
defaultValueany
The default selected value. Use when the component is not controlled.
disabledboolfalse
If true, the select is disabled.
getOptionAsStringfuncdefaultOptionStringifier
A function used to convert the option label to a string. It's useful when labels are elements and need to be converted to plain text to enable navigation using character keys on a keyboard.
getSerializedValuefunc
A function to convert the currently selected value to a string. Used to set a value of a hidden input associated with the select, so that the selected value can be posted with a form.
listboxIdstring
id attribute of the listbox element.
listboxOpenboolundefined
Controls the open state of the select's listbox.
multipleboolfalse
If true, selecting multiple values is allowed. This affects the type of the value, defaultValue, and onChange props.
namestring
Name of the element. For example used by the server to identify the fields in form submits. If the name is provided, the component will render a hidden input element that can be submitted to a server.
onChangefunc
Callback fired when an option is selected.
onListboxOpenChangefunc
Callback fired when the component requests to be opened. Use in controlled mode (see listboxOpen).
renderValuefunc
Function that customizes the rendering of the selected value.
slotProps{ listbox?: func
| object, popper?: func
| object, root?: func
| object }
{}
The props used for each slot inside the Input.
slots{ listbox?: elementType, popper?: elementType, root?: elementType }{}
The components used for each slot inside the Select. Either a string to use a HTML element or a component. See Slots API below for more details.
valueany
The selected value. Set to null to deselect all options.

The ref is forwarded to the root element.

Slots

To learn how to customize the slot, check out the Overriding component structure guide.

NameDefault classDefault HTML tagDescription
root.MuiSelect-root'button'The component that renders the root.
listbox.MuiSelect-listbox'ul'The component that renders the listbox.
popper.MuiSelect-popperPopperThe component that renders the popper.

You can override the style of the component using one of these customization options:

CSS classes

These class names are useful for styling with CSS. They are applied to the root slot when specific states are triggered.

Global classDescription
.Mui-active
STATE
State class applied to the root `button` element if active={true}.
.Mui-disabled
STATE
State class applied to the root `button` element and the listbox 'ul' element if disabled={true}.
.Mui-expanded
STATE
State class applied to the root `button` element if expanded={true}.
.Mui-focusVisible
STATE
State class applied to the root `button` element if focusVisible={true}.