SVG : qu’est-ce que c’est, concepts clés et utilisation dans le développement web

Auteur : IT Sectr Publié le : 2026-06-12 Temps de lecture : 10 min

SVG est un format d’image vectorielle basé sur XML, développé par le consortium W3C. Contrairement aux formats raster JPEG et PNG, le SVG stocke une description mathématique des formes : lignes, courbes, cercles et texte. Cela permet de redimensionner l’image à n’importe quelle taille sans perte de qualité. Selon MDN Web Docs, 2025, le SVG est pris en charge par tous les navigateurs modernes et utilisé pour les icônes, illustrations, animations et graphiques. Dans le développement web, le SVG est devenu la norme pour les interfaces adaptatives grâce à sa petite taille et à la possibilité de le styliser via CSS.

Points clés

  • SVG — graphiques vectoriels évolutifs basés sur XML, conservant la qualité à tout niveau de zoom.
  • Éléments SVG : rect, circle, ellipse, line, polyline, polygon, path et text décrivent les formes mathématiquement.
  • Attributs fill et stroke définissent la couleur de remplissage et de contour, hérités des éléments parents.
  • SVG inline permet de styliser les éléments via CSS et de les contrôler directement via JavaScript.
  • viewBox définit le système de coordonnées SVG et garantit une mise à l’échelle adaptative indépendamment des dimensions du conteneur.

Qu’est-ce que le SVG ?

SVG est un format de graphiques vectoriels basé sur XML, introduit en 2001 comme recommandation du W3C. Contrairement aux formats raster, le SVG décrit les images via des primitives géométriques : points, lignes, courbes et polygones. Un fichier SVG est un document XML texte brut qui peut être lu, édité et compressé avec des outils standard.

L’architecture SVG comprend plusieurs concepts clés. viewBox définit un système de coordonnées virtuel indépendant des dimensions réelles de l’élément. Par exemple, viewBox="0 0 100 100" crée une grille carrée de 100×100, à l’intérieur de laquelle toutes les coordonnées sont fixes. Lorsque la largeur ou la hauteur du conteneur change, le contenu est mis à l’échelle proportionnellement.

Selon la W3C SVG 2 Specification, la version moderne du SVG prend en charge les dégradés, les masques, les filtres, le texte avec positionnement arbitraire, l’interactivité via JavaScript et l’animation via CSS et SMIL. Le SVG est intégré au DOM en tant qu’élément HTML complet, permettant un contrôle programmatique sur chaque primitive graphique.

Dans le développement mobile, le SVG est également utilisé sous iOS via UIGraphicsImageRenderer et sous Android via VectorDrawable — les deux formats convertissent des descriptions de type SVG en rasters accélérés par le matériel sur le GPU.

Histoire et évolution du format SVG

Le SVG 1.0 est devenu une recommandation du W3C en 2001, le SVG 1.1 en 2003 et le SVG 2.0 est en développement depuis 2012. La principale innovation du SVG 2 est une intégration plus profonde avec CSS, la prise en charge des modes de composition et de mélange, et la possibilité d’utiliser le SVG dans HTML sans préfixes d’espace de noms.

Bien que le SVG 2 n’ait pas encore atteint le statut de Recommandation, les navigateurs modernes prennent déjà en charge la plupart de ses fonctionnalités. Chrome, Safari, Firefox et Edge ont une prise en charge quasi complète du SVG 1.1 et une partie significative du SVG 2.

Éléments de base du SVG

Le SVG fournit un ensemble d’éléments pour décrire des graphiques bidimensionnels. Chaque élément possède des attributs qui définissent sa position, sa taille et son apparence visuelle. Les attributs peuvent être définis comme des attributs xml ou via des propriétés CSS.

  • <rect> — rectangle avec les attributs x, y, width, height, rx, ry (arrondi des coins).
  • <circle> — cercle avec les attributs cx, cy (centre) et r (rayon).
  • <ellipse> — ellipse avec les attributs cx, cy, rx, ry.
  • <line> — segment de ligne avec les attributs x1, y1, x2, y2.
  • <polyline> — ligne brisée avec l’attribut points (liste de coordonnées).
  • <polygon> — polygone fermé avec l’attribut points.
  • <path> — tracé arbitraire avec l’attribut d (commandes : M, L, C, Q, A, Z).
  • <text> — élément de texte avec les attributs x, y, font-size, font-family.

L’élément path est l’élément SVG le plus puissant et le plus flexible. L’attribut d contient une séquence de commandes : M (moveTo), L (lineTo), C (courbe de Bézier cubique), Q (courbe de Bézier quadratique), A (arc), Z (fermer le chemin). Chaque commande a une forme absolue ou relative (lettre majuscule ou minuscule).

Le SVG prend également en charge le regroupement d’éléments via <g>. Le groupe hérite des attributs visuels (fill, stroke, transform) vers tous les éléments enfants. Cela permet d’appliquer un style unique à tout un ensemble de formes et de contrôler leur position via une seule transformation.

