Les 15 meilleures animations et propriétés CSS à maîtriser

Découvre les techniques web pour des animations CSS époustouflantes. Maîtrise @keyframes, transitions, transform, opacity et bien plus encore pour re
Comprendre les animations CSS de A à Z : La Magie qui Rend Ton Site Vraiment Vivant !

Yo la team ! Aujourd'hui, on va parler d'un truc qui change la donne quand tu veux rendre ton site web non pas juste fonctionnel, mais carrément vivant et captivant : les animations CSS. Oublie les idées reçues comme "faut du JavaScript lourd pour ça" ou "c'est trop compliqué". Non, non et non ! Les animations CSS sont tes meilleures amies pour insuffler du dynamisme, de l'élégance et une vraie personnalité à tes interfaces, le tout avec un code léger et optimisé.

Sérieusement, on est en 2024. Arrête d'être paresseux ! Un site statique, c'est comme une photo sans vie. On veut du mouvement, de l'interactivité, des éléments qui réagissent. Que ce soit un bouton qui ondule au survol, un loader qui hypnotise, ou du texte qui apparaît avec style, les animations CSS sont ton passeport pour une expérience utilisateur mémorable. On va tout décortiquer ici, du pourquoi au comment, avec des exemples clairs, du code bien rangé, et des astuces de pro. Prépare-toi à devenir un magicien du CSS, et à donner une nouvelle dimension à tes projets !

Info !
Les animations CSS sont nativement gérées par tous les navigateurs modernes. Pas besoin d'ajouter des bibliothèques JavaScript lourdes juste pour animer un bouton ou un texte. Le navigateur s'en occupe, et il le fait super bien !

Pour tester les exemples de code dans cet article, suis ces étapes simples :

  1. Crée un fichier HTML (par exemple, index.html) et un fichier CSS (par exemple, style.css) dans le même dossier.
  2. Dans ton fichier HTML, lie le CSS dans la section comme ceci : .
  3. Copie le code HTML de l'exemple dans le de ton fichier HTML.
  4. Copie le code CSS de l'exemple dans ton fichier CSS.
  5. Pour les exemples JavaScript, crée un fichier JS séparé (par exemple, script.js) et lie-le dans ton HTML juste avant la balise fermante : .
  6. Ouvre ton fichier HTML dans un navigateur web (Chrome, Firefox, Edge, etc.).

1. les bases : c'est quoi une animation css ?

En gros, une animation CSS, c'est une séquence de changements de style qui s'applique à un élément HTML au fil du temps. La grosse différence avec une simple transition (qu'on verra après) ? Une animation peut démarrer automatiquement, se répéter à l'infini, ou suivre un chemin bien précis avec plusieurs étapes. C'est comme une petite chorégraphie pour tes éléments.

Les animations sont définies par des points clés, des "keyframes", qui décrivent l'état de ton élément à différents moments de l'animation. Le navigateur s'occupe de faire la transition en douceur entre ces points. C'est puissant parce que tu as un contrôle hyper fin sur le timing, la vitesse, et le déroulement de chaque effet.

2. le coeur du mouvement : la règle @keyframes

La règle @keyframes, c'est la pierre angulaire de toute animation CSS complexe. C'est elle qui te permet de définir les différentes étapes de ton animation, du début (0%) à la fin (100%), ou même des étapes intermédiaires (comme 50%).

Chaque @keyframes a un nom unique que tu utiliseras plus tard pour l'appliquer à un élément. À l'intérieur, tu décris l'état de tes propriétés CSS à des pourcentages spécifiques de la durée totale de l'animation. Le navigateur se charge ensuite d'interpoler les valeurs entre ces points.

<div class="box-anim"></div>
.box-anim {
  width: 80px;
  height: 80px;
  background-color: dodgerblue;
  border-radius: 10px;
  /* Application de l'animation */
  animation: pulsation 2s ease-in-out infinite alternate;
}

@keyframes pulsation {
  0% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.1); opacity: 0.7; background-color: lightblue; }
  100% { transform: scale(1); opacity: 1; }
}

3. la propriété animation : tout-en-un pour le contrôle

Pour appliquer une animation définie par @keyframes à un élément, tu utilises la propriété raccourcie animation. C'est elle qui contrôle tous les aspects du mouvement : la durée, la répétition, le délai, et bien plus encore. C'est super pratique pour garder ton CSS concis.

