A CSS checkbox is a styled multi-select form control that lets users pick zero or more options. These 23 hand-coded designs are ready-to-ship checkbox styles for filter bars, settings panels, terms-of-service blocks, and todo lists — copy the markup, drop into your form, and ship.
The native checkbox is hard to restyle directly, so the standard technique is: keep the real input type=checkbox for accessibility but visually hide it, then style a sibling element (a label or a span) as the visible box. Use the :checked pseudo-class to change that custom box when the input is ticked. Every checkbox in this gallery uses this pattern, so the control stays keyboard- and screen-reader-accessible while looking completely custom.
Can you make a custom CSS checkbox without JavaScript?
Yes — most of these are pure CSS. The :checked pseudo-class on the hidden input drives the whole visual change: the checkmark draw, glow, fill, bounce or flip all run from input:checked ~ .box rules. JavaScript is only used in a couple of celebratory demos (like the confetti burst) for effects CSS can't produce.
How do I animate the checkmark when a checkbox is ticked?
Draw the tick with SVG stroke animation or a CSS-drawn shape. The Draw Stroke demo uses an SVG path with stroke-dasharray and stroke-dashoffset, animated to 0 on :checked so the checkmark appears to draw itself. CSS-only ticks use two pseudo-element bars rotated into an L shape, revealed with a transition. Both approaches are pure CSS.
Are these CSS checkboxes accessible?
Yes. Every demo keeps the real input type=checkbox in the DOM (visually hidden, never display:none, so it stays focusable), tied to a label so clicking the label toggles it. Keyboard users can Tab to it and toggle with Space, and a visible focus state is provided. The custom visuals never replace the native input — they sit on top of it.
Can I use these checkboxes in React or other frameworks?
Yes. Each demo is plain HTML and CSS — no dependencies, no build step. Drop the markup into React (use className and htmlFor), Vue, Svelte, Astro or static HTML and it works unchanged. All 23 designs are MIT licensed and free for commercial use.