Skip to content
Tutorial

Animations SVG avec CSS et JavaScript : Exemples de Code pour Développeurs (2026)

Exemples de code pratiques pour animer des SVG avec CSS, GSAP, Framer Motion et JavaScript. Snippets prêts à l'emploi pour loaders, transitions, effets hover et animations au scroll.

Robin Monteiro2 février 202610 octobre 202615 min
Use this article with an AI assistant:
.md
Animations SVG avec CSS et JavaScript : Exemples de Code pour Développeurs (2026)
R
Robin Monteiro

Founder of VectoSolve

Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.

How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author

Image vectorizationCutting machine filesEmbroidery filesSVG
Free previewNo signupFull-quality output

Pourquoi les Animations SVG Comptent en 2026

Les animations SVG sont devenues le pilier des interfaces web modernes. Des micro-interactions subtiles qui guident les utilisateurs dans un tunnel d'achat aux animations hero plein écran qui définissent l'identité d'une marque, les SVG animés offrent un mouvement indépendant de la résolution, léger et accessible qu'aucun autre format ne peut égaler.

Contrairement aux animations raster (GIF, PNG animés ou même vidéo), les SVG s'adaptent parfaitement à n'importe quelle taille d'écran, restent nets sur les écrans 4K et Retina, et peuvent être manipulés avec le même CSS et JavaScript que vous connaissez déjà. En 2026, avec les Core Web Vitals qui impactent directement le classement SEO et des attentes utilisateur au plus haut, maîtriser l'animation SVG n'est pas optionnel — c'est essentiel.

Techniques d'animation SVG : CSS, JavaScript et approches IA

Ce guide vous accompagne à travers chaque approche majeure d'animation SVG, du CSS pur aux bibliothèques JavaScript avancées, avec des exemples de code prêts pour la production à chaque étape.


Fondamentaux de l'Animation CSS pour SVG

Le CSS est votre premier et souvent meilleur outil pour les animations SVG. Le thread compositor du navigateur gère les animations CSS sur les propriétés transform et opacity sans toucher au thread principal, vous offrant des performances fluides à 60fps gratuitement.

Transitions CSS : L'Approche la Plus Simple

Les transitions sont parfaites pour les animations basées sur les états — effets hover, états focus et classes toggles. Elles interpolent entre deux états avec un minimum de code.

/* Mise à l'échelle au survol d'une icône SVG */
.svg-icon {
  transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
  transform-origin: center;
}

.svg-icon:hover {
  transform: scale(1.15);
}

/* Transition de couleur sur un chemin SVG */
.svg-icon path {
  transition: fill 0.25s ease-in-out,
              stroke 0.25s ease-in-out;
  fill: #6366f1;
}

.svg-icon:hover path {
  fill: #818cf8;
}

Astuce : Définissez toujours transform-origin explicitement sur les éléments SVG. Contrairement aux éléments HTML qui sont centrés par défaut, les éléments SVG utilisent par défaut l'origine du viewport SVG (0, 0), ce qui provoque des comportements de rotation et de mise à l'échelle inattendus.

Animations CSS Keyframes : Contrôle Créatif Total

Les keyframes vous permettent de définir des animations multi-étapes avec un contrôle précis du timing. Idéales pour les spinners de chargement, indicateurs pulsants, effets de dessin et animations en boucle.

/* Point de notification pulsant */
@keyframes pulse {
  0% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.4); opacity: 0.6; }
  100% { transform: scale(1); opacity: 1; }
}

.notification-dot {
  animation: pulse 2s ease-in-out infinite;
  transform-origin: center;
}

/* Effet de dessin SVG avec stroke-dasharray */
@keyframes draw-path {
  from { stroke-dashoffset: 1000; }
  to { stroke-dashoffset: 0; }
}

.draw-line {
  stroke-dasharray: 1000;
  animation: draw-path 2.5s ease-out forwards;
}

La technique de dessin avec stroke-dasharray est l'une des animations SVG les plus populaires sur le web. Elle fonctionne en définissant la longueur du tiret égale à la longueur totale du chemin, puis en animant l'offset de la valeur maximale à zéro — créant l'illusion que le chemin est dessiné en temps réel.