SVG vs graphiques raster : comparaison des formats

La principale différence entre SVG et les formats raster (JPEG, PNG, WebP) est la manière de stocker l’information. Le raster stocke la couleur de chaque pixel dans une grille de taille fixe. Le SVG stocke des commandes mathématiques pour reproduire des formes. Cette différence détermine tous les avantages et inconvénients des formats.

CaractéristiqueSVGRaster (PNG/JPEG)
RedimensionnementSans perte de qualitéPerte de qualité en agrandissant
Taille du fichierPetite pour les formes simplesDépend de la résolution
ÉditionTextuelle, via le codeNécessite un éditeur graphique
Stylisation CSSPrise en charge complèteNon
AnimationCSS + SMILUniquement GIF ou APNG
PhotographiesPas adaptéIdéal
Icônes/LogosIdéalRedondant
Support navigateurs96%+100%

Selon HTTP Archive, 2025, 68% des sites web utilisent le SVG pour les icônes, 34% pour les illustrations et 22% pour les logos. La taille moyenne d’une icône SVG est de 0,5–2 Ko, tandis qu’une icône raster de qualité similaire occupe 5–20 Ko au format PNG.

Le SVG n’est pas adapté aux photographies et aux images raster complexes — la taille de la description XML dépasserait celle du JPEG équivalent. Domaines d’application recommandés pour le SVG : icônes, logos, illustrations, diagrammes, graphiques, éléments d’interface avec design adaptatif.

Quand choisir le SVG et quand choisir le format raster

Le SVG est le choix optimal pour les éléments d’interface qui doivent paraître nets sur les écrans Retina et à tout niveau de zoom du navigateur. Le raster est pour les photographies, les textures complexes et les images avec des millions de couleurs où la description vectorielle serait excessivement complexe.

Approche hybride — combinaison du SVG pour les éléments d’interface et du WebP/AVIF pour le contenu photo — offre le meilleur équilibre entre qualité et performance de chargement de la page.

SVG inline et stylisation CSS

SVG inline consiste à intégrer le balisage SVG directement dans un document HTML, plutôt que sous forme de fichier séparé via <img> ou background-image. L’avantage du SVG inline est que les éléments SVG deviennent partie du DOM et peuvent être stylisés via CSS, contrôlés via JavaScript et animés sans requêtes supplémentaires au serveur.

Contrairement à <img src="icon.svg">, où le SVG est isolé dans le shadow DOM, le SVG inline hérite des couleurs et polices du document parent. Cela permet de mettre en œuvre, par exemple, le changement de couleur d’une icône au survol via la pseudo-classe CSS :hover sans charger un fichier séparé pour chaque état.

Selon CSS-Tricks, le SVG inline est la méthode recommandée pour utiliser les icônes dans les applications web modernes. Les propriétés CSS fill, stroke, stroke-width s’appliquent directement aux éléments SVG. Pour la personnalisation via CSS, il est important que le SVG source n’ait pas fill et stroke définis comme attributs inline — sinon CSS ne peut pas les remplacer.

  • Avantages : stylisation via CSS, contrôle via JS, aucune requête HTTP, adaptabilité du viewBox.
  • Inconvénients : augmentation de la taille de la page HTML, impossibilité de mise en cache séparée du HTML.
  • Alternative : sprites SVG — regrouper plusieurs SVG dans un seul fichier et utiliser <use href="#id">.

Les sprites SVG résolvent le problème de cache : toutes les icônes sont regroupées dans un seul fichier, le navigateur le charge une fois, et les icônes individuelles sont accédées via <use> en spécifiant l’id de l’élément souhaité dans le sprite.

Animation SVG : CSS et SMIL

L’animation SVG avec CSS est la façon la plus courante et la plus performante d’animer des graphiques vectoriels dans le navigateur. Les propriétés CSS comme transform, opacity et fill s’appliquent aux éléments SVG comme aux éléments HTML. Pour l’animation le long d’un chemin arbitraire, on utilise la propriété CSS offset-path.

SMIL (Synchronized Multimedia Integration Language) est un mécanisme d’animation intégré au SVG, indépendant de CSS. Les éléments <animate>, <animateTransform> et <animateMotion> permettent d’animer n’importe quel attribut SVG sans JavaScript ni CSS. L’animation SMIL est garantie d’être synchronisée avec la fréquence d’images du navigateur.

Selon MDN Web Docs, SMIL est pris en charge dans tous les navigateurs modernes, mais l’animation CSS est considérée comme plus prévisible et performante. Le cas d’utilisation principal de SMIL est l’animation d’attributs inaccessibles via CSS, comme d (path) de l’élément <path>.

