Skip to content
On this page

Select

Material Web catalog**

Select menus display a list of choices on temporary surfaces and display the currently selected menu item above the menu.

Usage

Select (also referred to as a dropdown menu) allows choosing a value from a fixed list of available options. It is analogous to the native HTML <select> element.

Example usage of an outlined dropdown menu and a filled dropdown menu.

html
<md-outlined-select>
  <md-select-option aria-label="blank"></md-select-option>
  <md-select-option selected value="apple">
    <div slot="headline">Apple</div>
  </md-select-option>
  <md-select-option value="apricot">
    <div slot="headline">Apricot</div>
  </md-select-option>
</md-outlined-select>

<md-filled-select>
  <md-select-option aria-label="blank"></md-select-option>
  <md-select-option value="apple">
    <div slot="headline">Apple</div>
  </md-select-option>
  <md-select-option value="apricot">
    <div slot="headline">Apricot</div>
  </md-select-option>
</md-filled-select>

Required select

Indicate that a selection is mandatory by adding the required attribute.

html
<md-filled-select required>
  <md-select-option value="one">
    <div slot="headline">One</div>
  </md-select-option>
  <md-select-option value="two">
    <div slot="headline">Two</div>
  </md-select-option>
</md-filled-select>

Theming

Select supports Material theming and can be customized in terms of color, typography, and shape.

Filled Select tokens

TokenDefault value
--md-filled-select-text-field-container-color--md-sys-color-surface-container-highest
--md-filled-select-text-field-container-shape--md-sys-shape-corner-extra-small
--md-filled-select-text-field-input-text-color--md-sys-color-on-surface
--md-filled-select-text-field-input-text-font--md-sys-typescale-body-large-font

To theme the select's dropdown menu, use the md-menu component tokens on the ::part(menu) selector.

Filled Select example

Image of a filled select with a different theme applied

html
<style>
:root {
  --md-filled-select-text-field-container-shape: 0px;
  --md-filled-select-text-field-container-color: #f7faf9;
  --md-filled-select-text-field-input-text-color: #005353;
  --md-filled-select-text-field-input-text-font: system-ui;
}

md-filled-select::part(menu) {
  --md-menu-container-color: #f4fbfa;
  --md-menu-container-shape: 0px;
}
</style>

<md-filled-select>
  <md-select-option selected value="apple">
    <div slot="headline">Apple</div>
  </md-select-option>
  <md-select-option value="tomato">
    <div slot="headline">Tomato</div>
  </md-select-option>
</md-filled-select>

Outlined Select tokens

TokenDefault value
--md-outlined-select-text-field-outline-color--md-sys-color-outline
--md-outlined-select-text-field-container-shape--md-sys-shape-corner-extra-small
--md-outlined-select-text-field-input-text-color--md-sys-color-on-surface
--md-outlined-select-text-field-input-text-font--md-sys-typescale-body-large-font

Outlined Select example

Image of a outlined select with a different theme applied

html
<style>
:root {
  --md-outlined-select-text-field-outline-color: #6e7979;
  --md-outlined-select-text-field-container-shape: 0px;
  --md-outlined-select-text-field-input-text-color: #005353;
  --md-outlined-select-text-field-input-text-font: system-ui;
}

md-outlined-select::part(menu) {
  --md-menu-container-color: #f4fbfa;
  --md-menu-container-shape: 0px;
}
</style>

<md-outlined-select>
  <md-select-option selected value="apple">
    <div slot="headline">Apple</div>
  </md-select-option>
  <md-select-option value="tomato">
    <div slot="headline">Tomato</div>
  </md-select-option>
</md-outlined-select>

API

MdFilledSelect <md-filled-select>

Properties

PropertyAttributeTypeDefaultDescription
quickquickbooleanfalseOpens the menu synchronously with no animation.
requiredrequiredbooleanfalseWhether or not the select is required.
errorTexterror-textstring''The error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.
This error message overrides the error message displayed by reportValidity().
labellabelstring''The floating label for the field.
noAsteriskno-asteriskbooleanfalseDisables the asterisk on the floating label, when the select is required.
supportingTextsupporting-textstring''Conveys additional information below the select, such as how it should be used.
errorerrorbooleanfalseGets or sets whether or not the select is in a visually invalid state.
This error state overrides the error state controlled by reportValidity().
menuPositioningmenu-positioningstring'popover'Whether or not the underlying md-menu should be position: fixed to display in a top-level manner, or position: absolute.
position:fixed is useful for cases where select is inside of another element with stacking context and hidden overflows such as md-dialog.
clampMenuWidthclamp-menu-widthbooleanfalseClamps the menu-width to the width of the select.
typeaheadDelaytypeahead-delaynumberDEFAULT_TYPEAHEAD_BUFFER_TIMEThe max time between the keystrokes of the typeahead select / menu behavior before it clears the typeahead buffer.
hasLeadingIconhas-leading-iconbooleanfalseWhether or not the text field has a leading icon. Used for SSR.
displayTextdisplay-textstring''Text to display in the field. Only set for SSR.
menuAlignmenu-alignstring'start'Whether the menu should be aligned to the start or the end of the select's textbox.
valuevaluestringundefined
selectedIndexselected-indexnumberundefined
disabledbooleanundefined
namestringundefined
optionsSelectOption[]undefined
selectedOptionsSelectOption[]undefined

