Select

Last updated Feb 13, 2026

Select lets users choose a value from a predefined list. It is ideal for compact selection when options are known and relatively small. Implement Select with FormField for consistent labels, helper text, spacing, and accessibility.

Anatomy of a select
  1. Container : the field users click to open the menu; shows the current selection or placeholder.
  2. Chevron icon : indicates the field opens a menu.
  3. Menu : the dropdown surface containing options.
  4. Option : an individual choice within the menu; highlights on hover/focus and shows a checkmark when selected.
PropTypeRequiredDefaultDescription
'aria-label'string | undefinedfalse--
placeholderstring | undefinedfalse--
idstring | undefinedfalse-id will be applied to trigger
classNamestring | undefinedfalse-Class name will be applied to trigger
maxHeightnumber | undefinedfalse-Max height of options menu
minWidthnumber | undefinedfalse-Min width of the select
valueContainerWidth"auto" | "100%" | undefinedfalse-Width of the selected value container
portalboolean | undefinedfalse-Render dropdown menu in a portal.
triggerPropsanyfalse-Props to apply to Radix Select.Trigger within
contentPropsanyfalse-Props to apply to Radix Select.Content within
onChange((event: { target: { value: string; }; }) => void) | undefinedfalse-Callback meant for use with react-hook-form’s useForm (or Persona’s useFormSecurely)
sizeanyfalse--
valuestring | null | undefinedfalse--
widthstring | undefinedfalse--
headerReactNodefalse--
footerReactNodefalse--
zIndexZIndex | undefinedfalse-z-index of content. Please use sparingly.
  • When users must pick one item from a short, known list.
  • When space is limited and inline radios or checkboxes would be too bulky.
  • Use Combobox when users need to search or filter a larger set of options.
  • Use Combobox when users should be able to select multiple options from a list.
  • Use Radio Buttons for small sets with a single, always-visible choice.
  • Use Checkboxes for small sets requiring multiple, always-visible choices.
  • Use a Dropdown Button when the goal is to trigger an action, not choose a value.

Do

  • Wrap select in FormField for proper labeling and helper/error text.
  • Keep option labels concise and mutually exclusive.
  • Order options logically (alphabetical, semantic, or by frequency).
  • Set sensible defaults or placeholders (e.g., “Select country”).
  • Constrain menu height and enable scrolling for longer lists.

Don't

  • Use select for a very longlists, use combobox instead.
  • Use select to perform actions like “Delete” or “Download,” use a button/menu.
  • Rely on placeholder text as the only label.
  • Overload options with long sentences or dense metadata.
  • Use FormField to associate label → input (for/id) and helper/error via aria-describedby.
  • Expose correct roles and attributes:
    • Trigger/button with aria-haspopup="listbox" and aria-expanded.
    • Menu uses role="listbox"; options use role="option" with aria-selected.
  • Support keyboard navigation.
  • Announce selection changes to assistive technologies.
  • Use clear, scannable labels (sentence case): “Select country”.
  • Keep option text short; avoid jargon and abbreviations.
  • For placeholders, use instructive text (“Select status”), not valid values.
  • For multiselect, keep chip text concise and support truncation when space is limited.
  • Align terminology with the rest of the product for consistency.