About this set
Checkboxes where the whole card is the click target. The set has bordered option cards with a title and a one-line description, a card that adds a price on the right for paid add-ons, and a compact tile grid where each tile turns dark when selected. Use the option cards for notification and preference settings, the price card for checkout extras, and the tiles for tags, teams or filters where the option names are short. Each card is a label that wraps a real checkbox, so a click anywhere on it toggles the input. The checked card gets a blue border and a soft ring through :has(input:checked), and keyboard focus is drawn on the card through :has(input:focus-visible). The Bootstrap version builds the cards from .card with a .form-check-input inside, and the tiles from .btn-check toggle buttons. The Tailwind version uses has-[:checked] and has-[:focus-visible] variants on the label. Several cards can be selected at once; for a single choice, see the radio card set.
What’s included
- Option cards with title and description
- Add-on card with a right-aligned price
- Tile grid that fills when selected
- Whole card is the click target
- Bootstrap tiles use .btn-check toggle buttons
Accessibility
Each card is a label around a real checkbox, so its title and description form the accessible name and the checked state is announced. Tab reaches every card and Space toggles it. The focused card shows a 2px blue outline offset from its border, and the tile group is labelled with role="group". Border, ring and colour transitions are disabled under prefers-reduced-motion.
Customise it
Plain CSS: change #2563eb and #dbeafe in the .ccard:has(input:checked) rule and #0f172a for the selected tile. Bootstrap: set --choice-accent on .choice-card and the --bs-btn-active-* variables on .btn-tile. Tailwind: swap blue-600, blue-100 and slate-900 in the has-[:checked] classes.