Comprendre chaque composant de cette propriété est essentiel pour affiner tes animations :

  • animation-name : Le nom de ta règle @keyframes.
  • animation-duration : Combien de temps dure une seule itération de l'animation (ex: 2s pour 2 secondes).
  • animation-timing-function : La courbe de vitesse (ex: ease-in-out pour un mouvement doux).
  • animation-delay : Le délai avant que l'animation ne commence (ex: 0.5s).
  • animation-iteration-count : Combien de fois l'animation doit se répéter (infinite pour une boucle sans fin).
  • animation-direction : La direction du mouvement (alternate pour un aller-retour).
  • animation-fill-mode : Ce qui se passe avant et après l'animation (forwards pour que l'élément conserve l'état final).
  • animation-play-state : Pour contrôler si l'animation est running ou paused (utile avec JavaScript).

<button class="fancy-button">Clique-moi</button>
.fancy-button {
  padding: 12px 25px;
  background-color: #3498db;
  color: white;
  border: none;
  border-radius: 5px;
  cursor: pointer;
  font-size: 1em;
  /* Applique l'animation au survol */
  transition: all 0.3s ease-in-out;
}

.fancy-button:hover {
  transform: scale(1.05) rotate(2deg);
  background-color: #2980b9;
  box-shadow: 0 5px 15px rgba(0,0,0,0.2);
}

4. les transitions : pour des changements fluides et simples