Transforms CSS : Le Sweet Spot de la Performance

Les transforms sont les propriétés CSS les plus performantes à animer car elles sont gérées entièrement par le thread compositor GPU.

/* Animation de rotation */
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* Transforms combinés pour un mouvement complexe */
@keyframes float-and-rotate {
  0% { transform: translateY(0px) rotate(0deg); }
  25% { transform: translateY(-10px) rotate(5deg); }
  50% { transform: translateY(-18px) rotate(0deg); }
  75% { transform: translateY(-10px) rotate(-5deg); }
  100% { transform: translateY(0px) rotate(0deg); }
}

.floating-element {
  animation: float-and-rotate 4s ease-in-out infinite;
  transform-origin: center;
}

Les Propriétés Sûres pour le Compositor : Seuls transform et opacity sont garantis de fonctionner sur le thread compositor. Animer fill, stroke, width, height ou d (données de chemin) déclenche des recalculs de layout et peut causer des saccades sur des pages complexes.


Approches d'Animation JavaScript

Quand le CSS atteint ses limites — valeurs dynamiques, déclenchements au scroll, simulations physiques ou timelines complexes — JavaScript prend le relais.

L'API Web Animations (WAAPI)

L'API Web Animations est la solution navigateur native pour les animations pilotées par JavaScript. Elle offre les mêmes avantages de performance que les animations CSS avec un contrôle programmatique complet.

// Animation WAAPI basique sur un élément SVG
const logo = document.querySelector("#svg-logo");

const fadeIn = logo.animate(
  [
    { opacity: 0, transform: "translateY(20px) scale(0.95)" },
    { opacity: 1, transform: "translateY(0) scale(1)" }
  ],
  {
    duration: 800,
    easing: "cubic-bezier(0.22, 1, 0.36, 1)",
    fill: "forwards"
  }
);

// WAAPI retourne une promesse — parfait pour le séquencement
fadeIn.finished.then(() => {
  console.log("Animation du logo terminée");
  animateSubElements();
});

WAAPI excelle quand vous devez mettre en pause, inverser, ajuster la vitesse ou synchroniser plusieurs animations.

// WAAPI avancé : contrôle de multiples chemins SVG
const paths = document.querySelectorAll(".animate-path");
const animations = [];

paths.forEach((path, index) => {
  const length = path.getTotalLength();
  path.style.strokeDasharray = length;
  path.style.strokeDashoffset = length;

  const anim = path.animate(
    [{ strokeDashoffset: length }, { strokeDashoffset: 0 }],
    {
      duration: 1500,
      delay: index * 200,
      easing: "ease-out",
      fill: "forwards"
    }
  );
  animations.push(anim);
});
Animation SVG : dessin de chemin et effets de morphing

GSAP : La Bibliothèque Standard de l'Industrie

GreenSock Animation Platform (GSAP) reste la bibliothèque d'animation la plus éprouvée en 2026. Ses plugins spécifiques au SVG gèrent les cas limites qui nécessiteraient des centaines de lignes de code personnalisé.

import { gsap } from "gsap";

// Animation GSAP simple d'un SVG
gsap.from("#hero-svg", {
  opacity: 0, scale: 0.8, rotation: -5,
  duration: 1.2, ease: "back.out(1.7)",
  transformOrigin: "center center"
});

// Timeline GSAP pour animations séquencées
const tl = gsap.timeline({ defaults: { ease: "power2.out" } });

tl.from("#bg-circle", { scale: 0, duration: 0.6 })
  .from("#icon-paths path", {
    strokeDashoffset: 500, duration: 1, stagger: 0.15
  }, "-=0.3")
  .from("#label-text", { opacity: 0, y: 15, duration: 0.5 }, "-=0.5")
  .to("#highlight", { fill: "#6366f1", duration: 0.4 });

// Intégration ScrollTrigger
import { ScrollTrigger } from "gsap/ScrollTrigger";
gsap.registerPlugin(ScrollTrigger);

gsap.from(".feature-svg", {
  scrollTrigger: {
    trigger: ".features-section",
    start: "top 80%",
    toggleActions: "play none none reverse"
  },
  y: 40, opacity: 0, duration: 0.8, stagger: 0.2
});

