Kodza

Choice Cards

Cards to compare and pick, on real radio buttons or checkboxes, with a title, a line and an optional price. The picked card's ink border draws itself around it from the corner while a check draws in its mark. Pure CSS.

Forms No dependencies choice cardsradio cardsplan pickerdelivery optionscheckboxform Added Nov 2026
/anim/choice-cards/ GitHub Fullscreen

With your AI

Just ask.

Say it to your AI. It gets the exact code below, not its best guess, and knows where it goes.

Add the Kodza Choice Cards to my page.

Not plugged in yet?
claude mcp add -t http kodza https://kodza.dev/api/mcp
Also in Codex, Cursor and VS Code.
kodza-choice-cards.html
<fieldset class="kodza-choice-cards">
  <legend class="kodza-choice-cards__legend">How should it get to you?</legend>
  <div class="kodza-choice-cards__list">
    <label class="kodza-choice-cards__card">
      <input class="kodza-choice-cards__input" type="radio" name="delivery" value="standard" checked>
      <span class="kodza-choice-cards__mark" aria-hidden="true"><svg class="kodza-choice-cards__svg" viewBox="0 0 20 20" width="20" height="20"><path class="kodza-choice-cards__check" d="M6 10.4l2.6 2.6L14 7.4" pathLength="1"/></svg></span>
      <span class="kodza-choice-cards__title">Standard</span>
      <span class="kodza-choice-cards__text">3 to 5 working days. Tracked, no surprises.</span>
      <span class="kodza-choice-cards__price">Free</span>
    </label>
    <label class="kodza-choice-cards__card">
      <input class="kodza-choice-cards__input" type="radio" name="delivery" value="express">
      <span class="kodza-choice-cards__mark" aria-hidden="true"><svg class="kodza-choice-cards__svg" viewBox="0 0 20 20" width="20" height="20"><path class="kodza-choice-cards__check" d="M6 10.4l2.6 2.6L14 7.4" pathLength="1"/></svg></span>
      <span class="kodza-choice-cards__title">Express</span>
      <span class="kodza-choice-cards__text">Tomorrow before noon if you order by 6 pm.</span>
      <span class="kodza-choice-cards__price">€9</span>
    </label>
    <label class="kodza-choice-cards__card">
      <input class="kodza-choice-cards__input" type="radio" name="delivery" value="pickup">
      <span class="kodza-choice-cards__mark" aria-hidden="true"><svg class="kodza-choice-cards__svg" viewBox="0 0 20 20" width="20" height="20"><path class="kodza-choice-cards__check" d="M6 10.4l2.6 2.6L14 7.4" pathLength="1"/></svg></span>
      <span class="kodza-choice-cards__title">Pickup</span>
      <span class="kodza-choice-cards__text">Nantes, quai de la Fosse. Bring the code.</span>
      <span class="kodza-choice-cards__price">Free</span>
    </label>
  </div>
</fieldset>

<fieldset class="kodza-choice-cards">
  <legend class="kodza-choice-cards__legend">What brings you here? Pick all that apply.</legend>
  <div class="kodza-choice-cards__list">
    <label class="kodza-choice-cards__card">
      <input class="kodza-choice-cards__input" type="checkbox" name="goal" value="launch">
      <span class="kodza-choice-cards__mark" aria-hidden="true"><svg class="kodza-choice-cards__svg" viewBox="0 0 20 20" width="20" height="20"><path class="kodza-choice-cards__check" d="M6 10.4l2.6 2.6L14 7.4" pathLength="1"/></svg></span>
      <span class="kodza-choice-cards__title">A launch this week</span>
      <span class="kodza-choice-cards__text">Landing page, waitlist, the usual panic.</span>
    </label>
    <label class="kodza-choice-cards__card">
      <input class="kodza-choice-cards__input" type="checkbox" name="goal" value="client" checked>
      <span class="kodza-choice-cards__mark" aria-hidden="true"><svg class="kodza-choice-cards__svg" viewBox="0 0 20 20" width="20" height="20"><path class="kodza-choice-cards__check" d="M6 10.4l2.6 2.6L14 7.4" pathLength="1"/></svg></span>
      <span class="kodza-choice-cards__title">A client site</span>
      <span class="kodza-choice-cards__text">WordPress, and a theme you did not pick.</span>
    </label>
    <label class="kodza-choice-cards__card">
      <input class="kodza-choice-cards__input" type="checkbox" name="goal" value="looking">
      <span class="kodza-choice-cards__mark" aria-hidden="true"><svg class="kodza-choice-cards__svg" viewBox="0 0 20 20" width="20" height="20"><path class="kodza-choice-cards__check" d="M6 10.4l2.6 2.6L14 7.4" pathLength="1"/></svg></span>
      <span class="kodza-choice-cards__title">Just looking</span>
      <span class="kodza-choice-cards__text">Fair. Copy something anyway.</span>
    </label>
  </div>
</fieldset>

Checked

Checked before you paste.

Robots poked at it before you did. Every component goes through the same checks, and again each time it changes.

What ranLast run
Accessibilityaxe-core 4.10.2: the WCAG 2.1 A and AA rules, plus best practices. 0 issues
KeyboardThe Tab key gets there, and the focus ring shows when it does. Passed
Reduced motionTurn on reduced motion and what moved just appears. Nothing loops. Passed
Light and darkThe same checks on both themes, contrast included. Passed
WordPressPasted into Twenty Twenty-Five, Twenty Twenty-One, Astra, Blocksy, GeneratePress, Hello Elementor, Kadence and OceanWP. Nothing to flag. 8 / 8 themes
Robots checked this. A human with VoiceOver hasn't yet.
KeyboardPress them in the preview
On a card with a round mark
  • Picks the next card, round and round→/↓
  • Picks the previous card, round and round←/↑
On a card with a square mark
  • Picks the card or lets it goSpace

More like this

More in Forms