Animation Vocabulary

Every term, with a live example built from nothing but HTML, CSS, and a sprinkle of inline JavaScript. Hover, click, drag, and scroll the demos.

Terms & definitions adapted from animations.dev/vocabulary.

01Entrances & Exits

How elements arrive on screen and how they leave. Hover any demo marked ↻ to replay it.

Fade in / Fade out

Element appears or disappears by changing opacity.

Slide in

Element enters by sliding in from off-screen (left, right, top, or bottom).

Scale in

Element grows from smaller to full size as it appears, often paired with a fade.

Pop in

Element appears with a slight overshoot, like it bounces into place.

A hidden message ✨

Reveal

Content is uncovered gradually, often by animating a clip-path or mask.

✓ Copied to clipboard

Enter / Exit

The animation an element plays when it's added to or removed from the screen.

02Sequencing & Timing

The clockwork of animation: when things start, how long they take, and what fills the space in between.

0%50%100%

Keyframes

Defined points in an animation (0%, 50%, 100%) that the browser fills the gaps between.

scrub — the browser fills every value in between

Interpolation / Tween

Generating all the in-between frames between a start and end value, so motion is continuous.

Stagger

Animate several items one after another with a small delay between each, creating a cascade.

Orchestration

Deliberately timing multiple animations so they feel like one coordinated motion. Here: backdrop → panel → contents.

delay 0s
delay 0.5s

Delay

Time before an animation starts.

300ms
1500ms

Duration

How long an animation takes.

forwards
none

Fill mode

Whether an element keeps its first or last frame's styles before the animation starts or after it ends. With none, the ball snaps back when done.

5
4
3
2
1
linear
steps(8)

Stepped animation

An animation that is divided into discrete steps, like a countdown timer.

03Movement & Transforms

The four primitives — translate, scale, rotate, skew — plus the third dimension. Most of these respond to hover.

Translate

Move an element along the X or Y axis.

Scale

Make an element bigger or smaller.

Rotate

Spin an element around a point.

Skew

Slant an element along the X or Y axis, shearing it out of its rectangular shape.

🂠
🃟

3D tilt / Flip

Rotate in 3D space (rotateX / rotateY) to add depth.

160px
1100px

Perspective

How strong the 3D effect looks — a lower value exaggerates depth, like the viewer is closer.

center
top left

Transform origin

The anchor point a scale or rotation grows or spins from.

Rename
Duplicate
Delete

Origin-aware animation

Element animates from its trigger point rather than its own center, such as a popover expanding from the button that opened it.

04Transitions Between States

Getting the interface from A to B without losing the user along the way.

🌞 Light🌙 Dark

Crossfade

One element fades out as another fades in, in the same spot.

hard cut
connected

Continuity transition

A change that keeps the user oriented by visually connecting before and after.

now playing

Morph

One shape smoothly turns into another shape, e.g. Dynamic Island.

Expanded detail view — click to send it back
click the thumbnail

Shared element transition

An element travels and transforms from one position into another, like a thumbnail expanding into a card.

Layout animation

When an element's size or position changes, it animates to the new spot instead of snapping. (Done here with the FLIP technique.)

What is an accordion?

A section that smoothly expands and collapses its height — this one uses the CSS grid-template-rows: 0fr → 1fr trick, no JS measurement needed.

Accordion / Collapse

A section smoothly expands and collapses its height to show or hide content.

1

Direction-aware transition

Content slides one way going forward and the opposite way going back, so navigation has a sense of direction.

05Scroll

These demos have their own little scrollable viewports — scroll inside them.

Scroll down…
Each item animates in
as it enters the viewport
via IntersectionObserver
— and stays put after.
🎉 You reached the end

Scroll reveal

Elements fade or slide into place as they enter the viewport.

The bar above and the square below are driven by scroll position, not time.

Scrub up and down — the animation runs backwards too.

Progress is just scrollTop / maxScroll.

That's the whole trick.

Scroll-driven animation

An animation whose progress is tied directly to scroll position.

Foreground scrolls normally…
…while the circles behind
drift at half speed — depth!

Parallax

Background and foreground move at different speeds while scrolling, creating depth.

🏠 Home

Welcome back

Page transition

An animation that plays when navigating from one page or route to another.

View transition

The browser morphs between two states or pages, connecting shared elements. Uses the real document.startViewTransition() — falls back to a snap in unsupported browsers.

06Feedback & Interaction

Motion that responds to your hands — press, hold, drag, and fling these.

Hover effect

Visual change when the cursor moves over an element.

Press / Tap feedback

A subtle scale-down when an element is clicked, so it feels physical.

Hold to confirm

A progress effect that fills up while the user holds a button.

Drag

Moving an element by grabbing it, often with momentum when released — fling it!

Design review
Ship the feature
Write the docs

Drag to reorder

Dragging items in a list to rearrange them, while the others shift to make room.

Message sent — swipe me away

Swipe to dismiss

Dragging an element off-screen to close it, like a drawer or toast.

Rubber-banding

Resistance and snap-back when you drag past a boundary (the iOS overscroll feel). Drag the ball past the dashed edge.

Shake / Wiggle

A quick side-to-side jitter signaling an error or rejected input.

Ripple

A circle expanding from the point of a tap, confirming the press.

07Easing

The same movement can feel mechanical or alive — it's all in the acceleration curve.

linear
ease-in
ease-out
ease-in-out

Easing

The rate at which an animation speeds up or slows down. Hover and watch the four classic curves race.

Ease-out

Starts fast, ends slow. The default for most UI and anything responding to the user.

Ease-in

Starts slow, ends fast. Usually avoided; can feel sluggish.

Ease-in-out

Slow, fast, slow. Good for elements already on screen moving from A to B.

