L'animation transforme une bonne interface en une expérience utilisateur mémorable. Une transition bien pensée rend les boutons plus réactifs, les chargements de page plus instantanés et la navigation incroyablement intuitive. CSS met à votre disposition deux systèmes d'animation puissants : les transitions pour les changements d'état simples et les animations par keyframes pour des séquences complexes à plusieurs étapes.
Transitions CSS : L'Art du Changement Subtil
Les transitions animent en douceur le passage d'une propriété CSS d'un état à un autre, généralement déclenchées par des interactions utilisateur comme :hover, :focus, ou l'ajout/suppression d'une classe via JavaScript.
.button {
background: #6366f1;
color: white;
padding: 0.75rem 1.5rem;
border-radius: 8px;
transition: background 200ms ease, transform 200ms ease;
}
.button:hover {
background: #4f46e5;
transform: translateY(-2px);
}
.button:active {
transform: translateY(0);
}
La propriété raccourcie `transition`
/* Raccourci: propriété | durée | fonction-de-temps | délai */ transition: opacity 300ms ease-in-out 0ms; /* Plusieurs propriétés */ transition: opacity 300ms ease, transform 300ms ease; /* Toutes les propriétés (à utiliser avec parcimonie) */ transition: all 200ms ease;
Fonctions de Temps (Timing Functions) : Maîtriser le Rythme
Les fonctions de temps, ou timing functions, sont cruciales. Elles définissent la courbe d'accélération d'une animation, transformant un mouvement rigide en une séquence naturelle et engageante. Choisir la bonne fonction peut radicalement changer la perception d'une interaction.
ease— Démarre lentement, accélère, puis ralentit. Un excellent choix par défaut pour la plupart des scénarios.ease-in— Commence doucement, finit rapidement. Idéal pour les éléments qui quittent l'écran, donnant une impression de "lâcher-prise".ease-out— Démarre rapidement, finit en douceur. Parfait pour les éléments qui apparaissent à l'écran, simulant une arrivée en douceur.ease-in-out— Lent au début et à la fin. Bon pour les boucles continues ou les mouvements bidirectionnels.linear— Vitesse constante. Efficace pour les barres de progression, les spinners ou toute animation nécessitant une prédictibilité.cubic-bezier()— Courbe personnalisée pour un contrôle ultra-précis sur l'accélération et la décélération.
/* Effet "ressort" rebondissant */ transition: transform 500ms cubic-bezier(0.34, 1.56, 0.64, 1); /* Sensation "material design" dynamique */ transition: all 225ms cubic-bezier(0.4, 0, 0.2, 1);
Animations CSS par Keyframes : Pour des Scénarios Complexes
Lorsque vos besoins vont au-delà d'une simple transition entre deux états, les animations par keyframes entrent en jeu. Elles vous permettent de définir une séquence d'étapes distinctes, offrant un contrôle granulaire sur chaque phase du mouvement d'un élément.
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.card {
animation: fadeInUp 600ms ease-out forwards;
}
/* Échelonner les cartes avec un délai */
.card:nth-child(2) { animation-delay: 100ms; }
.card:nth-child(3) { animation-delay: 200ms; }
.card:nth-child(4) { animation-delay: 300ms; }
@keyframes pulse {
0% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.05); opacity: 0.8; }
100% { transform: scale(1); opacity: 1; }
}
.live-indicator {
animation: pulse 2s ease-in-out infinite;
}
Performance : Quelles Propriétés CSS Animer ?
La performance des animations n'est pas uniforme pour toutes les propriétés CSS. Animer certaines propriétés peut déclencher des recalculs de layout coûteux pour le navigateur, tandis que d'autres sont gérées directement par le GPU, offrant une fluidité optimale. Il est essentiel de faire les bons choix pour éviter les saccades et garantir une expérience utilisateur fluide.
- ✅ Accélérées par le GPU (économiques) : `transform`, `opacity`. Ces propriétés n'affectent pas la géométrie de la page, permettant au navigateur d'optimiser le rendu.
- ⚠️ Déclenchent un rendu (modéré) : `background-color`, `box-shadow`, `border-color`. Elles nécessitent de repeindre des parties de l'écran, ce qui peut avoir un léger coût.
- ❌ Déclenchent un recalcul de layout (coûteux) : `width`, `height`, `margin`, `padding`, `top`, `left`. Modifier ces propriétés force le navigateur à recalculer la position et la taille de tous les éléments affectés, ce qui est très lourd en ressources.
Règle d'or : Privilégiez l'animation des propriétés `transform` et `opacity` chaque fois que c'est possible. Au lieu d'animer `width` ou `height`, utilisez `transform: scaleX()` ou `transform: scaleY()`. Pour les positions, remplacez `top`, `left`, `right`, `bottom` par `transform: translateX()` ou `transform: translateY()`.
.animated-element {
/* Indique au navigateur de promouvoir l'élément sur sa propre couche de composition */
will-change: transform, opacity;
/* Fallback pour les navigateurs plus anciens */
transform: translateZ(0);
}
Respecter les Préférences Utilisateur
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
Certains utilisateurs peuvent souffrir de cinétose (mal des transports) ou de troubles vestibulaires, rendant les animations rapides ou continues désagréables, voire problématiques. Il est crucial d'inclure la media query prefers-reduced-motion pour désactiver ou réduire significativement les animations pour ceux qui ont activé ce paramètre dans leurs préférences système. C'est une question d'accessibilité et de respect de l'utilisateur.
Découvrez nos Outils CSS Gratuits
Optimisez et embellissez votre code CSS directement dans votre navigateur, en un instant.