🎬 GSAP Animation Guide
Motion should guide, not distract.
A practical guide to thinking about and building intentional animations with GSAP (GreenSock Animation Platform) — not just how to animate, but how to think about animation.
What is GSAP?
GSAP stands for GreenSock Animation Platform — a powerful JavaScript motion engine for the web.
You can animate:
- Position (
x,y) - Opacity
- Scale & Rotation
- Colors
- SVG paths
- Scroll-based effects
- Entire sequenced timelines
Unlike CSS animations, GSAP gives you full control over timing, sequencing, and logic.
Core Philosophy
Animation is not decoration. It's communication.
| Good Animation | Bad Animation |
|---|---|
| Guides attention | Distracts the user |
| Creates hierarchy | Feels random |
| Improves perceived performance | Slows everything down |
| Makes transitions feel intentional | Makes users dizzy |
The difference? Timing and intention.
Core Concepts
from, to, and fromTo
// Animate from 50px below and invisible → natural position
gsap.from(".card", {
y: 40,
opacity: 0,
duration: 0.5,
ease: "power3.out"
});
Timelines — Sequencing Animations
const tl = gsap.timeline();
tl.from(".label", { y: 12, opacity: 0, duration: 0.4 })
.from(".heading", { y: 24, opacity: 0, duration: 0.6 }, "-=0.2");
The "-=0.2" offset means: start this animation 0.2s before the previous one ends.
| Offset | Effect |
|---|---|
"-=0.1" |
Subtle overlap |
"-=0.4" |
Heavy overlap |
| (none) | Strict sequence |
ScrollTrigger
scrollTrigger: {
trigger: ".grid",
start: "top 82%",
}
"top 82%" means: start the animation when the top of the element reaches 82% down the viewport.
This is precision — not "when it enters", but exactly when you define.
Timing Reference
Duration + Stagger + Ease = Feel
Headings
gsap.from(".heading", {
y: 24,
opacity: 0,
duration: 0.6, // 0.5 – 0.7
ease: "power3.out"
});
Cards (with stagger)
gsap.from(".card", {
y: 40,
opacity: 0,
duration: 0.5, // 0.45 – 0.6
stagger: 0.08, // 0.06 – 0.1
ease: "power3.out"
});
Too small a stagger → robotic. Too big → slow and annoying. Sweet spot = 0.06–0.1.
Animation Hierarchy (Mental Model)
Each UI layer deserves a different animation weight:
Labels → Subtle intro
Headings → Strong presence
Cards → Cascading reveal
Buttons → Micro-interaction only
Common Mistakes to Avoid
| Mistake | Why It's a Problem |
|---|---|
| Animating too much | If everything moves, nothing feels important |
| Long durations (1.2s+) | Feels cool once, then just feels slow |
| No easing | Linear animations look robotic |
Animating layout props (top, left) |
Bad for performance — use x, y, scale instead |
What's Next
Topics worth exploring deeper:
- Advanced timeline orchestration
- Page transitions in Next.js
- Parallax (done correctly)
- Scroll-based storytelling
- Performance optimization with heavy animation
- Combining GSAP with React state logic
The Real Advice
Don't just copy animations from tutorials. Break them.
Change durations. Change overlaps. Remove stagger. Add more.
Feel the difference. That's how you actually learn GSAP.
Resources
I’m Suman Kshetri — grinding through computer engineering, building real-world web projects, and sharing what I learn without the fluff.
Let's Connect:
LinkedIn: Suman-Kshetri
GitHub: Suman-Kshetri
Top comments (0)