Linear

Constant speed. Avoid for UI; reserve for spinners or marquees.

Cubic-bezier

A custom easing curve you define for precise control. This one — cubic-bezier(.65,-.4,.35,1.4) — winds up and overshoots.

symmetric
asymmetric

Asymmetric easing

A curve that accelerates and decelerates at different rates. Feels more alive than a symmetric one.

08Spring Animations

Every demo here runs on a tiny physics integrator (~20 lines of JS) — no durations, no easing curves.

click anywhere — the ball springs there

Spring

Motion driven by physics (tension, mass, damping) rather than a set duration.

stiffness 40
stiffness 400
hover to send both to the other side

Stiffness / Tension

How strongly the spring pulls toward its target. Higher feels snappier.

damping 30
damping 7
hover — low damping keeps oscillating

Damping

How quickly a spring settles. Lower damping means more bounce and oscillation.

mass 1
mass 6
hover — heavy feels sluggish

Mass

How heavy the animated element feels. More mass makes it slower and more sluggish.

hover — overshoot, settle, play

Bounce

A spring that overshoots and settles, adding playfulness.

feels done: fully settled:
hover to run

Perceptual duration

How long a spring feels finished, even though it keeps micro-settling underneath.

fling the ball — it keeps its velocity

Momentum

Motion that carries velocity, especially after a drag or interruption.

it patrols on its own — click mid-flight to redirect it

Velocity

How fast and in which direction an element is moving. A spring carries it into the next animation when interrupted.

Interruptible animation

An animation that can be smoothly redirected mid-flight instead of finishing first. Mash A and B.

09Looping & Ambient Motion

Animations with no beginning or end — quiet background heartbeats that make a page feel alive.

HTML·CSS·JavaScript·springs·easing·

Marquee

Text or content that scrolls continuously in a loop.

Loop

An animation that repeats, a set number of times or infinitely.

normal
alternate

Alternate (yoyo)

A loop that plays forward then reverses each iteration, instead of jumping back to the start.

Orbit

An element circling around another in a continuous path.

Pulse

A gentle repeating scale or opacity change to draw attention.

🎈

Float

A gentle, continuous up-and-down drift that makes a static element feel alive and weightless.

Idle animation

Subtle motion that plays while an element is just sitting there, waiting to be interacted with.

10Polish & Effects

The finishing touches: reveals, shimmers, tickers, and typographic tricks.

Hover to focus 🔍

Blur

A blur filter used to soften an element or mask tiny imperfections.

Clip-path

Clipping an element to a shape, used for reveals, masks, and before/after sliders.

hard edge (clip)
ANIMATIONS
soft edge (mask)
ANIMATIONS

Mask

Hiding or revealing parts of an element using a shape or gradient — like clip-path, but with soft, fadeable edges.

Before / after slider

A draggable divider that wipes between two overlaid images to compare them.

Line drawing

An SVG path that draws itself in, like an invisible pen tracing it.

Text morph

Text that animates character by character when it changes, drawing attention to the new value.

Skeleton / Shimmer

A placeholder with a moving sheen shown while content loads.

Number ticker

Digits rolling or counting up to a value.

0.00sproportional — jitters
0.00stabular-nums — steady

Tabular numbers

Fixed-width digits so numbers don't shift around as they change. Essential for tickers, timers, and counters.

Typewriter

Text appearing one character at a time, as if being typed.

11Performance

Why some animations glide at 60fps and others stutter — and how to stay on the fast path.

60 fps
10 fps

Frame rate (FPS)

Frames drawn per second. 60fps is the baseline for smooth motion; 120fps on newer displays.

⚠ main thread blocked
smooth
janky

Jank

Visible stutter when the browser drops frames because it can't keep up with the animation. (Simulated here — your browser is innocent.)

one frame missed its deadline

Dropped frame

A frame the browser missed its deadline to draw, causing a tiny hitch in motion.

PAGE — LAYOUT & PAINT
OWN LAYER — GPU

Compositing

Letting the GPU move or fade an element on its own layer without redoing layout or paint. Hover to peel the layers apart.

will-change: transform

will-change

A CSS hint that an element is about to animate, so the browser can promote it to its own layer ahead of time — no first-frame hiccup.

animating widththis text reflows on every single frame, which costs layout
animating transformthis text never moves — the box scales on its own layer

Layout thrashing

Animating properties like width, height, top, or left that force the browser to recalculate layout every frame, causing jank.

12Principles to Know

Less vocabulary, more philosophy — the judgment calls behind motion that feels right.

Purposeful animation

Motion should serve a function — orient, give feedback, show relationships — not just decorate. This button's motion tells you exactly what's happening.

Anticipation

A small wind-up in the opposite direction before a move, hinting at what's about to happen.

Follow-through

Parts of an element keep moving and settle slightly after the main motion stops, adding weight. Watch the antenna.

Squash & stretch

Deforming an element as it moves to convey weight, speed, and flexibility.

spinner
skeleton

Perceived performance

The right animation makes an interface feel faster, even when it isn't. Both panels load in exactly 1.6s — which felt shorter?

Seen once — can afford a big bouncy 700ms entrance ✨
Seen 50× a day — 140ms, in and out.

Frequency of use

The more often a user sees an animation, the shorter and subtler it should be.

Spatial consistency

Animating so an element keeps its identity and position across states, so users never lose track of where things went. The highlight travels — it never teleports.

transform + opacity only
cheap for the gpu, smooth everywhere

Hardware acceleration

Animating transform and opacity lets the GPU keep motion smooth.

Reduced motion

Respecting the user's prefers-reduced-motion setting by toning down or removing motion — swap the bounce for a gentle fade. (This whole page honors it too.)