Methods

MethodParametersReturnsDescription
selectvaluevoidSelects an option given the value of the option, and updates MdSelect's value.
selectIndexindexvoidSelects an option given the index of the option, and updates MdSelect's value.
resetNonevoidReset the select to its default value.
getUpdateCompleteNonePromise<boolean>
formResetCallbackNonevoid
formStateRestoreCallbackstatevoid
clickNonevoid

Events

EventTypeBubblesComposedDescription
changeEventYesNoThe native change event on <input>
inputInputEventYesYesThe native input event on <input>
openingEventNoNoFired when the select's menu is about to open.
openedEventNoNoFired when the select's menu has finished animations and opened.
closingEventNoNoFired when the select's menu is about to close.
closedEventNoNoFired when the select's menu has finished animations and closed.

MdOutlinedSelect <md-outlined-select>

Properties

PropertyAttributeTypeDefaultDescription
quickquickbooleanfalseOpens the menu synchronously with no animation.
requiredrequiredbooleanfalseWhether or not the select is required.
errorTexterror-textstring''The error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.
This error message overrides the error message displayed by reportValidity().
labellabelstring''The floating label for the field.
noAsteriskno-asteriskbooleanfalseDisables the asterisk on the floating label, when the select is required.
supportingTextsupporting-textstring''Conveys additional information below the select, such as how it should be used.
errorerrorbooleanfalseGets or sets whether or not the select is in a visually invalid state.
This error state overrides the error state controlled by reportValidity().
menuPositioningmenu-positioningstring'popover'Whether or not the underlying md-menu should be position: fixed to display in a top-level manner, or position: absolute.
position:fixed is useful for cases where select is inside of another element with stacking context and hidden overflows such as md-dialog.
clampMenuWidthclamp-menu-widthbooleanfalseClamps the menu-width to the width of the select.
typeaheadDelaytypeahead-delaynumberDEFAULT_TYPEAHEAD_BUFFER_TIMEThe max time between the keystrokes of the typeahead select / menu behavior before it clears the typeahead buffer.
hasLeadingIconhas-leading-iconbooleanfalseWhether or not the text field has a leading icon. Used for SSR.
displayTextdisplay-textstring''Text to display in the field. Only set for SSR.
menuAlignmenu-alignstring'start'Whether the menu should be aligned to the start or the end of the select's textbox.
valuevaluestringundefined
selectedIndexselected-indexnumberundefined
disabledbooleanundefined
namestringundefined
optionsSelectOption[]undefined
selectedOptionsSelectOption[]undefined

Methods

MethodParametersReturnsDescription
selectvaluevoidSelects an option given the value of the option, and updates MdSelect's value.
selectIndexindexvoidSelects an option given the index of the option, and updates MdSelect's value.
resetNonevoidReset the select to its default value.
getUpdateCompleteNonePromise<boolean>
formResetCallbackNonevoid
formStateRestoreCallbackstatevoid
clickNonevoid

Events

EventTypeBubblesComposedDescription
changeEventYesNoThe native change event on <input>
inputInputEventYesYesThe native input event on <input>
openingEventNoNoFired when the select's menu is about to open.
openedEventNoNoFired when the select's menu has finished animations and opened.
closingEventNoNoFired when the select's menu is about to close.
closedEventNoNoFired when the select's menu has finished animations and closed.

MdSelectOption <md-select-option>

Properties

PropertyAttributeTypeDefaultDescription
disableddisabledbooleanfalseDisables the item and makes it non-selectable and non-interactive.
selectedselectedbooleanfalseSets the item in the selected visual state when a submenu is opened.
valuevaluestring''Form value of the option.
typestring'option' as const
typeaheadTextstringundefined
displayTextstringundefined

Events

EventTypeBubblesComposedDescription
close-menuCustomEvent<{initiator: SelectOption, reason: Reason, itemPath: SelectOption[]}>YesYesCloses the encapsulating menu on closable interaction.
request-selectionEventYesYesRequests the parent md-select to select this element (and deselect others if single-selection) when selected changed to true.
request-deselectionEventYesYesRequests the parent md-select to deselect this element when selected changed to false.
Select has loaded