Principes fondamentaux et concepts clés
Les animations CSS reposent sur la règle @keyframes qui décrit les étapes d’une animation, de 0 % à 100 % ou de from à to. La propriété animation permet de lier le nom, la durée, le timing, le délai, le nombre d’itérations, la direction, le mode de remplissage, etc.
Les propriétés d’animation incluent animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, et animation-play-state. Le raccourci animation regroupe ces valeurs.
Les fonctions de timing incluent les valeurs prédéfinies (ease, ease-in, ease-out, ease-in-out, linear, step-start, step-end) ainsi que les fonctions personnalisées cubic-bezier et steps. Chaque keyframe peut recevoir son propre timing.
La durée fixe le temps total de l’animation, tandis que le délai permet de la déclencher plus tard. Les deux sont exprimés en secondes ou millisecondes.
Les 12 principes de l’animation traditionnelle (squash & stretch, anticipation, follow-through, etc.) s’appliquent aussi aux CSS ; ils donnent du poids et du réalisme aux effets.
Catégories d’effets
| Type d’effet | Description | Exemple de mise en œuvre |
|---|---|---|
| Animations discrètes (typewriter, sprite) | Utilisent steps pour des mouvements saccadés ou du texte qui s’écrit caractère par caractère. | animation: typing 3s steps(24) forwards; |
| Effets de survol | Transitions légères (transform: scale, opacity) déclenchées par :hover ou :focus. | button:hover { transform: scale(1.05); transition: transform 0.2s ease-out; } |
| Transitions de page | Animations qui couvrent le changement de vue (slide, fade, cube). Souvent combinées à position: fixed ou view-transition. | Collection de slides CSS : glissement horizontal, effet « TV », cube 3D |
| Animations complexes | Séquences multi-étapes, synchronisation de plusieurs éléments, effets 3D, scroll-driven (scroll-timeline). | Animation d’un carré qui parcourt les quatre coins avec différents animation-timing-function par keyframe |
| Exemples haute performance | Utilisent uniquement transform et opacity, parfois will-change, pour rester sur le GPU. | Rotation 3D d’une sphère qui ne déclenche aucun reflow |
Meilleures pratiques de performance
- Animer uniquement
transformetopacitypour éviter les reflow et repaint. - Utiliser
will-changeavec parcimonie pour préparer le navigateur à créer un calque dédié. - Éviter les propriétés qui modifient le layout (
width,height,top,left,margin,padding,box-shadow). - Appliquer
contain: layoutoucontain: paintaux éléments animés afin d’isoler leurs effets. - Technique FLIP (First-Last-Invert-Play) pour minimiser les recalculs.
- Préférer les animations GPU-only (ex.
transform: translateZ(0)) pour libérer le thread principal pendant le chargement initial.
Accessibilité et utilisabilité
Détecter la préférence de l’utilisateur avec la media query prefers-reduced-motion : @media (prefers-reduced-motion: reduce) { … }.
Offrir une version allégée : désactiver ou simplifier les animations longues, éviter les flashs > 3 fois/s, limiter la durée à 5 s.
Implémentation concrète : remplacer un slide-in par un simple fade-in lorsqu’une réduction du mouvement est demandée.
Bonnes pratiques : fournir un contrôle manuel (bouton « Pause animation »), tester les réglages OS (Windows 10 → Ease of Access, macOS → Reduce Motion, iOS → Reduce Motion).
Compatibilité inter-navigateurs et solutions de fallback
| Navigateur | Version minimale supportée | Particularités |
|---|---|---|
| Chrome | 43 + | Pas de préfixe requis |
| Firefox | 16 + | Support complet, mais les animations très lourdes peuvent impacter le mobile |
| Safari | 5 + (partiel) | Certaines propriétés comme animation-fill-mode peuvent nécessiter -webkit- |
| Edge | 12 + | Aligné avec Chromium depuis 2020 |
| Internet Explorer | 10 + | Nécessite les préfixes -ms- et ne supporte pas les nouvelles propriétés comme animation-composition |
Utiliser la détection de fonctionnalité (if ('animation' in document.body.style) { … }) pour appliquer des animations CSS uniquement quand elles sont prises en charge.
Fournir une version simplifiée (ex. opacity uniquement) lorsque la fonctionnalité n’est pas disponible.
Outils de développement, de visualisation et de débogage
- Chrome DevTools – Panneau Animations : capture, lecture, modification en temps réel des keyframes, contrôle de la vitesse, visualisation des groupes d’animation.
- Firefox Inspector – mise en évidence des propriétés animées, édition directe des
@keyframes. - Animation Inspector de Chrome – permet de voir chaque étape, de modifier la durée ou le délai via des cercles interactifs.
- Générateurs en ligne – WebCode Tools et FrontendTools offrent des interfaces graphiques pour créer rapidement des
@keyframes, choisir durée, easing, itérations et exporter le CSS.
Frameworks ou bibliothèques populaires
| Bibliothèque | Usage principal | Points forts |
|---|---|---|
| Animate.css | Animations prêtes à l’emploi (fade, bounce, etc.) | Aucun JavaScript, très léger |
| GSAP (GreenSock) | Animations complexes, timelines, scroll-trigger, SVG, 3D | Performance exceptionnelle, large compatibilité |
| Framer Motion | Animations déclaratives dans React, gestuelles, layout-animations | Intégration JSX, API intuitive |
| Tailwind CSS Motion | Animations via classes utilitaires, zéro JavaScript | Idéal pour projets Tailwind |
| React Spring | Physique-based, spring dynamics | Mouvement naturel, bonne ergonomie React |
| Anime.js | Légère, support SVG, timelines | Polyvalente, bonne documentation |
Exemples concrets et études de cas
Animation subtile de bouton (hover)
.button {
display:inline-block;
transition: transform 0.15s ease-out, box-shadow 0.15s ease-out;
}
.button:hover {
transform: scale(1.04);
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}
Effet : légère amplification et ombre portée qui reste fluide grâce à transform et box-shadow minimal.
Effet de machine à écrire (typewriter)
.typewriter {
overflow:hidden;
border-right:2px solid #333;
white-space:nowrap;
animation: typing 3s steps(24) forwards, blink 0.7s step-end infinite;
}
@keyframes typing { from { width:0; } to { width:100%; } }
@keyframes blink { 50% { border-color:transparent; } }
@media (prefers-reduced-motion: reduce) {
.typewriter { animation:none; }
} Utilise steps pour un rendu discret, avec prise en compte de la préférence de réduction du mouvement.
Transition de page « slide »
.page-enter {
transform: translateX(100%);
}
.page-enter-active {
transform: translateX(0);
transition: transform 0.4s ease-out;
}
.page-exit {
transform: translateX(0);
}
.page-exit-active {
transform: translateX(-100%);
transition: transform 0.4s ease-out;
} Implémentation typique avec React Transition Group ou Vue Router, repose uniquement sur transform.
Animation complexe multi-étapes (cube 3D)
.cube {
width:200px; height:200px;
transform-style: preserve-3d;
animation: rotateCube 6s infinite linear;
}
@keyframes rotateCube {
0% { transform: rotateY(0deg); }
25% { transform: rotateY(90deg); }
50% { transform: rotateY(180deg); }
75% { transform: rotateY(270deg); }
100% { transform: rotateY(360deg); }
} Exemple de rotation 3D qui ne déclenche aucun reflow grâce aux transform.
Animation pilotée par le scroll (scroll-timeline)
.scroll-section {
scroll-timeline: view;
animation: fadeIn 1s forwards;
}
@keyframes fadeIn {
from { opacity:0; transform:translateY(30px); }
to { opacity:1; transform:translateY(0); }
} Fonctionnalité expérimentale disponible dans Chrome / Edge ; prévoir un fallback JavaScript ou une simple transition si non supporté.
Ressources d’apprentissage
- Spécifications officielles – CSS Animations Level 1 et Level 2 du W3C.
- Documentation MDN – pages sur
@keyframes,animation,animation-timing-function,prefers-reduced-motion. - Guides pratiques – articles de Smashing Magazine sur les fonctions de timing et les principes d’animation.
- Tutoriels interactifs – le guide de Josh W. Comeau avec des playgrounds en ligne.
- Cours en ligne – LinkedIn Learning « CSS Animations et Transitions » et les formations W3Schools.
- Articles sur l’accessibilité – Boia, Think Company, LogRocket, web.dev.
Pour approfondir vos connaissances en CSS, consultez notre article sur les différents types de sélecteurs en CSS et découvrez comment utiliser Flexbox pour créer des mises en page flexibles et réactives.



