Fizica, bibliotecile și gustul din spatele animațiilor care par scumpe.
🎯 XP la finalizare: 600•🏅 Badge deblocat
Lecția 1 • Regulile de gust, când să animezi
Majoritatea site-urilor de începător arată ieftin pentru că fiecare element e animat. Profesioniștii fac invers: 80% liniște, 20% mișcare în locurile potrivite. Memorează aceste reguli.
Regulă
Pe înțelesul tuturor
Mișcarea poartă sens
Dacă animația nu-i spune utilizatorului ceva, taie-o.
Un singur lucru pe rând
Nu îngrămădi cinci animații pe un singur trigger de scroll.
Easing-ul bate viteza
Mișcarea lentă, cu easing, pare mai premium decât cea rapidă, liniară.
Respectă reduced motion
Verifică mereu prefers-reduced-motion, unii oameni amețesc.
Testează pe un telefon vechi
Dacă se bâlbâie acolo, e stricat, chiar dacă Mac-ul tău ascunde asta.
Lecția 2 • Cele 10 cuvinte de mișcare pe care le folosește orice profesionist
Cuvânt
Ce este
Ease
Curba de accelerare. 'ease-out' începe rapid, se termină lent, cel mai util default.
Duration
Cât durează. 200–400ms pentru UI. 600–1200ms pentru storytelling.
Delay
Când începe. Folosit pentru stagger.
Stagger
O listă de elemente care se animă unul după altul în loc de toate deodată.
Timeline
O secvență de animații înlănțuite.
Tween
Animă DE LA o valoare LA alta (poziție 0 → 100).
Keyframe
O valoare la un moment specific dintr-un timeline.
Spring
Easing bazat pe fizică, masă, rigiditate, amortizare. Se simte elastic sau cauciucat.
Scrub
Leagă progresul animației de poziția scroll-ului, fără timp, doar distanță.
Pin
Fixează o secțiune pe loc în timp ce utilizatorul dă scroll, rulând animații în schimb.
Lecția 3 • Cele patru limbaje ale mișcării pe web
Când animezi pe web, alegi una dintre patru unelte. Fiecare are punctul ei forte.
Limbaj
Punct forte
Dificultate
Instalare
CSS transitions
Stări de hover, schimbări mici de UI
🟢 Ușor
Integrat în fiecare browser
Framer Motion (React)
UI de aplicație, micro-interacțiuni, intrări
🟢 Ușor
npm i framer-motion
GSAP + ScrollTrigger
Site-uri de marketing, scroll cinema
🟡 Mediu
npm i gsap (gratuit din 2024)
Lottie / Rive
Vectori complecși + animație de personaje
🟡 Mediu
npm i lottie-react / rive-react
Lecția 4 • CSS, 1+1-ul mișcării
Începe de aici. Oricine învață animație ar trebui să fie fluent în tranziții CSS de bază înainte să atingă o bibliotecă.
📜 Prompt Playbook, tranziții CSS
Cel mai bun AI. Claude Sonnet 4.6 sau Cursor •De ce. Claude scrie CSS scurt și precis; Cursor îl tastează în fișierul tău dintr-o singură apăsare.
Dă-mi 5 snippet-uri de clase CSS folosind doar transition (fără JS):
1) Un buton care se ridică 2px și primește umbră la hover
2) Un card care scalează la 1.02 și dezvăluie un border-glow la hover
3) Un link de nav cu un underline care alunecă din stânga
4) O imagine care face zoom 1.05 într-un cadru de dimensiune fixă la hover
5) O iconiță de theme-toggle care se rotește 180° la click (cu clasa .is-dark)
Folosește cubic-bezier(0.22, 1, 0.36, 1) și 300ms pentru toate.
Compatibil Tailwind: dă-mi și CSS brut ȘI clase Tailwind unde e posibil.
Lecția 5 • Framer Motion, animații pentru React
Dacă folosești Lovable, v0, Bolt sau Cursor, probabil ești în React. Framer Motion este biblioteca pentru animarea componentelor React.
Cel mai bun AI. Claude Opus 4.6 prin Cursor •De ce. Framer Motion are multe cazuri limită cu AnimatePresence, Opus le rezolvă corect din prima.
Folosesc Next.js 14 + Tailwind + Framer Motion.
Generează aceste 5 componente ca fișiere .tsx, fiecare sub 40 de linii:
1) <FadeUp>, învelește copiii, fade + slide up la intrarea în viewport, stagger după index din părinte
2) <NumberCounter value={1234} />, numără crescător când e în vizor, 1.5s, ease-out
3) <MagneticButton>, buton care se trage ușor spre cursor la hover
4) <PageTransition>, wrapper layout.tsx care face fade între rute
5) <TextReveal>, împarte string-ul în cuvinte, face fade up fiecărui cuvânt cu stagger de 50ms
Respectă prefers-reduced-motion în toate.
Lecția 6 • GSAP + ScrollTrigger, trusa de scroll cinema
GSAP e modul în care faci site-uri ca paginile de produs ale Apple. A devenit complet gratuit în 2024. Nu există motiv să nu-l înveți.
Conceptul-cheie e TIMELINE-ul. Înlănțui animații una după alta (sau cu offset-uri relative). ScrollTrigger mapează apoi acel timeline la poziția scroll-ului.
📜 Prompt Playbook, GSAP + ScrollTrigger
Cel mai bun AI. Claude Opus 4.6 (pentru arhitectură) + Cursor (ca s-o tasteze) •De ce. GSAP are multe interacțiuni de plugin-uri. Opus ține modelul mental limpede.
Proiect Next.js 14, vreau un hero de landing page 'scroll cinema'.
Construiește-mi:
1) Secțiunea 1, hero fixat (pinned). Pe măsură ce utilizatorul dă scroll, un titlu
se desparte, un gradient de fundal își schimbă nuanța, iar un text capătă adâncime 3D.
2) Secțiunea 2, scroll orizontal. Trei panouri se mișcă de la dreapta la stânga pe măsură
ce utilizatorul dă scroll în jos. Fiecare panou are un titlu + imagine.
3) Secțiunea 3, pin-uri stivuite. Trei blocuri de text se fixează unul după altul,
fiecare făcând fade la cel anterior.
Folosește GSAP + ScrollTrigger. Curăță la unmount. Respectă reduced motion.
Păstrează-le pe toate trei ca componente separate pe care le pot pune într-o pagină.
Lecția 7 • Lottie & Rive, fișiere de animație gata de pus
Format
Folosește când…
Lottie (.json / .lottie)
Vrei o iconiță, un loader, o ilustrație plug-and-play. Rulează la fel mereu. De obicei sub 50kb.
Rive (.riv)
Vrei STĂRI, hover, click, loading, success. Logică jucabilă în interiorul fișierului.
🎯 Pachetul de quest-uri Nivel 2
Fiecare quest e un pattern de mișcare specific. Fă-le în ordine. Fiecare pare 1+1, până când îți dai seama că acum cunoști tot limbajul.
🥉 QUEST BRONZ+15 XP
🤏Hover pe buton, doar CSS
Obiectiv. Livrează un buton care se ridică 2px și aruncă o umbră fină la hover.
Pași
Creează un fișier HTML simplu.
Stilizează un <button> cu transition: all 300ms cubic-bezier(0.22,1,0.36,1).
La :hover, transform: translateY(-2px) și box-shadow: 0 10px 30px rgba(0,0,0,.15).
Testează pe mobil, nu există hover? Fă fallback la :active.
Gata când…
☐ Butonul se ridică lin la hover
☐ Funcționează în continuare pe telefon prin tap
🥉 QUEST BRONZ+15 XP
📝Fade-up la scroll (Framer Motion)
Obiectiv. Textul face fade + slide up când intră în viewport.
Pași
Într-o pagină React (orice output Lovable/v0), învelește o secțiune în <motion.div>.