Free · 10 loaders · Copy-ready

CSS loaders, copy-ready.

Ten hand-authored loader animations with size / speed / color controls. Copy CSS + JSX in one click.

Size + speed

Size

48px

Speed

1200ms

Color

neutral
stone
zinc
slate
gray
red
orange
amber
yellow
lime
green
emerald
teal
cyan
sky
blue
indigo
violet
purple
fuchsia
pink
rose

CSS

.loader {
  width: var(--loader-size);
  height: var(--loader-size);
  border: calc(var(--loader-size) / 8) solid color-mix(in srgb, var(--loader-color) 25%, transparent);
  border-top-color: var(--loader-color);
  border-radius: 50%;
  animation: loader-spin var(--loader-speed) linear infinite;
}
@keyframes loader-spin { to { transform: rotate(360deg); } }

JSX

<div className="loader" role="status" aria-label="Loading" />
How it works

Four steps

  1. 1

    Pick a loader

    Ten styles: spinner, dots, bars, pulse, shimmer, segmented arc, and more.

  2. 2

    Dial size + speed

    Size in pixels, speed as animation duration. Preview runs live.

  3. 3

    Pick a color

    Full Tailwind palette. The loader renders with your brand color instantly.

  4. 4

    Copy

    CSS @keyframes, ready-to-paste markup, and a JSX snippet for React.

Questions

Frequently asked

Will this work with Tailwind?+

Yes — the snippet uses standard CSS custom properties, which Tailwind v4 consumes natively via @theme. The color you pick is emitted as a hex value, so it works in any CSS setup.

Can I animate with pure Tailwind?+

Not for these loaders — they rely on @keyframes that Tailwind utilities can't express. Copy the CSS into your stylesheet once and reference the class from JSX.

Are the animations performant?+

Yes. Every loader animates only transform and opacity, which compositor-accelerates on modern browsers. No layout thrash, no paint cost per frame.

More free tools

Keep building

— Shipping to the App Store?

Translating screenshots into every locale is what lokal was built for. Upload once, ship to every store.

Explore lokal