Si tu veux juste animer une propriété CSS lorsqu'elle change d'état (par exemple, au survol de la souris, au focus d'un champ, ou à l'ajout/retrait d'une classe via JavaScript), les transitions sont tes amies. Elles sont plus simples que les @keyframes car elles ne gèrent que deux états : le début et la fin d'un changement.

La propriété transition est aussi une propriété raccourcie qui regroupe :

  • transition-property : Quelle propriété CSS doit être animée (ex: background-color, transform, all).
  • transition-duration : La durée de la transition (ex: 0.3s).
  • transition-timing-function : La courbe de vitesse (ex: ease).
  • transition-delay : Un délai avant que la transition ne démarre.

<div class="card-transition">Passe ta souris</div>
.card-transition {
  width: 150px;
  height: 100px;
  background-color: lightcoral;
  border-radius: 8px;
  display: flex;
  justify-content: center;
  align-items: center;
  color: white;
  font-weight: bold;
  cursor: pointer;
  /* Application de la transition */
  transition: background-color 0.4s ease, transform 0.4s ease;
}

.card-transition:hover {
  background-color: darkred;
  transform: translateY(-5px) scale(1.02);
}

5. les propriétés performantes : transform et opacity

C'est le conseil numéro un pour des animations fluides : priorise transform et opacity ! Ces propriétés sont animées par le navigateur directement sur le GPU (carte graphique), ce qui est hyper rapide et ne déclenche pas de recalcul de la mise en page (reflow) de ta page.

Animer des propriétés comme width, height, top, left, margin, padding peut sembler simple, mais ça force le navigateur à recalculer la position et la taille de tous les éléments autour, ce qui peut créer des "à-coups" (jank) et rendre tes animations saccadées, surtout sur des appareils moins puissants. transform te permet de faire des translations (translateX, translateY), des rotations (rotate), des mises à l'échelle (scale) et des inclinaisons (skew) sans ces problèmes. opacity gère la transparence de manière tout aussi performante.

<div class="spinner-perf"></div>
.spinner-perf {
  width: 50px;
  height: 50px;
  border: 5px solid rgba(0, 0, 0, 0.1);
  border-top-color: #3498db;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

6. la magie de will-change : optimisation pro

La propriété CSS will-change est un conseil pour les pros, arrête d'être paresseux et utilise-la ! Elle permet d'informer le navigateur à l'avance qu'une propriété spécifique d'un élément est susceptible d'être animée. En sachant cela, le navigateur peut effectuer des optimisations (comme créer une couche graphique séparée pour cet élément) avant même que l'animation ne commence, évitant ainsi des calculs coûteux au dernier moment.

Attention, will-change est puissant, mais utilise-le avec parcimonie et uniquement sur les éléments qui seront réellement animés. En abuser peut en fait dégrader les performances en forçant le navigateur à allouer trop de ressources inutiles. C'est un peu comme dire à l'orchestre de se préparer spécifiquement pour un instrument qui va jouer un solo intense, plutôt que de demander à tout le monde d'être prêt pour n'importe quel solo.

<div class="optim-box">Passe ta souris ici</div>
.optim-box {
  width: 150px;
  height: 100px;
  background-color: olive;
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
  /* Informe le navigateur que 'transform' et 'opacity' vont changer */
  will-change: transform, opacity;
  transition: all 0.5s ease-out;
}

.optim-box:hover {
  transform: scale(1.1) rotate(5deg);
  opacity: 0.8;
}

7. délai et synchronisation de plusieurs éléments

Animer un seul élément, c'est bien. Mais animer plusieurs éléments de manière synchronisée, avec un petit décalage, c'est encore mieux pour créer un effet "wow". La propriété animation-delay (ou le délai dans la propriété raccourcie animation) est ton amie ici. Elle te permet de spécifier un temps d'attente avant que l'animation ne commence.

Tu peux l'utiliser avec les pseudo-classes :nth-child() ou même des variables CSS pour des effets de cascade. Ça donne une impression de fluidité et de professionnalisme.

<ul class="item-list">
  <li class="list-item">Premier élément</li>
  <li class="list-item">Deuxième élément</li>
  <li class="list-item">Troisième élément</li>
</ul>
.item-list {
  list-style: none;
  padding: 0;
}

.list-item {
  background-color: #f0f0f0;
  margin-bottom: 10px;
  padding: 15px;
  border-radius: 5px;
  opacity: 0; /* Caché au départ */
  transform: translateY(20px); /* Déplacé vers le bas au départ */
  animation: slideIn 0.6s ease forwards; /* Animation d'apparition */
}

/* Délai pour chaque élément */
.list-item:nth-child(1) { animation-delay: 0s; }
.list-item:nth-child(2) { animation-delay: 0.2s; }
.list-item:nth-child(3) { animation-delay: 0.4s; }

@keyframes slideIn {
  0% { opacity: 0; transform: translateY(20px); }
  100% { opacity: 1; transform: translateY(0); }
}

8. l'interactivite avec javascript et IntersectionObserver

Parfois, tu auras besoin que tes animations ne démarrent que lorsque l'utilisateur scrolle jusqu'à un certain point de la page, ou qu'il clique sur un élément. C'est là que le JavaScript entre en jeu, mais pas forcément pour animer directement, mais plutôt pour déclencher les animations CSS.

L'API IntersectionObserver est ton meilleur ami pour les animations au scroll. Elle te permet de détecter quand un élément entre ou sort du viewport (la zone visible de l'écran) sans avoir à surveiller l'événement de scroll en permanence, ce qui est très performant.

<div style="height: 800px; background: #eee; text-align: center; padding-top: 200px;">Scrolle vers le bas</div>
<div class="animated-on-scroll">Je m'anime en scrollant !</div>
<div style="height: 800px; background: #eee; text-align: center; padding-top: 200px;">Encore un peu</div>
.animated-on-scroll {
  width: 200px;
  height: 100px;
  background-color: purple;
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 50px auto;
  opacity: 0;
  transform: translateY(50px);
  transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}

.animated-on-scroll.is-visible {
  opacity: 1;
  transform: translateY(0);
}
const elementsToAnimate = document.querySelectorAll('.animated-on-scroll');

const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.classList.add('is-visible');
      // Optionnel : Arrêter d'observer une fois l'animation déclenchée
      // observer.unobserve(entry.target); 
    } else {
      // Optionnel : Réinitialiser l'animation si l'élément quitte le viewport
      // entry.target.classList.remove('is-visible');
    }
  });
}, {
  threshold: 0.5 // Déclenche quand 50% de l'élément est visible
});

elementsToAnimate.forEach(element => {
  observer.observe(element);
});

9. les fonctions de timing : le rythme de tes animations

La animation-timing-function (ou transition-timing-function) contrôle l'accélération et la décélération de ton animation. C'est ce qui donne du "feeling" au mouvement.

