Le problème avec CSS seul

Quand j'ai commencé à animer mon portfolio, j'utilisais CSS transitions et @keyframes. C'est natif, rapide à écrire, pas de dépendance. Mais très vite j'ai eu ce problème :

Comment je fais pour que l'animation B commence exactement 300ms après la fin de l'animation A ?

Avec CSS pur, tu jonglais avec animation-delay, mais si l'animation A a une durée variable, c'est ingérable. Et pour le scroll ? Soit tu utilises IntersectionObserver à la main, soit tu souffres.

Ce que GSAP change

GSAP introduit la notion de timeline : une séquence d'animations avec un chef d'orchestre. Au lieu d'écrire :

/* CSS — difficile à synchroniser */

.title    { animation: fadeIn 0.8s ease 0s   both; }
.subtitle { animation: fadeIn 0.8s ease 0.4s both; }
.button   { animation: fadeIn 0.8s ease 0.9s both; }

Tu écris :

// GSAP — le délai est relatif à l’élément précédent
const tl = gsap.timeline();
tl.from(’.title’,    { opacity: 0, y: 40, duration: 0.8 })
.from(’.subtitle’, { opacity: 0, y: 40, duration: 0.8 }, ‘-=0.4’)
.from(’.button’,   { opacity: 0, y: 40, duration: 0.8 }, ‘-=0.4’);

Le ”-=0.4” signifie : commence 400ms avant la fin de l’animation précédente. C’est d’une lisibilité incomparable.

ScrollTrigger — le game changer

Le plugin ScrollTrigger permet de lier n'importe quelle animation au scroll de la page. Sur ce portfolio, chaque section se révèle quand elle entre dans le viewport :

gsap.from('.skill-card', {


scrollTrigger: {
trigger: ‘#skills’,
start: ‘top 80%’,       // déclenche quand #skills entre à 80% du viewport
toggleActions: ‘play none none none’
},
y: 100,
opacity: 0,
duration: 0.8,
stagger: 0.1              // chaque card apparaît 100ms après la précédente
});

Ce que j'ai appris

GSAP ne remplace pas CSS. Pour les hover states simples, les transitions de couleur, les focus rings — CSS est toujours le bon outil. GSAP excelle pour tout ce qui est orchestration, séquençage, et scroll-driven.

La courbe d'apprentissage est douce si tu connais déjà JavaScript. La documentation est excellente. Et la version gratuite couvre 95% des besoins d'un portfolio.