Skip to main content
🎨 CSS as a design system·Module B7 · Lesson 2
TaskBuild three boxes with different easings. .box1 with transition-timing-function: ease-out, .box2 with ease-in-out, .box3 with cubic-bezier(0.34, 1.56, 0.64, 1) (spring). Each: 60×60px, background varies, transition 0.4s, padding 16px.

Easing functions: ease-out, cubic-bezier, spring

75 XP6 min
Theory

The 5 keyword easings + the custom one

.linear     { transition-timing-function: linear; }       /* constant speed */
.ease       { transition-timing-function: ease; }         /* default — slow start + end */
.ease-in    { transition-timing-function: ease-in; }      /* slow start */
.ease-out   { transition-timing-function: ease-out; }     /* slow end */
.ease-in-out { transition-timing-function: ease-in-out; } /* slow both */
.custom     { transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1); } /* overshoot */

Which to use when

  • `ease-out` (default in 2026) — slows at the end. Best for INCOMING motion (elements appearing on screen). Feels natural.
  • `ease-in` — slows at the start. For OUTGOING (elements leaving the screen).
  • `ease-in-out` — slow both ends. For symmetric motion (modals, toggles).
  • `linear` — constant speed. For continuous animation (rotating loaders, marquees).
  • `cubic-bezier` — anything custom. The classic "overshoot" or "spring" curves.

The "spring" easing

cubic-bezier(0.34, 1.56, 0.64, 1) is the famous "overshoot" curve. The transformed value briefly goes BEYOND the target then settles. Feels playful.

Tools like cubic-bezier.com let you draw the curve and copy the values.

linear() (new 2024)

animation-timing-function: linear(0, 0.5 25%, 1);

Pass a sequence of stops. Replaces cubic-bezier for some uses; lets you do spring-like motion with multiple knees. Browser support shipped late 2023.

🔒

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial — card required, cancel anytime.

Sign up — free trial →

First 10 lessons in each track are free. No card needed for those.

PreviousNext lesson →

Get one Python or web tip a day — by email

Short, hand-written, no spam. Unsubscribe in one click.