Chapter 2

The 12 Principles, Adapted

Disney's principles, mapped to UI motion.

CSS animationmicro-interactions
Squash/stretch, anticipation, follow-through, staging, secondary action — re-read for interface motion, with the "Disney is Dead" counterpoint that UI motion solves a different problem.

In 1981 Disney animators Frank Thomas and Ollie Johnston distilled decades of studio craft into 12 principles of animation — squash and stretch, anticipation, follow-through, and the rest. Four decades later we keep reaching for that same vocabulary to describe a button press or a modal sliding in. The question this chapter asks is: how much of it actually transfers?

The twelve, in one breath

Thomas & Johnston's list, from The Illusion of Life: squash & stretch, anticipation, staging, straight-ahead vs pose-to-pose, follow-through & overlapping action, slow in & slow out, arcs, secondary action, timing, exaggeration, solid drawing, and appeal. Some are about drawing a character (solid drawing, straight-ahead vs pose-to-pose) and barely touch interfaces. The rest describe how things move — and those map onto UI motion with surprising directness.

The mapping

The ten interface-relevant principles, each with a one-line gloss for UI:

Squash & stretch button press states
Anticipation pull-to-refresh resistance, pre-action hints
Staging focus / dimming, backdrop scrim
Follow-through & overlapping action modal overshoot-and-settle, staggered list reveals
Slow in / slow out easing as affordance
Arcs curved motion paths
Timing the 200–500ms UI sweet spot
Secondary action micro-interactions
Exaggeration findability
Appeal polish

Gallery: every principle, before & after

Each tile is a real CSS micro-interaction. Click a tile to replay it, toggle BEFORE/AFTER to see the motionless baseline, and drag intensity to scale the effect — the slider writes a --k custom property that the keyframes read live (squash amount, overshoot distance, stagger delay, arc, wind-up…).

Featured: follow-through, dialed in

Follow-through and overlapping action are why a good modal doesn't just stop — it flies in, overshoots, and settles. Below, every part of that settle is a knob. The sliders feed CSS variables (--over, --dur, --squash) that the keyframes consume; hit replay to re-fire.

Modal overshoot-and-settle live demo
Confirm

Overshoot 0 = a flat, lifeless arrival. Push past ~1.5 and it reads as bouncy/toylike — the sweet spot for product UI is a small overshoot with a fast settle.

Playground: squash + overshoot on a real button

The smallest complete example of two principles at once — pure CSS, no libraries. Press squashes the button (squash & stretch); release runs a back-out settle that stretches past rest before resolving (follow-through). Edit the :active scale and the settle keyframe to taste.