Skip to content
Esc

Docs / Components

Radio

Selects exactly one option from a set.

Never alone

Always use two or more, with one selected by default or an explicit “None”. A single radio cannot be unselected, so it is a trap: use Checkbox or Switch instead.

Selected

off · on. There is no indeterminate state: for partial selection, use Checkbox.

States and sizes

The same as Checkbox: default · hover · disabled · error with an optional focus ring, and sizes sm 16 · md 20 (default) · lg 24.

Figma properties

selected, state, size, show-label + label, show-description + description, show-focus-ring.

Code

<fieldset class="flex flex-col gap-3">
  <legend class="text-body-sm font-semibold text-text-primary mb-1">Delivery</legend>
  <label class="inline-flex items-start gap-2">
    <input type="radio" name="delivery" value="standard" checked
      class="mt-0.5 size-5 accent-[var(--color-action-primary-default)] focus-visible:shadow-focus-ring">
    <span>
      <span class="block text-body-md text-text-primary">Standard</span>
      <span class="block text-body-sm text-text-secondary">3–5 business days, free.</span>
    </span>
  </label>
  <label class="inline-flex items-start gap-2">
    <input type="radio" name="delivery" value="express"
      class="mt-0.5 size-5 accent-[var(--color-action-primary-default)] focus-visible:shadow-focus-ring">
    <span class="text-body-md text-text-primary">Express</span>
  </label>
</fieldset>

Do

  • Preselect the safest option, or add an explicit “None”.
  • Stack vertically: a column is far easier to scan than a row.
  • Keep the options mutually exclusive and parallel in wording.
  • Five options or fewer; past that, use a select.

Don’t

  • A lone radio: the user can never undo the choice.
  • Radio for independent options: that is Checkbox.
  • Options that overlap in meaning.
  • Submit the form the moment a radio is picked.