← All effects

Skeleton Shimmer

LoaderVanilla JS · zero dependenciesbackground-position only
-- fps
prefers-reduced-motion detected — skeleton shown without the sweep

X-ray · layers

the gray content stand-ins
the band of light
cards shimmer in turn, not in unison

Parameters

Sweep time1.4 s
Band width30%
Tilt15°
Card delay0.25 s
your version · updates as you tinker

How this effect works

A skeleton screen is a promise: "content is coming, and it will be this shape." The blocks are plain gray divs sized like the avatar, title and text they stand in for. The sheen is one wide linear gradient — transparent, a soft white band, transparent again — laid over each block with background-size: 250%, so there's room for the band to travel. Every frame we move its background-position from one side to the other; the browser never repaints the gradient itself, just shifts it.

The stagger layer offsets each card's clock by a fixed delay, so the light appears to travel across the page, card by card — one shared wave washing over the interface instead of everything blinking in lockstep. That reads as "the system is working through it", which is exactly the feeling a loading state should sell.

Production notes: respects prefers-reduced-motion (static skeleton — the shape promise still works without the sweep) · animating background-position on a handful of blocks is cheap · keep skeletons honest: match the real content's layout or the swap will jar · the copied snippet is self-contained HTML + CSS + JS.