DonnIA
Toutes les ressources
GuideBonnes pratiques12 min

Des animations web qui tiennent à l'usage

Quand animer, quelles propriétés, quelles durées, comment gérer l'interruption et la préférence « réduire les animations ».


Une animation réussie ne se remarque pas. Elle explique où va l'élément, elle relie l'avant et l'après, puis elle disparaît de la conscience du visiteur. Une animation ratée, elle, se remarque toujours : à la troisième visite, elle devient une attente.

La plupart des animations produites par un agent tombent dans le second cas. Tout apparaît en fondu au défilement, chaque carte se soulève au survol, et les durées tournent autour de la seconde parce que c'est joli sur une démo et pénible à l'usage.

Ce guide donne les quelques règles qui font la différence : quand animer, avec quelles propriétés, à quelle durée, et comment gérer l'interruption et les préférences système.

Avant de commencer

  • Une page qui existe déjà, avec du contenu réel
  • Les outils de développement du navigateur
  • De quoi tester au clavier et avec l'option système « réduire les animations »

1Décider si ça doit bouger

Une animation se justifie quand elle répond à une de ces trois questions.

  • Où est-ce que ça va ? Un panneau qui glisse depuis la droite indique d'où il vient et où il retournera.
  • Est-ce que mon action a été prise en compte ? Un bouton qui réagit au clic confirme sans texte.
  • Qu'est-ce qui a changé ? Une ligne de tableau qui s'insère en douceur évite de chercher ce qui est nouveau.

Si aucune ne s'applique, ne bouge pas. Un contenu qui apparaît au défilement ne répond à aucune des trois : le visiteur sait déjà qu'il défile, et le fondu ne fait que retarder la lecture.

Le piège du fondu au défilement

C'est l'animation la plus produite par défaut et la plus discutable. Elle ajoute une latence sur chaque bloc, elle casse la recherche dans la page tant que le contenu est masqué, et elle punit surtout le visiteur qui défile vite. Si tu la gardes, garde-la courte et réserve-la à un ou deux blocs, pas à tout.

2Animer transform et opacity, presque uniquement

Le navigateur découpe le rendu en étapes : calcul de la mise en page, peinture, puis composition des couches. Une animation qui touche à la mise en page force le navigateur à tout recalculer à chaque image.

La recommandation de la documentation de performance web est nette : restreindre les animations à transform et opacity, qui se traitent à l'étape de composition, et éviter les propriétés qui déclenchent mise en page ou peinture sauf nécessité réelle.

À éviterÉquivalent en transform
left, toptransform: translate(...)
width, heighttransform: scale(...)
margin-top pour décalertransform: translateY(...)
/* recalcule la mise en page a chaque image */
.carte { transition: top 200ms; }

/* traite a la composition */
.carte { transition: transform 200ms; }

Sur will-change, la recommandation officielle est de ne l'utiliser que si tu constates un problème graphique et que promouvoir l'élément dans une couche semble aider. Ce n'est pas une optimisation à poser partout : chaque couche consomme de la mémoire.

3Choisir une durée courte

Les repères publiés par le Nielsen Norman Group sont utilisables tels quels :

Type d'animationDurée
Retour simple (case cochée, interrupteur)environ 100 ms
Changement d'écran notable (fenêtre modale qui entre)200 à 300 ms
Cas général100 à 400 ms, 400 ms étant déjà très lent

Au-delà de 500 ms, l'animation devient une gêne. Retiens le principe : plus le déplacement est petit, plus il doit être court. Un survol de bouton à 300 ms est déjà mou.

Pour les courbes, deux suffisent dans la plupart des interfaces : une sortie rapide puis freinée pour ce qui entre à l'écran, et une accélération pour ce qui en sort.

4Gérer l'interruption

C'est le point qui sépare une interface soignée d'une interface irritante. Un visiteur qui survole une carte, part, revient, ne doit pas attendre la fin de l'animation précédente.

Les transitions CSS gèrent ça correctement par nature : elles repartent de la valeur courante. Les animations pilotées en JavaScript, en revanche, redémarrent souvent du début si personne ne s'en occupe. La règle simple : si un état peut changer plus vite que la durée de l'animation, utilise une transition sur une propriété, pas une séquence d'images clés jouée du début à la fin.

/* repart de la position courante si on survole a nouveau */
.carte {
  transition: transform 160ms ease-out;
}
.carte:hover {
  transform: translateY(-4px);
}

5Respecter la préférence système

Certains utilisateurs souffrent physiquement du mouvement à l'écran. Le système d'exploitation expose leur préférence, et le CSS la lit avec une seule requête de média. Les deux valeurs possibles sont no-preference et reduce.

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

Ce bloc large est un filet de sécurité, pas une finalité. Mieux vaut, sur les animations importantes, remplacer le mouvement par un changement d'opacité : l'information reste transmise, sans déplacement.

Tester réellement

Active l'option dans les réglages de ton système, puis recharge la page. Sur macOS, elle se trouve dans les réglages d'accessibilité, section affichage. Sous Windows, dans les effets visuels. Vérifie que rien ne casse : une page qui dépend d'une animation pour révéler son contenu devient vide.

Faire auditer par un agent

Un agent avec accès au navigateur peut relever les faits à ta place :

Ouvre [URL]. Liste toutes les regles CSS qui contiennent transition ou
animation. Pour chacune : le selecteur, les proprietes animees, la duree.
Signale celles qui animent une propriete autre que transform et opacity,
et celles dont la duree depasse 400 ms.

Puis :

Cherche dans le projet s'il existe une regle prefers-reduced-motion. Si
non, dis-le. Si oui, liste les animations qu'elle ne couvre pas.

Quelques prompts pour aller plus loin

ObjectifPrompt à adapter
InventaireListe toutes les animations du projet avec leur duree et les proprietes animees. Ne corrige rien.
ConvertirRemplace les animations de [PROPRIETE] par des transformations equivalentes, sans changer le rendu final.
Réduire le bruitIdentifie les animations declenchees au defilement et propose lesquelles supprimer, avec une justification par cas.
Vérifier l'accessibilitéSimule prefers-reduced-motion: reduce et dis-moi quels contenus deviennent invisibles ou inaccessibles.
UniformiserPropose deux durees et deux courbes pour tout le projet, et liste les regles a modifier pour s'y conformer.

Tu as d’autres ressources comme ça ?

Ce que tu viens de lire est entièrement gratuit. Une nouvelle ressource part chaque semaine dans la newsletter : guides, modèles à copier et liens triés, sans compte à créer.

Cette page est en accès libre, n’hésite pas à la partager.