Skip to content
Toolcroft

CSS Loader Generator

Color Tools

Build 16 pure CSS loaders, including skeletons, progress, orbit, ripple, and equalizers. Adjust size, speed, and color, then copy HTML and CSS.

Loader Type
Preview
<div class="tclg-status" role="status" aria-live="polite"><span class="tclg-sr-only">Loading…</span><div class="tclg-spinner" aria-hidden="true"></div></div>
@keyframes tclg-spinner-motion { to { transform: rotate(360deg); } }
.tclg-spinner { width: 40px; height: 40px; border: 5px solid #6366f140; border-top-color: #6366f1; border-radius: 50%; animation: tclg-spinner-motion 800ms linear infinite; }
.tclg-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
@media (prefers-reduced-motion: reduce) { .tclg-status, .tclg-status *, .tclg-status *::before, .tclg-status *::after { animation: none !important; } }

How to use this tool

  1. Select a loader type.
  2. Adjust size, color, and animation speed.
  3. Copy the HTML and CSS for use in your project.

How CSS loaders work

A CSS loader is a small HTML shape animated with @keyframes, so the copied snippet needs no JavaScript or image file. Choose one of 16 patterns, then adjust its size, color, and animation duration. The generator namespaces its classes and keyframe names with tclg- to reduce clashes when a snippet is pasted beside other styles. Most motion uses transform and opacity, which usually avoid repeated layout work; test the result in the page where it will appear, especially when several loaders animate at once.

Choose a pattern for the waiting state

The catalog includes spinner, dots, bars, pulse, ring, and bouncing styles, plus orbit, ripple, equalizer, wave, chase, dual ring, flip, and hourglass animations. These small indicators fit short actions such as submitting a form or waiting for a search result. Skeleton creates three shimmering placeholder lines, which work well when a card or article layout is known before its content arrives. The indeterminate progress bar moves across a track to show ongoing work, but it does not measure completion or represent a percentage.

Accessible output and reduced motion

The “Include accessibility + reduced-motion support” option is enabled by default. Its HTML wraps the visual shape in role="status" and aria-live="polite", includes visually hidden “Loading…” text for assistive technology, and marks the decorative animation as hidden. The generated CSS also includes a prefers-reduced-motion: reduce rule that stops the animation for visitors who have asked their device to reduce motion. The loader remains as a static shape; it does not replace the actual loading message or provide progress details.

Use a spinner or bouncing dot when the wait is brief and its duration is unknown. Prefer skeleton lines when they mirror the content layout, such as rows in a dashboard, because their shape helps set expectations about what will appear. Use this indeterminate bar for an upload or calculation only while its progress cannot be measured; if your application knows the completed fraction, use a progress element that reports that value instead. In every case, remove the loading state when the operation finishes, and keep important error or completion messages available as text.

Frequently asked questions

Are these loaders pure CSS?

Yes. No JavaScript or images are required - only HTML and CSS.

Browse all color tools