Select
A single-choice dropdown field: a trigger showing the chosen value that opens a panel of options, styled to match Canvas inputs.
Pass label (and required) to name the field: iOS and web render the label above the trigger, while Android floats the Material 3 in-container label once the menu opens or a value is selected. On Android the trigger grows with the user's text size, and a label longer than the trigger truncates on one line clear of the chevron while the trigger's accessible name stays the whole label. The trigger fills the parent it is given; a step of its own (xs, lg, …, with start to pin it to the leading edge) or a Container step sets its measure.
In glass mode the option panel is a dense-layer glass card under the trigger (or above it when it fits there); the trigger stays in place with its value and chevron, and the chosen value and expanded state commit immediately. Solid mode paints the skin's own panel.
The label also names the option list. Use accessibilityLabel to provide an explicit purpose when the visible label or placeholder is insufficient; it overrides both accessible names. A required field announces "required" with the button name and marks the option list as required. The selected value never replaces the field's purpose.
Pass ref to access the interactive trigger, preserving overlay measurement. Use useRef<ComponentRef<typeof Select>>(null) from React, or useRef<View>(null) with React Native's View type. Object and callback refs are supported and detach on unmount. Calling ref.current?.focus() or .blur() delegates to the host without activating the control. Browser focus is supported; native focus depends on the platform and React Native version, and is separate from accessibility focus.
Country
iOS
Android
Country
Web
tsx
Default
Inline label
Required field
Small
Large
Country
With leading icon
Disabled
Measure
Props
Do & Don’t
Placeholder
Don’t
A placeholder as a normal option can be submitted as a real value.
Do
Country
Use the placeholder prop for the prompt so it can never be submitted as a value.
When to use
Don’t
A select for a single on/off choice buries a one-tap decision behind a dropdown.
Do
Status
Reserve a select for picking one of several mutually exclusive options; use a switch or radios for two.
Small
Don’t
A stacked block label towers over the small control and breaks the dense row it belongs in.
Do
Keep the small select inline with a short label so it stays compact inside toolbars and table footers.
Default size
Don’t
A default select next to a taller lg input leaves the row baselines misaligned.
Do
City
State
Match the default select to sibling inputs at the same height so the form row lines up.
Large
Don’t
Tiny option text inside a tall control wastes the height and looks like an accidental mismatch.
Do
Plan
Scale the text up with the height so the large select reads as a deliberate, touch-friendly target.