Select
Visible label. Native <select> when options are few (under 7).
Spec
- Visible label.
aria-labelonly when the label is visually hidden on purpose (compact toolbar) — still a name. - Native
<select>if few options. - Error: border + icon +
aria-invalid+aria-describedby. - Disabled:
fg-disabled, not in the submit set. - Placeholder: an empty
<option>, not the label. - Helper text sits below.
- Leading icon / prefix allowed; reserved chevron is the trailing indicator on custom faces. Native uses the platform chevron.
- Don't put a form inside a Dropdown and call it a select.
Live demo
Runnable controls. Not a screenshot. Paper / Ink in the header recolors tokens.
Native select, placeholder is an empty option
Native because there are six options.
Error + icon + describedby
Range is required to compare.
Do / Don't
| Do | Don't |
|---|---|
| Native when there are five regions. | A custom listbox for three options. |
| Empty option as placeholder. | “Select a region” as the visible label and the first option. |
Motion
| Property | Duration | Easing | Trigger | Reduced motion |
|---|---|---|---|---|
transform: scale(0.97) | 120ms --dur-fast | --ease-out | :active | instant |
| color / border | 120ms --dur-fast | --ease-out | :hover | instant |
| outline | 80ms --dur-micro | --ease-out | :focus-visible | instant |
Accessibility
- Contrast on the field:
--fgon--bg-surface. Error text isfg-critical. - Keyboard: native select behavior when native. Custom listbox must implement it all — prefer native.
- Face 32 (
--control-h-md). Compact-width companion uses the 44 face. - These notes describe construction. They are not a guarantee of WCAG conformance. Validate with axe, keyboard, and operators. See Accessibility.
Related
- Dropdown — actions, not values
- Text field
- Iconography — chevron-down