Skip to content

Selects

Select components are used for collecting user provided information from a list of options.

Simple Select

Menus are positioned over their emitting elements such that the currently selected menu item appears on top of the emitting element.

Some important helper text

None

Without label

None

Label + placeholder

Disabled

Error

Read only

Auto width

Placeholder

Placeholder

Required

Native Select

As the user experience can be improved on mobile using the native select of the platform, we allow such pattern.

Some important helper text

With visually hidden label

Label + placeholder

Disabled

Error

Uncontrolled

Placeholder

Required

Customized selects

Here are some examples of customizing the component. You can learn more about this in the overrides documentation page.

The first step is to style the InputBase component. Once it's styled, you can either use it directly as a text field or provide it to the select input property to have a select field.

Multiple Select

The Select component can handle multiple selections. It's enabled with the multiple property.

Like with the single selection, you can pull out the new value by accessing event.target.value in the onChange callback. It's always an array.

Placeholder

Controlled Open Select

With a Dialog

While it's discouraged by the Material Design specification, you can use a select inside a dialog.

Text Fields

The TextField wrapper component is a complete form control including a label, input and help text. You can find an example with the select mode in this section.

Grouping

Display categories with the ListSubheader component or the native <optgroup> element.

Accessibility

To properly label your Select input you need an extra element with an id that contains a label. That id needs to match the labelId of the Select e.g.

<InputLabel id="label">Age</InputLabel>
<Select labelId="label" id="select" value="20">
  <MenuItem value="10">Twenty</MenuItem>
  <MenuItem value="20">Twenty</MenuItem>
</Select>

Alternatively a TextField with an id and label creates the proper markup and ids for you:

<TextField id="select" label="Age" value="20">
  <MenuItem value="10">Twenty</MenuItem>
  <MenuItem value="20">Twenty</MenuItem>
</TextField>