Skip to main content

Radio Buttons

Luke van Zyl·Updated April 6, 2026

Overview

Radio buttons let users select exactly one option from a set of two or more. Use them when the choices are mutually exclusive and should all be visible at once so users can compare before committing.

Sandbox

Specs

Anatomy

  1. Button — The circular control that displays selected or unselected state.
  2. Selection indicator — A filled dot visible when the option is selected.
  3. Label (optional) — Text describing the option. Provided via Input Control Group.

Usage

Radio buttons are for single-choice selections where all options should be visible at once. Use them when the choice is mutually exclusive and the user benefits from comparing options before committing.

  • Choosing one setting from a short set (e.g., Email, Text, Phone)
  • Selecting a single category or mode (e.g., Small, Medium, Large)
  • Picking one workflow path (e.g., New customer vs. Existing customer)

Keep groups to 2–8 options. If you need more, use a dropdown or searchable select instead.

When not to use: Don't use radio buttons when multiple selections are allowed. Use checkboxes instead.

d41543b2-c521-4d62-b80b-64c1237316b4.png

CleanShot_2026-01-21_at_09.55.36.png

Best Practices

DoDon't
Use radio buttons for single-choice selections onlyDon't use radio buttons when multiple selections are allowed — use checkboxes
Keep groups to 2–8 optionsDon't use radio buttons for long lists; use a dropdown or searchable select
Write labels that are clear, parallel, and specificDon't mix independent choices in a single radio group
Select a sensible default when most users will pick the same optionDon't rely on selected state alone to communicate meaning; the label must do the work
Make the entire row clickable: control and labelDon't disable an option without a way for users to understand why

Accessibility

  • Provide a group label: Every radio group should have a clear, descriptive label that explains what the user is choosing (e.g., “Preferred contact method”).
  • Use a single group container: Implement radios within a semantic group (e.g., fieldset + legend, or an element with role="radiogroup" + an accessible name).
  • Ensure labels are programmatically associated: Each radio must have an explicit label relationship (e.g., label + for, or aria-labelledby). Don’t rely on placeholder text or position.
  • Make the whole row clickable: The tap/click target should include both the control and its label to support touch users and reduce precision needs.
  • Keyboard support (required):
    • Tab moves focus into and out of the radio group.
    • Arrow keys move focus and selection between options (Up/Left = previous, Down/Right = next).
    • Space/Enter selects the focused option (depending on platform conventions).
  • Focus visibility: Show a clear, high-contrast focus indicator on the focused radio (or the selected/focused row) and don’t remove the browser focus ring without a strong replacement.
  • Selection is mutually exclusive: Selecting one option must automatically unselect the previous option within the same group.
  • State is conveyed beyond color: Selected, focused, disabled, and error states must be communicated with more than color alone (shape, icon, text, or outline).
  • Disabled radios remain perceivable: Disabled options should still be readable; avoid overly low contrast for labels.
  • Announce help and errors: If the group has helper text or an error message, ensure it’s associated with the group so assistive tech reads it (e.g., aria-describedby).
  • Error placement is group-level: Treat validation and messaging as belonging to the group (not each individual option), unless only one option is invalid for a specific reason.
  • Keep labels meaningful: Labels should be concise and unambiguous when read aloud out of context (avoid “Option 1 / Option 2”).
  • Meet contrast requirements: Text and interactive elements (including focus indicators) should meet WCAG contrast guidance for readability and discoverability.