Pure CSS
No JavaScript, no animated GIF, no SVG file dependency. The spinner is a single div with a border and an animation, requiring zero additional HTTP requests. It renders identically across all modern browsers and scales cleanly to any size.
500+ fast, free tools. Most run in your browser only; Image & PDF tools upload files to the backend when you run them.
Browse spinner presets, tweak size speed and color, and copy animation-ready CSS.
Loading spinners tell users the interface is working, not frozen — a critical feedback mechanism for API calls, form submissions, and file processing. While animated GIF and SVG spinners require external assets and limited customization, pure CSS spinners use a circular border with one colored arc that rotates indefinitely via @keyframes. The CSS Spinner Generator lets you set size, border thickness, track color, accent color, and animation speed to match your exact component — whether that is a 16px inline button spinner, a 40px card placeholder, or a full-page loading overlay. Choose from ring, dual-ring, and dot variants. The output includes both the spinner class and the required @keyframes spin block, ready to paste and run.
No JavaScript, no animated GIF, no SVG file dependency. The spinner is a single div with a border and an animation, requiring zero additional HTTP requests. It renders identically across all modern browsers and scales cleanly to any size.
The animation duration slider lets you set the exact rotation period in seconds. Fast spinners (0.6–0.8s) convey urgency for quick operations; slower spinners (1.2–1.6s) feel more relaxed for longer background tasks. Most spinners default to 1s linear.
Border width controls the visual weight of the spinner ring. Thin borders (2px) work inside inline buttons without dominating the surrounding text; thicker borders (6–8px) are more visible at larger sizes and in loading overlay contexts.
Separate pickers for track and accent let you precisely match your design system. A white accent on a transparent track works inside dark buttons; an indigo accent on a light-gray track matches most light-mode dashboards. Both colors are tokenizable.
The ring spinner is the classic loading indicator. The dual-ring adds a second counter-rotating arc for more visual interest. The dot style uses multiple scale-animated circles for a pulsing loader. All three share the same size and speed controls.
The output includes both the .spinner rule and the @keyframes spin block. Forgetting the keyframes is the most common reason a spinner does not animate after pasting — this generator outputs both together so nothing is missing.
Input: Size: 40px, thickness: 4px, track: #f3f4f6, accent: #6366f1, speed: 0.8s
Output: .spinner { border: 4px solid #f3f4f6; border-top-color: #6366f1; border-radius: 50%; width: 40px; height: 40px; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } }
Input: Size: 64px, thickness: 6px, track: #e5e7eb, accent: #4b5563, speed: 1.4s
Output: .spinner { border: 6px solid #e5e7eb; border-top-color: #4b5563; border-radius: 50%; width: 64px; height: 64px; animation: spin 1.4s linear infinite; }
Input: Size: 16px, thickness: 2px, track: rgba(255,255,255,0.3), accent: #ffffff, speed: 0.6s
Output: .spinner { border: 2px solid rgba(255,255,255,0.3); border-top-color: #ffffff; border-radius: 50%; width: 16px; height: 16px; animation: spin 0.6s linear infinite; }