Free & open source · MIT License

CSS Animation Snippets

Copy-paste animations that make any business website feel polished. One CSS file, one optional 2 KB script, zero dependencies.

Browse snippets View on GitHub

1. Entrance animations

Play once when the page loads. Great for hero headlines and buttons.

.anim-fade-in
.anim-slide-up
.anim-slide-down
.anim-slide-left
.anim-slide-right
.anim-zoom-in
.anim-flip-in
<h1 class="anim-slide-up">Welcome</h1>
<p class="anim-slide-up anim-delay-2">Arrives 200ms later</p>

2. Scroll reveal

Elements animate as visitors scroll to them. Requires js/scroll-reveal.js. Scroll down and back up: the last row repeats.

up
left
right
zoom
stagger 1
stagger 2
stagger 3
stagger 4
<section data-reveal="up">...</section>

<!-- children appear one by one, 120ms apart -->
<div data-reveal-stagger="120">
  <div>Service 1</div>
  <div>Service 2</div>
  <div>Service 3</div>
</div>

3. Hover effects

Hover (or Tab to) each item. Ideal for buttons, product cards and navigation.

.anim-hover-lift
.anim-hover-grow
.anim-underline
.anim-shine
.anim-btn-fill
<a href="/book" class="btn anim-shine">Book now</a>
<div class="product-card anim-hover-lift">...</div>

4. Loaders

Show these while a form submits or content loads.

Loading
.anim-spinner
Loading
.anim-dots
Loading
.anim-progress
.anim-skeleton
<span class="anim-spinner" role="status">
  <span class="sr-only">Loading</span>
</span>

<span class="anim-dots" role="status"><i></i><i></i><i></i></span>

5. Attention seekers

Draw the eye to one important thing: a sale badge, a "Live" indicator, a form error.

SALE
.anim-pulse
  Live
.anim-ping
.anim-shake
.anim-bounce
.anim-wiggle
<span class="badge anim-pulse">SALE</span>
<span class="status-dot anim-ping"></span> Live
<input class="anim-shake" aria-invalid="true">

6. Text effects

Welcome to Bloom!
.anim-typewriter
Grand Opening
.anim-gradient-text
<!-- set --anim-chars to the number of characters -->
<h1 class="anim-typewriter" style="--anim-chars: 17">Welcome to Bloom!</h1>

<h2 class="anim-gradient-text">Grand Opening</h2>

Make it match your brand

Change a few variables once and every animation updates.

:root {
  --anim-duration: 800ms;   /* slower, calmer   */
  --anim-distance: 40px;    /* bigger slides    */
  --anim-accent: #0f766e;   /* your brand color */
}