Snippets Checkbox

Bootstrap 5 Fancy Checkbox and Radio Cards

Radio buttons and checkboxes restyled as animated, selectable option cards, plus a compact inline variant, all built on native inputs.

Bootstrap 5 No jQuery Aug 2019 2.3K views

<section class="wdw-stage">
  <div class="container" style="max-width:860px">
    <div class="text-center mb-4 mb-lg-5">
      <span class="wdw-eyebrow">Form controls</span>
      <h2 class="wdw-heading display-6 mt-1 mb-2">Fancy checkboxes and radios</h2>
      <p class="wdw-muted mb-0">Selectable cards and animated controls, built on native inputs.</p>
    </div>
    <div class="row g-4" id="fancyDemo">
      <div class="col-lg-6">
        <div class="wdw-card p-4 h-100 d-flex flex-column">
          <h3 class="h6 fw-bold mb-1">Choose a plan</h3>
          <p class="small wdw-muted mb-3">Radio buttons as selectable cards.</p>
          <fieldset class="d-grid gap-2 mb-3">
            <legend class="visually-hidden">Plan</legend>
            <div>
              <input type="radio" class="fancy-input" name="plan" id="plan-starter" value="0" data-name="Starter">
              <label class="fancy-option" for="plan-starter"><span class="fancy-mark fancy-mark--radio"></span><span class="flex-grow-1"><strong class="d-block">Starter</strong><span class="small wdw-muted">For side projects</span></span><span class="fancy-price">$0</span></label>
            </div>
            <div>
              <input type="radio" class="fancy-input" name="plan" id="plan-pro" value="12" data-name="Pro" checked>
              <label class="fancy-option" for="plan-pro"><span class="fancy-mark fancy-mark--radio"></span><span class="flex-grow-1"><strong class="d-block">Pro <span class="badge rounded-pill text-bg-primary ms-1 align-middle">Most popular</span></strong><span class="small wdw-muted">For growing teams</span></span><span class="fancy-price">$12</span></label>
            </div>
            <div>
              <input type="radio" class="fancy-input" name="plan" id="plan-scale" value="49" data-name="Scale">
              <label class="fancy-option" for="plan-scale"><span class="fancy-mark fancy-mark--radio"></span><span class="flex-grow-1"><strong class="d-block">Scale</strong><span class="small wdw-muted">Unlimited everything</span></span><span class="fancy-price">$49</span></label>
            </div>
          </fieldset>
          <div class="fancy-total mt-auto d-flex align-items-center justify-content-between gap-3 rounded-4 px-3 py-3" aria-live="polite">
            <span class="small fw-semibold" id="fancySummary">Pro</span>
            <span class="fw-bold fs-5"><span id="fancyTotal">$16</span><span class="small fw-medium wdw-muted">/mo</span></span>
          </div>
        </div>
      </div>
      <div class="col-lg-6">
        <div class="wdw-card p-4 h-100 d-flex flex-column">
          <h3 class="h6 fw-bold mb-1">Add-ons</h3>
          <p class="small wdw-muted mb-3">Checkboxes as selectable cards.</p>
          <fieldset class="d-grid gap-2 mb-3">
            <legend class="visually-hidden">Add-ons</legend>
            <div>
              <input type="checkbox" class="fancy-input" id="ao-1" value="4" checked>
              <label class="fancy-option" for="ao-1"><span class="fancy-mark"></span><span class="flex-grow-1">Priority support</span><span class="fancy-price">+$4</span></label>
            </div>
            <div>
              <input type="checkbox" class="fancy-input" id="ao-2" value="2">
              <label class="fancy-option" for="ao-2"><span class="fancy-mark"></span><span class="flex-grow-1">Custom domain</span><span class="fancy-price">+$2</span></label>
            </div>
            <div>
              <input type="checkbox" class="fancy-input" id="ao-3" value="3">
              <label class="fancy-option" for="ao-3"><span class="fancy-mark"></span><span class="flex-grow-1">Weekly reports</span><span class="fancy-price">+$3</span></label>
            </div>
          </fieldset>
          <div class="mt-auto border-top pt-3">
            <p class="small fw-semibold mb-2">Bootstrap switches</p>
            <div class="d-flex flex-wrap column-gap-4 row-gap-2">
              <div class="form-check form-switch mb-0"><input class="form-check-input" type="checkbox" role="switch" id="sw-1" checked><label class="form-check-label" for="sw-1">Email me</label></div>
              <div class="form-check form-switch mb-0"><input class="form-check-input" type="checkbox" role="switch" id="sw-2"><label class="form-check-label" for="sw-2">Auto-renew</label></div>
            </div>
          </div>
        </div>
      </div>
      <div class="col-12">
        <div class="wdw-card-sm p-3 px-4 d-flex flex-wrap align-items-center gap-3">
          <p class="small fw-semibold mb-0 me-md-2">Inline style</p>
          <div class="d-flex flex-wrap gap-2">
            <div><input type="radio" class="fancy-input" name="inl" id="inl-1" checked><label class="fancy-inline" for="inl-1"><span class="fancy-mark fancy-mark--radio"></span>Check this</label></div>
            <div><input type="radio" class="fancy-input" name="inl" id="inl-2"><label class="fancy-inline" for="inl-2"><span class="fancy-mark fancy-mark--radio"></span>or this</label></div>
            <div><input type="checkbox" class="fancy-input" id="inl-3"><label class="fancy-inline" for="inl-3"><span class="fancy-mark"></span>and maybe this</label></div>
          </div>
        </div>
      </div>
    </div>
  </div>
</section>

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.

Free to use in personal and commercial projects under the MIT license.