Attention : La licence GSAP a changé en 2024. La bibliothèque core et la plupart des plugins sont gratuits pour les sites standards, mais la licence commerciale « Business Green » est requise pour les produits SaaS qui facturent les fonctionnalités d'animation aux utilisateurs finaux.

Animations SMIL : Toujours en Vie, Mais à Utiliser avec Parcimonie

Les animations SMIL sont définies directement dans le balisage SVG avec les éléments <animate>, <animateTransform> et <animateMotion>. Chrome les avait dépréciées en 2015 mais a fait marche arrière — elles restent supportées dans tous les navigateurs majeurs en 2026.

<svg viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="20" fill="#6366f1">
    <animate attributeName="r" values="20;25;20" dur="2s" repeatCount="indefinite" />
    <animate attributeName="opacity" values="1;0.6;1" dur="2s" repeatCount="indefinite" />
  </circle>
</svg>

SMIL est utile quand vous avez besoin d'animations intégrées directement dans des fichiers SVG autonomes (comme des favicons animés ou des SVG utilisés dans des balises <img> où CSS et JS ne peuvent pas atteindre).


Optimisation des Performances en Profondeur

La performance d'animation peut faire ou défaire l'expérience utilisateur. Une animation saccadée est pire que pas d'animation du tout.

La Règle du Thread Compositor

Les navigateurs modernes ont deux threads de rendu principaux : le thread principal (gère JavaScript, layout, paint) et le thread compositor (gère la composition finale des pixels). Le thread compositor peut animer transform et opacity indépendamment.

/* BON : Animations sur le thread compositor */
.optimized {
  transition: transform 0.3s, opacity 0.3s;
}
.optimized:hover {
  transform: translateY(-4px) scale(1.02);
  opacity: 0.9;
}

/* MAUVAIS : Animations sur le thread principal */
.unoptimized {
  transition: top 0.3s, width 0.3s, fill 0.3s;
}
.unoptimized:hover {
  top: -4px;
  width: 110%;
}

La Propriété will-change

La propriété will-change indique au navigateur qu'un élément va être animé, lui permettant de promouvoir l'élément sur sa propre couche compositor à l'avance.

.will-animate {
  will-change: transform, opacity;
}

.animation-done {
  will-change: auto;
}

N'abusez pas de will-change. Chaque couche promue consomme de la mémoire GPU. L'appliquer à des dizaines d'éléments peut dégrader les performances. Utilisez-le sélectivement.

Réduire la Complexité SVG

Avant d'animer, optimisez le SVG lui-même :

  • Simplifiez les chemins : Utilisez des outils comme SVGO ou l'optimiseur intégré de VectoSolve pour réduire le nombre de points
  • Supprimez les éléments cachés : Supprimez les calques derrière des remplissages opaques
  • Aplatissez les groupes : L'imbrication inutile de <g> ajoute du surcoût aux calculs de transform
  • Utilisez des symboles pour les formes répétées : Les références <use> sont plus efficaces que les chemins dupliqués

Accessibilité : Respecter les Préférences Utilisateur

Tout le monde ne veut pas ou ne peut pas tolérer le mouvement à l'écran. Les utilisateurs souffrant de troubles vestibulaires, de sensibilité au mouvement, ou simplement préférant un mouvement réduit ont un paramètre système que vous devez respecter.

La Media Query prefers-reduced-motion

/* Animation complète pour les utilisateurs qui n'ont pas opté out */
.animated-element {
  animation: slide-in 0.6s ease-out forwards;
}

/* Mouvement réduit : apparition instantanée */
@media (prefers-reduced-motion: reduce) {
  .animated-element {
    animation: none;
    opacity: 1;
  }
}
// Vérification en JavaScript
const prefersReduced = window.matchMedia(
  "(prefers-reduced-motion: reduce)"
).matches;

if (prefersReduced) {
  element.style.opacity = "1";
} else {
  element.animate(
    [{ opacity: 0 }, { opacity: 1 }],
    { duration: 600, easing: "ease-out" }
  );
}

Le critère de succès WCAG 2.2 2.3.3 (ajouté en 2023) recommande que l'animation de mouvement déclenchée par l'interaction puisse être désactivée. Ce n'est pas juste un plus — c'est de plus en plus une exigence légale.


