2.34.0
Selects afford a single selection from a predefined list of options.
See Forms for guidance on composing full forms.
Use when affording a single selection from a predefined list of options.
<!-- Default -->
<div class="mds-form__select">
<select class="mds-form__select-input" id="select-id">
<option class="mds-form__select-option" value="">Select an Expense Type</option>
<option class="mds-form__select-option" value="vacation">Vacation</option>
<option class="mds-form__select-option" value="public_college">Public College</option>
<option class="mds-form__select-option" value="private_college">Private College</option>
<option class="mds-form__select-option" value="medical">Medical</option>
</select>
<div class="mds-form__select-visual-wrap"></div>
<span class="mds-form__select-open-indicator">
<svg class="mds-icon mds-form__select-open-icon" aria-hidden="true">
<use xlink:href="#caret-down--s">
</use>
</svg>
</span>
</div>
<!-- Disabled -->
<div class="mds-form__select">
<select class="mds-form__select-input" id="select-id" disabled>
<option class="mds-form__select-option" value="">Select an Expense Type</option>
<option class="mds-form__select-option" value="vacation">Vacation</option>
<option class="mds-form__select-option" value="public_college">Public College</option>
<option class="mds-form__select-option" value="private_college">Private College</option>
<option class="mds-form__select-option" value="medical">Medical</option>
</select>
<div class="mds-form__select-visual-wrap"></div>
<span class="mds-form__select-open-indicator">
<svg class="mds-icon mds-form__select-open-icon" aria-hidden="true">
<use xlink:href="#caret-down--s">
</use>
</svg>
</span>
</div>
<!-- Default -->
<mds-select id="select-id" placeholder="Select an Expense Type" options='[{"text": "Vacation", "value": "vacation"}, {"text": "Public College", "value": "public_college"}, {"text": "Private College", "value": "private_college"}, {"text": "Medical", "value": "medical"}]'></mds-select>
<!-- Disabled -->
<mds-select id="select-id" disabled placeholder="Select an Expense Type" options='[{"text": "Vacation", "value": "vacation"}, {"text": "Public College", "value": "public_college"}, {"text": "Private College", "value": "private_college"}, {"text": "Medical", "value": "medical"}]'></mds-select>
Always wrap grouped form elements in a mds-form__field-group
container. See the Forms composition section for more guidelines on constructing forms.
<!-- HTML -->
<div class="mds-form__field-group">
<label class="mds-form__label" for="expense-type">Expense Type</label>
<select class="mds-form__select-input" id="expense-type">
[Options]
</select>
</div>
<!-- Web Component -->
<mds-field-group>
<mds-label for="expense-type">Expense Type</mds-label>
<mds-select id="expense-type" placeholder="Select an Expense Type" options="[Options]"></mds-select>
</mds-field-group>
Sizing affects select size, text size and internal spacing. The default size is medium, and you can use modifier classes or props to make the button smaller or larger.
<div class="mds-form__select mds-form__select--small">
<select class="mds-form__select-input" id="small-select">
<option class="mds-form__select-option" value="">Select an option</option>
<option class="mds-form__select-option" value="option_1">Option 1</option>
<option class="mds-form__select-option" value="option_2">Option 2</option>
</select>
<div class="mds-form__select-visual-wrap"></div>
<span class="mds-form__select-open-indicator">
<svg class="mds-icon mds-form__select-open-icon" aria-hidden="true">
<use xlink:href="#caret-down--s">
</use>
</svg>
</span>
</div>
<mds-select id="small-select" placeholder="Select an option" size="small" options='[{"text": "Option 1","value": "option_1"}, {"text": "Option 2","value": "option_2"}]'></mds-select>
Class
|
Applies to
|
Outcome
|
---|---|---|
|
|
Adjusts styling to render a small select. |
|
|
Adjusts styling to render a large select. |
|
|
Adjusts styling to render a touch select. |
Use this mixin to create media queries in your product styles to switch selects to their touch variation.
@include mds-select-touch-properties();
For example, switching to the touch variation on screens with a max-width
of 500px
:
// Your product SCSS
@media screen and (max-width: 500px) {
@include mds-select-touch-properties();
}
max-width
, pointer: coarse
is another helpful method for targeting touch screen devices.@include mds-form-all-touch-properties();
mixin for efficiency.When setting props as attributes on a custom HTML element, use kebab-case
instead of camelCase
.
Prop
|
Type
|
Validation
|
Default
|
Description
|
---|---|---|---|---|
|
String |
— |
— |
A space-separated list of class names that will be appended to the default |
|
String |
— |
— |
A space-separated list of element |
|
String |
One of: |
|
Sets the aria-invalid attribute. |
|
Boolean |
— |
|
If |
|
String |
Required |
— |
The |
|
String |
— |
— |
The |
|
String |
— |
— |
Adds an |
|
Array |
— |
— |
An array to be rendered as |
|
Boolean |
— |
|
If true, adds the |
|
String |
One of: |
|
Alters the size of the select. |
|
String |
— |
— |
The value of the option selected. Omitting this selects an empty value option. Set the text for this empty value option using the |
Setting id
, options
, and value
via props:
<mds-select id="my-select-1" options='[{"text": "Option 1","value": "option_1"}, {"text": "Option 2","value": "option_2"}, {"text": "Option 3","value": "option_3"}]' value="option_2"></mds-select>
Setting id
, placeholder
, and options
via props:
<mds-select id="my-select-2" placeholder="Choose..." options='[{"text": "Option 1","value": "option_1"}, {"text": "Option 2","value": "option_2"}, {"text": "Option 3","value": "option_3"}]'></mds-select>
On touch screens, :hover
states “stick” after tapping an interactive element. To counter this behavior, MDS provides a mixin that resets component hover states to their default styles:
@include mds-sticky-hover-reset();
The mixin uses a media query based on hover: none
to target touch screen devices and includes resets for Buttons, Checkboxes, Inputs, List Groups, Radio Buttons, Search Fields, Selects, Switches, and Textareas. You can apply this mixin within your product’s media queries along with other MDS touch styles, for example:
// Your product SCSS
@media screen and (max-width: 500px) {
@include mds-sticky-hover-reset();
@include mds-componentName-touch-properties();
// The rest of your product’s responsive/touch styles...
}
box-shadow
property to create an outline. Internet Explorer and Safari have known issues rendering these outlines when using the browser's zoom functionality. This visual defect doesn't affect the functionality of the component.aria-describedby
attribute on each select
that has an .mds-form__microcopy
or an .mds-form__field-error
component providing additional information. The value of the aria-describedby
attribute must match the id
attribute on the .mds-form__microcopy
or .mds-form__field-error
component.for
attribute on each label
with a value matching the id
attribute on the corresponding select
.