A CSS radio button is a styled mutually-exclusive form control that lets users pick one option from a set. These 18 hand-coded designs are ready-to-ship radio styles for settings panels, payment-method pickers, plan selectors, and survey forms — copy the markup, drop into your form, and ship.
18 unique radios18 Pure CSS0 dependencies100% copy-paste readyPublished
01 / 18
Concentric Pulse
Pure CSS
Classic outer ring with inner dot — on check the dot bursts outward then settles into place. The benchmark every radio is measured against.
Selecting a radio fires a soft expanding halo that radiates outward from the dot — pure CSS, animation runs once per selection via a keyframed box-shadow ripple.
Visually hide the native input type=radio (using a class with position:absolute / opacity:0, NOT display:none — that breaks keyboard focus), then style the adjacent label or a sibling span as the custom indicator. Use the :checked pseudo-class on the input plus an adjacent-sibling selector (input:checked + label) to switch the indicator state.
Are these custom radio buttons accessible?
Yes. Each demo uses a real native input type=radio that remains keyboard-focusable and screen-reader-announced. Custom visuals are pure presentation; semantics, form submission, name-grouping for mutual exclusivity, and arrow-key navigation all work natively.
Do I need JavaScript to make these radio buttons work?
No — all 18 demos are 100% pure CSS. State machines run on :checked plus sibling selectors and :has(). Animations use pure CSS keyframes. The only JS in the gallery is for tab switching and copy-to-clipboard on the code panel.
What's the difference between a radio button and a checkbox?
Radio buttons are mutually exclusive within a name group — picking one auto-deselects the others (one of many). Checkboxes are independent — any combination can be checked at once (any of many). Use radios for plan tiers, payment methods, single-answer questions; checkboxes for filters, multi-select tags, and consent boxes.
Can I use these in any framework?
Yes. Plain HTML and CSS, no dependencies, no build step. Drop the markup into React (with className), Vue, Svelte, Astro or static HTML — the styles work as-is. MIT licensed.