✦ Zero build · Drop-in · Any framework

Animations that feel like magic. Ship in seconds.

Add a class. Get a polished, production-ready animation. Or go deeper — CSS variables, a JS timeline API, FLIP layout transitions, and scroll-driven effects. Everything in one library.

280+
Effect classes
28
CSS modules
9.3KB
JS bundle (min+gz)
0
Dependencies
gradient-animate
gradient-mesh
gradient-flow
Live animations everywhere
API Design

Three layers. One library.

Start with zero knowledge and add complexity only when you need it. Each layer is a superset of the one before.

Layer 0 — Zero Config
HTML attributes
One script tag. No CSS knowledge required. Add data-gleam and go.
<script src="gleam.bundle.min.js"></script>

<div data-gleam="fade-up"
     data-gleam-scroll
     data-gleam-delay="200">
  Hello world
</div>

<!-- Stagger children automatically -->
<ul data-gleam="fade-up"
    data-gleam-scroll
    data-gleam-stagger="80">
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
</ul>
Layer 1 — CSS Classes
Class-based API
Full control via CSS variables. Compose effects, tweak timing, no JS required.
<link rel="stylesheet"
      href="gleam.all.min.css">

<div class="gleam entrance-rise
           util-duration-700
           util-delay-200">
  Silky entrance
</div>

/* Customise per-element */
.my-card {
  --duration: 800ms;
  --ease: var(--ease-spring);
  --distance: 40px;
}
Layer 2 — JS API
Full programmatic control
Timeline sequencing, FLIP layout transitions, stagger, event-driven effects.
// Sequence with timeline
gleam.timeline()
  .add('.hero',    'rise')
  .add('.subtitle', 'fade-up', { delay: 150 })
  .add('.cards',    'fade-up', { stagger: 80 })
  .play();

// FLIP list sort
gleam.flip('.list', () => {
  items.sort(byDate).forEach(i => list.append(i));
});

// Animate on event
gleam.on('.btn', 'click', '#panel', 'rise');
Interactive

Click anything. See it live.

Browse all 280+ effects. Click one to preview it instantly — then grab the class name.

✦
entrance-pop-in
<div class="gleam entrance-pop-in">...</div>
Real Patterns

Built for real interfaces.

Not just bouncing boxes. GLEAM solves the motion patterns you actually build.

Accordion gleam-expand.css · height:auto
GLEAM uses the grid-template-rows: 0fr → 1fr trick — no JS required for the transition. Works on any content height without measuring.
Nope. The open/close toggle is pure CSS class-toggling — your own JS adds .gleam-expanded. The transition is 100% CSS with no height calculations.
Yes. The class toggle approach works with any framework. Toggle gleam-expanded from your component state and the CSS handles the rest.
Toggle Animations data-gleam-trigger · open/close

Wire a trigger to a target. GLEAM plays the open animation on first click and the close animation on second — managing hidden state automatically.

<button data-gleam-trigger="#panel">Open</button>
<div id="panel"
     data-gleam-open="rise"
     data-gleam-close="sink">...</div>
FLIP Layout Transitions gleam.flip() · DOM mutations
7
Item G
2
Item B
9
Item I
1
Item A
5
Item E
3
Item C
Timeline Sequencer gleam.timeline() · chained
Hero headline animates in
Subtitle follows 300ms later
CTA button pops in at 600ms
Card grid staggers at 900ms
Scroll Triggers

Scroll down. Watch it happen.

This section animates as you reach it — using GLEAM's own scroll trigger system. Zero extra configuration.

🎬
Entrances
30 polished entry effects
🚪
Exits
32 clean departure effects
💥
Attention
15 eye-catching loops
🌊
Ambient
24 atmospheric loops
🎨
Gradients
24 living surfaces
🧊
3D
30 perspective effects
✓ FLIP layout transitions — sort, filter, reorder with no layout jumps
✓ Height:auto accordion — no JS measurement, pure CSS grid trick
✓ Timeline sequencer — chain any effects with delays and stagger
✓ Scroll-driven CSS — animation-timeline: scroll() with zero JS
✓ @starting-style — animate native dialog & popover elements declaratively
✓ @layer gleam — user styles always win, zero specificity fights
gleam-gradients.css

Living surfaces, not static colours.

24 animated gradient and surface effects. Customise via CSS variables. Stack on anything.

gradient-animate
gradient-mesh
gradient-aurora
gradient-plasma
gradient-cosmic
gradient-neon
gradient-fire
gradient-ocean
Animated gradient text
Flowing gradient text
Rainbow gradient text
.text-gradient-animate  ·  .text-gradient-flow  ·  .text-gradient-rainbow
gleam-hover.css

Interactions that feel alive.

15 hover micro-interactions. Add one class — no JavaScript, no event listeners.

⬆
hover-lift
✨
hover-glow
⤢
hover-scale
👇
hover-press
🫨
hover-shake
🔄
hover-spin
🎈
hover-float
🧊
hover-3d
Click me
hover-hollow
gleam-effects.css

Theatrical effects.

Glitch, hologram, VHS, portal — drop-in effects for hero sections, image overlays, and game UIs.

.fx-glitch Chromatic aberration + jitter
.fx-hologram Hue-cycle + scan lines
.fx-vhs VHS tracking distortion
.fx-portal Circle reveal with blur burst
GLITCH
HOLO
VHS
PORTAL
Why GLEAM

Nothing else does all of this.

Feature GLEAM v3 Animate.css AOS GSAP (free)
Zero-config (data attributes)✓–✓–
CSS class API✓✓△–
JS timeline API✓––✓
FLIP layout transitions✓––✓
Height:auto animation✓––✓
scroll() timeline (zero JS)✓–––
@starting-style native dialogs✓–––
@layer (no specificity fights)✓–––
CSS variable customisation✓△–✓
Gradient / surface effects✓–––
TypeScript definitions✓––✓
No build step required✓✓✓✓
Prefers-reduced-motion✓✓△△
Modular

Import only what you need.

Every module is a standalone CSS file. Use the full bundle or cherry-pick by feature.

Start animating in 30 seconds.

One CDN link. One class name. No configuration, no compiler, no drama.

<!-- Drop in the bundle -->
<link rel="stylesheet" href="gleam.all.min.css">
<script src="gleam.bundle.min.js"></script>

<!-- Then add a class -->
<div data-gleam="rise" data-gleam-scroll>
  Hello world ✦
</div>