CSS vs JavaScript vs IA : Choisir la Bonne Approche

CritèreAnimations CSSJavaScript (WAAPI/GSAP)IA (VectoSolve)
Complexité de mise en placeZéro dépendanceMinimale (WAAPI) à modérée (GSAP)Upload et configurer
PerformanceExcellente (compositor)Excellente (WAAPI) / Très bonne (GSAP)Excellente (sortie optimisée)
Valeurs dynamiquesLimitéesContrôle totalDéterminé par l'IA
Séquencement timelineComplexeSupport natifAutomatique
Morphing de cheminNon supportéNécessite une bibliothèqueIntégré
Idéal pourHover, boucles, transitions simplesInteractions complexes, data vizPrototypage rapide

Règle d'or : Commencez par CSS. Passez à WAAPI quand vous avez besoin de contrôle programmatique. Utilisez GSAP pour les timelines, le morphing ou les triggers au scroll. Utilisez les outils IA quand vous avez besoin de vitesse.


Intégration Framework : React et Next.js

Dans les applications React et Next.js modernes, les animations SVG nécessitent une approche légèrement différente en raison du DOM virtuel et du cycle de vie des composants.

import { useRef, useEffect } from "react";

function AnimatedIcon({ isActive }) {
  const pathRef = useRef(null);

  useEffect(() => {
    const path = pathRef.current;
    if (!path) return;

    const prefersReduced = window.matchMedia(
      "(prefers-reduced-motion: reduce)"
    ).matches;

    if (prefersReduced) {
      path.style.strokeDashoffset = "0";
      return;
    }

    const length = path.getTotalLength();
    path.style.strokeDasharray = length;
    path.style.strokeDashoffset = length;

    const animation = path.animate(
      [{ strokeDashoffset: length }, { strokeDashoffset: 0 }],
      { duration: 1200, easing: "ease-out", fill: "forwards" }
    );

    return () => animation.cancel();
  }, [isActive]);

  return (
    <svg viewBox="0 0 64 64" role="img" aria-label="Status">
      <path ref={pathRef} d="M18 44 L26 32 L34 38 L46 20"
        fill="none" stroke="currentColor" strokeWidth="2.5"
        strokeLinecap="round" />
    </svg>
  );
}

Points Clés et Prochaines Étapes

L'animation SVG en 2026 se situe à l'intersection de la performance, de l'accessibilité et de la créativité. L'outillage n'a jamais été aussi mature :

  1. Commencez par CSS pour les effets hover simples, les états de chargement et les animations en boucle
  2. Passez à l'API Web Animations quand vous avez besoin de contrôle dynamique, séquencement ou manipulation de lecture
  3. Adoptez GSAP pour les timelines complexes, les animations au scroll et les fonctionnalités SVG spécifiques comme le morphing
  4. Considérez les outils IA comme l'animateur SVG de VectoSolve pour le prototypage rapide et l'optimisation automatisée
  5. Optimisez toujours en utilisant les propriétés compositor-safe et en respectant prefers-reduced-motion

La meilleure animation SVG est celle que l'utilisateur remarque à peine — elle semble naturelle, se charge instantanément et se dégrade gracieusement pour ceux qui préfèrent le calme.

Prêt à animer vos SVG sans écrire de code ? Essayez l'Animateur SVG IA de VectoSolve pour générer des animations CSS et JavaScript prêtes pour la production à partir de n'importe quel fichier SVG. Uploadez votre SVG, décrivez l'animation souhaitée et obtenez du code optimisé en quelques secondes.


PropriétéComposité (Rapide)Déclenche Layout (Lent)
transformOui — accéléré GPUNon
opacityOui — accéléré GPUNon
width / heightNonOui — déclenche reflow
top / leftNonOui — déclenche reflow
fill / strokeNonRepaint seulement (modéré)
Tags:
Animation SVG
Animation CSS
Développement web
Motion design
Tutoriel
Share:

Try VectoSolve Now

Convert your images to high-quality SVG vectors with AI

AI-Powered Vectorization

Ready to vectorize your images?

Convert your PNG, JPG, and other images to high-quality, scalable SVG vectors in seconds.