Components · Form

Radio button

A radio button lets the user choose exactly one of two or more mutually exclusive options. Choosing one clears the others in the group.

Tokens, sizes, measurements, states and requirements. Values come from the live token package and from Figma: Radio Button.

Design Tokens

Resolved from the live token package.

StatePartTokenValue

Sizes

SizeTotal areaCircleMarginDotLabel
Large24×24px16px4px6pxbody-md: 16/22, from 769px 17/24, 0.32px
Small20×20px14px3px6pxbody-sm: 14/20, 0.36px

Only Large and Small exist. The hint message is body-sm (14/20, 0.36px) in both. The 1px border has no width token (--border-brd-1 is a full shorthand), so 1px is written out.


Measurements

Dimensions

Circle and margin of each size. The shaded area is the 4px margin (3px in Small) that leaves room for the focus ring; the lines show its value.

The circle at 4× size. The numbers are read from the component and are real pixels.
AttributeLargeSmall (.form-radio-item--sm)
Area24×24px20×20px
Circle16px, 1px border14px, 1px border
Margin around the circle4px3px
Dot6px, a radial gradient
Focus ring2px line, 2px offset2px line, 2px offset
Gap, circle to label8px8px
Gap, label to message4px4px

Spacing

The same margin and gaps as spacing tokens.

PartLargeSmall
Margin around the circlespace-43px: no spacing token
Gap circle to labelspace-8space-8
Gap label to messagespace-4space-4
Gap between options in a groupspace-4space-4

There is no spacing token for 3px. The Small margin is 3px in Figma. Open point: keep 3px, or add a token.


States

All eight states from Figma. Hover and focus are forced on this page; in your code they come from :hover and :focus-visible. “Selected” rows are Selected, Selected hover, Selected focus and Disabled selected.

Breakpoint
Size
StateUnselectedSelected

Typography

PartTypeSize / line heightLetter spacingWeight
Label, Largebody-md16/22 mobile, 17/24 from 769px0.32pxRegular
Label, Smallbody-sm14/200.36pxRegular
Messagebody-sm14/200.36pxRegular
Legendlabel-sm (mobile), label-md (desktop)12/12 mobile, 16/16 from 769px0.48pxBold, uppercase

Breuer Condensed with ss02, ss03 and ss06 for the label. The disabled label and message use text-disabled.


Structure

Elements

ElementClassNotes
Groupform-radio-groupA fieldset with a legend. Vertical by default, options 4px apart.
Optionform-radio-item, --smThe label around the input and the text.
Circle and dotinput[type="radio"]appearance: none on the native input. The dot is a radial gradient.
Option with messageform-radio-fieldWraps the option and its message.
Messageform-radio-messageOptional hint, 4px below the label.

Types

TypeHowUse
Vertical groupDefaultAny number of options.
Horizontal groupflex-direction: row on the groupTwo short options only.
With messageform-radio-fieldAn option that needs an explanation.
Smallform-radio-item--smDense layouts.

Width

An option is as wide as its label. The click target is the whole label.


Motion

None. The radio changes state at once, with no transition and no animation.


Behavior

InputResult
Click circle or labelSelects that option and clears the others in the group.
TabEnters the group once (the selected radio, or the first). The ring shows on keyboard focus only.
Arrow keysMove and select the next or previous option in the group. Native: needs the same name.
Groupfieldset with a legend; every radio shares one name.
DisabledNot focusable. Grey fill, light border, text-disabled label and message.
DefaultPreselect one option in every group unless the user must choose consciously.

Accessibility Requirements

TopicRequirement
ElementA native <input type="radio">. The role, the state and the arrow-key behavior come from the browser.
GroupA <fieldset> with a <legend>; every radio shares one name.
NameThe input and the text are wrapped in one <label>.
FocusRing with border-focus, 2px, offset 2px, on :focus-visible (WCAG 2.4.7, 1.4.11).
ColorSelected is not shown by color alone: the dot is a shape and the border is thicker in color.
DisabledNot focusable. Disabled tokens are exempt from contrast requirements.