Skip to main content
BEEQ Radio component overviewBEEQ Radio component overview

Radio component overview

Radio buttons present a list of options where only one can be active at a time. When a user selects a new option, the previous selection is cleared automatically. Use them inside a bq-radio-group to connect the options and manage state.
Always wrap bq-radio elements inside a bq-radio-group. The group manages selection state, keyboard navigation, form association, and accessibility — an isolated bq-radio cannot do this on its own.

When to use

Use radio buttons when
  • Users must select exactly one option from a short list (2–7 items)
  • All available options need to be visible so users can compare them before choosing
  • The choice persists until the user actively changes it
  • An option needs to trigger a visible change in the surrounding form or UI
Do not use radio buttons when
  • Multiple selections are allowed — use Checkbox instead
  • The list is long and searchable — use a Dropdown instead
  • A binary on/off toggle is all that is needed — a toggle or checkbox is clearer
  • The options are so numerous that displaying them all creates visual noise
Choose bq-checkbox instead of bq-radio-group when users can select several options, bq-switch when the choice is a single on/off setting that applies immediately, bq-select when the list is too long to show every option in a form, and bq-dropdown when the options trigger actions instead of setting a form value.

Patterns

Default

By default, a radio button remains unchecked, implying it remains inactive until selected.

Selected

Once a radio button is selected, it becomes active, signifying its chosen status.

Anatomy

BEEQ Radio component anatomyBEEQ Radio component anatomy

Radio component anatomy

A radio button consists of a circular icon and a text label. The icon changes appearance depending on whether the option is selected or unselected.

Design guidelines

Usage

Default

Wrap bq-radio elements inside a bq-radio-group. Set a matching value on the group to pre-select one option. The group handles all state synchronization.

Options

Disabled

Set disabled on the group to prevent all interaction. You can also disable individual bq-radio elements when only specific options are unavailable.

Horizontal

Use orientation="horizontal" to arrange options side by side. Best for short labels and a small number of choices where vertical space is limited. Allowed orientation values: vertical (default), horizontal. Any other value falls back to vertical.

Fieldset

Add the fieldset attribute to render a visible border and legend around the group. Use this when the radio group is one of several distinct sections in a form that need visual separation.

Background on hover

Set background-on-hover on the group to show a filled highlight on every label row when the user hovers. Inside a group, bq-radio-group overrides the value set on individual bq-radio elements. This increases the perceived click area in spacious layouts.

Form integration

bq-radio-group submits the selected radio value with the form. Use required and required-validation-message on the group when users must choose one option before submission.

Best practices

DoAlways provide a group label via the label slot on bq-radio-group so screen readers announce the question or field name when focus enters the group.
Don’tLeave the label slot empty — users relying on assistive technology will not know what the radio group is asking.
DoPre-select a sensible default by setting value on the group so the form always has a valid starting state and users understand which option is active on first view.
Don’tLeave all options unselected when one choice is always required — an empty radio group can cause confusing form validation errors on submit.
DoWrite option labels as nouns or short phrases that clearly describe each choice so users can compare them at a glance.
Don’tUse vague labels like “Option 1” or “Yes/No” when more descriptive text would make the choice immediately understandable without additional context.
DoUse disabled on the entire group when the choice is unavailable in the current context, and explain why it is locked via nearby helper text.
Don’tDisable individual radio options without a visible explanation — users will not know whether the option is temporarily locked or permanently unavailable.

Accessibility

  • Built in: bq-radio-group always renders a <fieldset> with a <legend> that holds the label slot. The fieldset property only adds the visible border.
  • Built in: each bq-radio native <input type="radio"> carries aria-checked, aria-disabled, and aria-labelledby pointing to its visible label element.
  • Built in: arrow keys focus and select the adjacent enabled radio, skip disabled radios and wrap at the ends. All four arrow keys work in both orientations; orientation controls layout only.
  • Built in: only one radio in the group receives tabindex="0" at a time (the selected or first enabled option), keeping the tab stop count low.
  • Your responsibility: you must populate the label slot on bq-radio-group with meaningful group text.
  • Your responsibility: you must provide meaningful text inside each bq-radio slot. The aria-labelledby on the native input points to the label span, so empty or icon-only labels are not announced.
  • Your responsibility: when you disable the group, you should add visible helper text nearby explaining why the options are unavailable.

Keyboard interaction

All four arrow keys work in both orientations. A disabled group has no tab stop.

Rules

API reference

bq-radio properties

bq-radio-group properties

Invalid combinations

bq-radio methods

bq-radio events

bq-radio-group events

bq-radio slots

bq-radio-group slots

bq-radio shadow parts

bq-radio-group shadow parts

CSS custom properties

Resources

Interactive playground

Explore Radio variants and states in Storybook

Source code

View the component source on GitHub