JavaScript + requestAnimationFrame offre un contrôle maximal sur l’animation SVG. Les développeurs web utilisent des bibliothèques comme GSAP et Anime.js pour des séquences d’animation complexes avec des timelines et des fonctions d’easing difficiles à implémenter avec du CSS pur.

Exemples de code : création de graphiques SVG

Le premier exemple est une icône de maison simple utilisant des éléments SVG de base. Toutes les formes sont rect et polyline :

html
<!-- Inline SVG icon -->
<svg viewBox="0 0 100 100" width="48" height="48" xmlns="http://www.w3.org/2000/svg">
  <rect x="20" y="50" width="60" height="40" fill="#4A90D9" />
  <rect x="35" y="65" width="30" height="25" fill="#fff" />
  <polyline points="10,50 50,15 90,50" fill="none" stroke="#4A90D9" stroke-width="6" />
</svg>

Le deuxième exemple montre une animation de rotation d’un loader via CSS. Il utilise <circle> avec l’attribut stroke-dasharray pour créer un contour en pointillés :

html
<!-- CSS animated spinner -->
<svg class="spinner" viewBox="0 0 50 50" width="40" height="40">
  <circle cx="25" cy="25" r="20" fill="none"
    stroke="#4A90D9" stroke-width="4"
    stroke-dasharray="125.6 31.4" />
</svg>

<style>
  .spinner circle {
    animation: spin 1.5s linear infinite;
    transform-origin: center;
  }
  @keyframes spin {
    to { transform: rotate(360deg); }
  }
</style>

Le troisième exemple utilise la bibliothèque GSAP pour animer un chemin afin de dessiner un contour en douceur. GSAP travaille avec l’attribut stroke-dashoffset, créant un effet d’apparition de la ligne :

js
// Dessiner un chemin avec GSAP
import gsap from "gsap";

const path = document.querySelector("#myPath");
const length = path.getTotalLength();

gsap.set(path, {
    strokeDasharray: length,
    strokeDashoffset: length
});

gsap.to(path, {
    strokeDashoffset: 0,
    duration: 2,
    ease: "power2.out"
});

Questions fréquentes

Qu’est-ce que le SVG en termes simples ?

SVG est un format d’image qui ne stocke pas des pixels mais des formes mathématiques : lignes, cercles, rectangles et courbes. C’est pourquoi une image SVG peut être agrandie à n’importe quelle taille tout en restant nette. Un fichier SVG est du code XML textuel qui peut être édité dans n’importe quel éditeur de code.

Pourquoi le SVG est-il meilleur que le PNG pour les icônes ?

Le SVG prend moins de place (0,5–2 Ko contre 5–20 Ko pour le PNG), ne perd pas de qualité sur les écrans Retina, prend en charge l’animation et la stylisation via CSS. Pour les icônes d’interface, le SVG est la norme. Le PNG est mieux adapté aux photographies et aux images avec des transitions de couleur complexes.

Comment changer la couleur d’un SVG au survol ?

Utilisez SVG inline sans attributs fill dans le balisage, puis définissez fill en CSS : svg:hover path { fill: red; }. Si le SVG est chargé via <img>, CSS ne peut pas changer la couleur — utilisez le SVG inline ou un sprite SVG avec <use href="#id">.

Qu’est-ce que viewBox dans SVG ?

viewBox est un système de coordonnées virtuel du SVG indépendant des dimensions réelles de l’élément. Format : viewBox="minX minY width height". Par exemple, viewBox="0 0 100 100" crée une grille de coordonnées 100×100. Toutes les coordonnées internes sont définies par rapport à cette grille et se mettent à l’échelle automatiquement lorsque la taille du conteneur change.

Peut-on animer du SVG sans JavaScript ?

Oui. Le SVG prend en charge l’animation CSS (keyframes, transition) et SMIL — un mécanisme d’animation intégré avec les éléments <animate>, <animateTransform> et <animateMotion>. SMIL permet d’animer des attributs inaccessibles via CSS, comme path de l’élément <path>.

Résumé

  • SVG — format vectoriel basé sur XML, évolutif sans perte de qualité et pris en charge par tous les navigateurs modernes.
  • Éléments de base : rect, circle, ellipse, line, polyline, polygon, path et text couvrent toutes les tâches graphiques 2D.
  • Le SVG surpasse les formats raster pour les icônes, logos et éléments d’interface en taille de fichier et qualité Retina.
  • SVG inline s’intègre au DOM et permet de styliser les éléments via CSS, de les contrôler via JavaScript et de les animer.
  • viewBox garantit l’adaptabilité du SVG — le contenu s’ajuste automatiquement à la taille du conteneur.
  • L’animation SVG est possible via CSS (transition, keyframes), SMIL (<animate>) et JavaScript (GSAP, Anime.js).
  • Les sprites SVG regroupent plusieurs icônes dans un seul fichier pour une mise en cache efficace et un chargement plus rapide.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi