CSS Loading Spinners
18 pure-CSS loading spinners — rings, dots, bars, pulse, ripple, skeleton shimmer — with colour, size and speed controls and copyable HTML + CSS.
🔒 Runs in your browser — files never leave your deviceFree · No sign-up
Loaders
Settings
Colour
Track / second colour
Preview background
Size 48px
Thickness 5px
Duration 1.0s
Accessibility
—
HTML
CSS
How to build a CSS loading spinner
- Pick a loader from the gallery — rings, dots, bars, pulses, a skeleton shimmer and an indeterminate progress bar are all there.
- Set the colour, the track colour, the size, the stroke thickness and the duration; the stage shows the animation at full size.
- Copy the HTML and the CSS (or both at once) and paste them into your project — no images, no JavaScript, no library.
FAQ
Do these need JavaScript?
No. Every loader here is one element (sometimes with a few empty spans) plus CSS keyframes. Show and hide it however your app already does.
What is the reduced-motion fallback for?
Some people set “reduce motion” in their OS. The optional block wraps the animation in @media (prefers-reduced-motion: reduce) and slows or stops it, which keeps the loader accessible without removing it.
Can I use these inside a button?
Yes — pick a small size (16–24px), set the colour to currentColor in the copied CSS and drop the element next to the label. It will inherit the button's text colour.