Skip to documentation
BoobstrapDocs
Forms

Radio

Build mutually exclusive single-select radio groups, descriptions, inline options, and validation feedback.

Forms guideCopy-ready referencev0.7.0 current
Forms

Radio

The .bs-check and .bs-check-input classes style native circular radio buttons for selecting exactly one option from a set.

Radio group

Billing cadence
HTML · Radio group
<fieldset class="bs-check-group">
  <legend class="bs-label">Billing cadence</legend>
  <label class="bs-check">
    <input class="bs-check-input" type="radio" name="billing" value="monthly" checked />
    <span class="bs-check-label">Monthly billing</span>
  </label>
  <label class="bs-check">
    <input class="bs-check-input" type="radio" name="billing" value="annual" />
    <span class="bs-check-label">Annual billing (Save 20%)</span>
  </label>
</fieldset>

Radio with descriptions

Deployment environment
HTML · Radio with descriptions
<fieldset class="bs-check-group">
  <legend class="bs-label">Deployment environment</legend>
  <label class="bs-check">
    <input class="bs-check-input" type="radio" name="env" value="production" checked />
    <span class="bs-check-label">Production</span>
    <span class="bs-check-description">
      Live traffic with multi-region redundancy and automatic failover.
    </span>
  </label>
  <label class="bs-check">
    <input class="bs-check-input" type="radio" name="env" value="staging" />
    <span class="bs-check-label">Staging</span>
    <span class="bs-check-description">
      Pre-release preview environment mirrored from production data.
    </span>
  </label>
</fieldset>

Inline radios

Color mode preference
HTML · Inline radios
<fieldset>
  <legend class="bs-label">Color mode preference</legend>
  <label class="bs-check bs-check-inline">
    <input class="bs-check-input" type="radio" name="theme_pref" value="system" checked />
    <span class="bs-check-label">System</span>
  </label>
  <label class="bs-check bs-check-inline">
    <input class="bs-check-input" type="radio" name="theme_pref" value="dark" />
    <span class="bs-check-label">Dark</span>
  </label>
  <label class="bs-check bs-check-inline">
    <input class="bs-check-input" type="radio" name="theme_pref" value="light" />
    <span class="bs-check-label">Light</span>
  </label>
</fieldset>

Disabled state

Database tier
HTML · Disabled radios
<fieldset class="bs-check-group">
  <legend class="bs-label">Database tier</legend>
  <label class="bs-check">
    <input class="bs-check-input" type="radio" name="db_tier" value="shared" checked disabled />
    <span class="bs-check-label">Shared cluster (Active)</span>
  </label>
  <label class="bs-check">
    <input class="bs-check-input" type="radio" name="db_tier" value="dedicated" disabled />
    <span class="bs-check-label">Dedicated instance (Requires enterprise plan)</span>
  </label>
</fieldset>

Valid state

Payment method
HTML · Valid radio
<div class="bs-form-group">
  <fieldset class="bs-check-group">
    <legend class="bs-label">Payment method</legend>
    <label class="bs-check">
      <input
        class="bs-check-input bs-is-valid"
        type="radio"
        name="payment"
        value="card"
        checked
        aria-invalid="false"
        aria-describedby="pay-feedback"
      />
      <span class="bs-check-label">Credit / Debit card (ending in 4242)</span>
    </label>
    <span class="bs-form-feedback bs-form-feedback-valid" id="pay-feedback">
      Card verified and ready for payment.
    </span>
  </fieldset>
</div>

Invalid state

Apply aria-invalid="true" or .bs-is-invalid to a required radio group that has not received a valid selection. The radio circles highlight in danger red and display the invalid message.

Storage location
HTML · Invalid radio group
<div class="bs-form-group">
  <fieldset class="bs-check-group">
    <legend class="bs-label">Storage location <span class="bs-label-required" aria-hidden="true">*</span></legend>
    <label class="bs-check">
      <input
        class="bs-check-input"
        type="radio"
        name="region"
        value="us"
        aria-invalid="true"
        aria-describedby="region-error"
        required
      />
      <span class="bs-check-label">North America (US East)</span>
    </label>
    <label class="bs-check">
      <input
        class="bs-check-input"
        type="radio"
        name="region"
        value="eu"
        aria-invalid="true"
        aria-describedby="region-error"
      />
      <span class="bs-check-label">Europe (Frankfurt)</span>
    </label>
    <span class="bs-form-feedback bs-form-feedback-invalid" id="region-error">
      Please select a primary storage region.
    </span>
  </fieldset>
</div>

Shared name attribute

Ensure all radio options within the same group share the exact same name attribute to guarantee mutual exclusivity.

Keyboard navigation

Radio groups support arrow-key navigation out of the box with native browser accessibility.

Radio API

Radio classes style mutually exclusive option sets, alignment, label association, and error feedback.

ClassPurpose
.bs-checkContainer element wrapping radio input, label text, and description.
.bs-check-inputCircular custom radio indicator with inner dot styling on checked state.
.bs-check-labelPrimary label text adjacent to the radio button.
.bs-check-descriptionSupporting explanatory text positioned under the radio label.
.bs-check-groupFieldset container grouping mutually exclusive radio options vertically.
.bs-check-inlineHorizontal layout modifier arranging radio controls side by side.
.bs-is-validPositive validation state styling for radio controls.
.bs-is-invalidNegative validation state styling with error border and focus accent.
.bs-form-feedback-validSuccess message text associated with valid group selection.
.bs-form-feedback-invalidError message text describing required or invalid radio choices.