Article

Animation Patterns I Use Every Day

Jan 2026 · 6 min read

Entrance Animations

Most of what makes an interface feel considered isn't the animation itself — it's the restraint around it. A staggered fade-in on a list, a small y-offset on scroll-into-view, nothing more. The goal is to make the page feel like it's responding to the user, not performing for them. I default to opacity + a small translate (8-16px) with an easeOut-style curve. Anything bouncier reads as playful, which is right for some brands and wrong for most product UI.

Staggering the right way

A flat 0.05-0.1s delay per item, capped around 6-8 items, keeps a list feeling snappy instead of sluggish. Past that many items, I stop staggering entirely — the eye can't track it anymore and it just adds latency to perceived load.

Staggering the right way

Images used for editorial purposes.

Hover & Micro-interactions

Hover states are where most of my animation budget actually goes, because they're the moments users directly control. A button that responds instantly to a cursor feels alive; one with a 400ms transition feels laggy, even if the rest of the page is buttery. My rule of thumb: hover/interaction transitions stay under 300ms, entrance animations can go up to 500-600ms, and anything the user is actively controlling (drag, scroll-linked) should have effectively zero added delay.

Group-hover for sibling dimming

One pattern I reach for constantly: dimming sibling list items when one is hovered, using Tailwind's group/group-hover rather than JS state. It's cheap, it's declarative, and it doesn't fight with entrance animations running on the same elements.