Quelques valeurs courantes :

  • linear : Vitesse constante (robotique).
  • ease : Démarrage lent, accélération, fin lente (par défaut, naturel).
  • ease-in : Démarrage lent, accélération rapide.
  • ease-out : Démarrage rapide, fin lente.
  • ease-in-out : Démarrage et fin lents, accélération au milieu.
  • cubic-bezier(...) : Pour créer tes propres courbes de vitesse personnalisées.

<div class="ball linear"></div>
<div class="ball ease-in-out"></div>
.ball {
  width: 30px;
  height: 30px;
  background-color: orange;
  border-radius: 50%;
  position: relative;
  left: 0;
  margin-bottom: 10px;
  animation: moveBall 3s infinite alternate;
}

.linear { animation-timing-function: linear; }
.ease-in-out { animation-timing-function: ease-in-out; }

@keyframes moveBall {
  0% { left: 0; }
  100% { left: calc(100% - 30px); } /* Déplace la balle sur toute la largeur */
}

10. les transformations 3D : donnez de la profondeur

Avec transform et les propriétés 3D comme rotateX, rotateY, perspective et transform-style: preserve-3d, tu peux créer des effets de profondeur et de rotation vraiment impressionnants. Ça donne une dimension supplémentaire à tes designs.

perspective est appliquée au parent des éléments 3D et définit la "profondeur" de la scène. transform-style: preserve-3d est appliquée à l'élément qui contient les transformations 3D, pour s'assurer que ses enfants sont positionnés dans le même espace 3D.

<div class="flip-container">
  <div class="flipper">
    <div class="front">Devant</div>
    <div class="back">Derrière</div>
  </div>
</div>
.flip-container {
  perspective: 1000px; /* Profondeur de la scène 3D */
  width: 150px;
  height: 150px;
  margin: 20px;
}

.flipper {
  width: 100%;
  height: 100%;
  transition: transform 0.6s;
  transform-style: preserve-3d; /* Les enfants sont positionnés en 3D */
  position: relative;
}

.flip-container:hover .flipper {
  transform: rotateY(180deg);
}

.front, .back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden; /* Cache l'arrière face quand elle est retournée */
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 8px;
  font-weight: bold;
  color: white;
}

.front {
  background-color: tomato;
}

.back {
  background-color: darkgreen;
  transform: rotateY(180deg); /* Positionne le dos face à l'arrière */
}

11. utiliser des variables css pour la flexibilite

Les variables CSS (ou propriétés personnalisées) sont géniales pour rendre tes animations plus flexibles et faciles à maintenir. Tu peux définir une valeur une seule fois et la réutiliser dans plusieurs règles, ou même la modifier avec JavaScript pour des animations dynamiques.

