Select accessibility
WCAG 2.1 AA — release blocker
Semantics
- Trigger renders as
<button>withrole="combobox"andaria-haspopup="listbox". aria-expandedreflects open/closed state of the dropdown.- Dropdown content uses
role="listbox". - Each
SelectItemusesrole="option"witharia-selectedfor current selection. - Disabled items set
aria-disabled="true".
Keyboard navigation
- Enter / Space / ArrowDown / ArrowUp on the trigger opens the dropdown.
- ArrowDown / ArrowUp moves focus between options within the open list.
- Enter / Space on a focused option selects it and closes the dropdown.
- Escape closes the dropdown and returns focus to the trigger.
Labelling
- Pair with a
Labelcomponent or addaria-labelto the trigger for a group-level accessible name. - Each
SelectItemchild text serves as the accessible label for that option. SelectLabelinside aSelectGroupprovides a group heading.
Disabled state
- Disabled items set
aria-disabledand cannot be focused or selected. - Click-outside closes the dropdown without selection.
Audit checklist
- Screen reader announces trigger label and expanded state.
- Arrow keys navigate options and Enter selects.
- Escape closes the dropdown and returns focus to trigger.
- Selected item is announced with
aria-selected. - Disabled items cannot be selected via keyboard or pointer.
- Focus ring is visible on the trigger and on focused options (4.5:1 contrast).