C'est particulièrement utile pour les délais d'animation, les durées, ou des valeurs de transformation. Ça rend tes animations plus "DRY" (Don't Repeat Yourself).

<div class="var-item" style="--animation-delay: 0s;">Délai 0s</div>
<div class="var-item" style="--animation-delay: 0.3s;">Délai 0.3s</div>
<div class="var-item" style="--animation-delay: 0.6s;">Délai 0.6s</div>
.var-item {
  background-color: cadetblue;
  margin-bottom: 10px;
  padding: 15px;
  color: white;
  opacity: 0;
  transform: translateX(-50px);
  animation: slideInVar 0.5s ease forwards var(--animation-delay); /* Utilise la variable */
}

@keyframes slideInVar {
  0% { opacity: 0; transform: translateX(-50px); }
  100% { opacity: 1; transform: translateX(0); }
}

12. attention à l'accessibilité : prefers-reduced-motion

C'est un truc de pro, arrête d'être paresseux et pense à tous tes utilisateurs ! Certaines personnes souffrent de cinétose (mal des transports), de troubles vestibulaires, ou de migraines déclenchées par des animations trop vives ou trop rapides. C'est pourquoi CSS propose la media query prefers-reduced-motion.

Tu peux l'utiliser pour réduire ou désactiver les animations pour les utilisateurs qui ont activé l'option "Réduire les animations" dans les paramètres d'accessibilité de leur système d'exploitation. C'est un signe de respect envers ton audience et une meilleure expérience pour tout le monde.

Default Les animations seront désactivées ou réduites si l'utilisateur a configuré son système pour préférer un mouvement réduit. C'est un détail qui fait une énorme différence en termes d'accessibilité.
<div class="motion-box">Je bouge, mais pas pour tous.</div>
.motion-box {
  width: 100px;
  height: 100px;
  background-color: #e74c3c;
  margin: 20px;
  animation: slideSide 3s infinite alternate;
}

@keyframes slideSide {
  0% { transform: translateX(0); }
  100% { transform: translateX(200px); }
}

/* Réduction du mouvement pour l'accessibilité */
@media (prefers-reduced-motion: reduce) {
  .motion-box {
    animation: none; /* Désactive complètement l'animation */
    transform: translateX(0); /* S'assure que l'élément est à sa position initiale */
  }
}

Pour tester cela, vous devez modifier les préférences de mouvement réduit dans les paramètres de votre système d'exploitation :

  1. Windows : Allez dans Paramètres > Options d'ergonomie > Affichage > Afficher les animations dans Windows. Désactivez-le.
  2. macOS : Allez dans Préférences Système > Accessibilité > Affichage > Réduire les animations. Cochez cette option.
  3. Linux (GNOME/KDE) : Cherchez des options d'accessibilité ou d'apparence pour "réduire les animations" ou "désactiver les animations".

Après avoir modifié le paramètre système, actualisez votre page web.

13. les filtres css : pour des effets visuels

La propriété filter te permet d'appliquer des effets graphiques comme le flou, la luminosité, le contraste, ou le niveau de gris directement via CSS. C'est parfait pour des effets de survol sur des images ou des cartes, sans avoir besoin de manipuler les pixels avec JavaScript.

Combine filter avec transition pour des effets doux et élégants.

<img src="https://via.placeholder.com/200" alt="Exemple de filtre" class="filtered-img">
.filtered-img {
  width: 200px;
  height: 200px;
  filter: grayscale(100%) blur(2px); /* Noir et blanc et flou au départ */
  transition: filter 0.5s ease-in-out;
}

.filtered-img:hover {
  filter: grayscale(0%) blur(0px); /* Retour couleur et netteté au survol */
}

14. les background animations : donnez du mouvement à vos fonds

Tu peux animer les propriétés background-position ou background-size pour créer des effets de parallaxe subtils ou des zooms dynamiques sur des images de fond. C'est génial pour des sections "hero" ou des cartes qui prennent vie au survol.

Cela donne une profondeur et un intérêt visuel sans surcharger l'interface.

<div class="parallax-bg"><h3>Effet Parallaxe</h3></div>
.parallax-bg {
  width: 100%;
  height: 200px;
  background-image: url('https://via.placeholder.com/800x400/9b59b6/ffffff?text=Background+Animation');
  background-size: 120% auto; /* Image plus grande pour le mouvement */
  background-position: 50% 50%; /* Centre l'image */
  transition: background-position 0.8s ease-out;
  display: flex;
  justify-content: center;
  align-items: center;
  color: white;
  font-size: 1.5em;
  text-shadow: 1px 1px 2px black;
  overflow: hidden; /* Important pour ne pas voir le débordement de l'image */
}

.parallax-bg:hover {
  background-position: 20% 80%; /* Déplace l'image de fond */
}

15. conclusion : ton site n'est plus paresseux !

Voilà, la team ! On a fait le tour des animations CSS, de leurs fondamentaux à des techniques plus avancées. Tu as maintenant toutes les clés en main pour rendre tes interfaces dynamiques, engageantes et super pros. Arrête d'être paresseux ! Une bonne animation n'est pas juste un gadget ; c'est un outil puissant pour améliorer l'expérience utilisateur, guider l'œil, et donner du caractère à ton projet.

N'oublie jamais que la modération est la clé. Trop d'animations peuvent nuire à la performance et à l'accessibilité. Mais utilisées intelligemment, elles feront passer ton site du statut de "juste fonctionnel" à "absolument génial". À toi de jouer maintenant, le terrain est libre pour ta créativité !

Ton défi !
Choisis un élément statique de ton site actuel et rends-le vivant avec une animation CSS que tu as apprise ici. C'est en faisant qu'on apprend le mieux !

1 commentaire

  1. Anonyme
    Waaw merci beaucoup la team
N'hésitez pas de mentionner votre nom d'utilisateur Telegram à la fin de votre message pour recevoir des cadeaux de la part des modérateurs. Merci de commenter