Les dernières actualités d'Alsacreations.com
Les images SVG (Scalable Vector Graphics) offrent de nombreux avantages : légèreté, agrandissement infini et possibilité de manipulation via CSS. Cependant, leur stylisation peut s'avérer complexe selon la méthode d'intégration choisie. Ce guide vous explique comment appliquer efficacement des styles CSS sur vos SVG selon différents scénarios.
Les SVG fonctionnent dans leur propre espace de nommage XML. Cette particularité explique pourquoi les interactions entre le CSS de votre page et les éléments SVG ne sont pas toujours évidentes. Deux mondes coexistent :
La façon dont vous intégrez un SVG détermine comment vous pourrez le styliser :
<img>
, background-image
ou autres méthodes (limité en terme de stylisation),<use>
: approche hybride permettant réutilisation et stylisation.Les SVG inline (insérés directement dans le HTML) sont les plus flexibles en termes de stylisation, car ils font partie intégrante du DOM.
<svg width="100" height="100" viewBox="0 0 100 100">
<circle cx="50" cy="50" r="40" fill="tomato" class="circle" />
</svg>
.circle {
fill: pink; /* Change la couleur de remplissage */
stroke: black; /* Ajoute un contour */
stroke-width: 2px; /* Définit l'épaisseur du contour */
transition: fill 0.3s; /* Ajoute une transition */
&:hover {
fill: hotpink; /* Change la couleur au survol */
}
}
currentColor
fait généralement le jobLa valeur currentColor
fait office de "variable" en CSS puisqu'elle adopte automatiquement la couleur de texte environnante. En clair, elle copie la valeur de color
du parent, même si celle-ci change. Idéalement, elle peut être appliquée aux attributs SVG fill
et stroke
par exemple :
<svg width="100" height="100" viewBox="0 0 100 100">
<circle fill="currentColor" class="circle" />
</svg>
.circle {
color: pink; /* Définit la couleur du cercle */
&:hover {
color: hotpink; /* Change la couleur au survol */
}
}
currentColor
pour que les éléments SVG héritent automatiquement de la couleur du texte parent (utilisez fill="currentColor"
et/ou stroke="currentColor"
pour les icônes qui doivent s'adapter à la couleur du texte),Les fichiers SVG externes (balise <img>
ou background-image
) sont naturellement plus capricieux à styliser du fait de leur principe de compartimentage : rien n'entre ni ne sort d'un SVG, ou presque.
Si vous avez accès au fichier SVG, vous pouvez y incorporer des styles directement via l'élément <style>
, mais vous n'irez pas très loin :
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<style>
.icon-path {
fill: black;
}
</style>
<path class="icon-path" d="…" />
</svg>
Limitations importantes :
currentColor
, ni de var(--ma-couleur)
):hover
fonctionnent uniquement dans certains contextes (SVG dans <object>
ou <embed>
, pas dans <img>
)Cette technique utilise la propriété CSS mask
pour appliquer une couleur à un SVG externe sans devoir le modifier.
<span>
) est utilisé comme conteneur,background-color
) est appliquée à cet élément,mask
,C'est comme si le SVG agissait comme un pochoir : il définit la forme visible, mais la couleur provient de l'élément HTML lui-même. La contrepartie est que la teinte sera forcément monochrome.
<span class="icon icon-star"></span>
<span class="icon icon-cart"></span>
.icon {
/* Dimensions */
display: inline-block;
width: 1rem;
height: 1rem;
/* Couleur de l'icône (modifiable à volonté) */
background-color: currentColor;
/* Application du masque SVG */
mask: var(--svg) no-repeat center;
mask-size: contain;
}
.icon-star {
--svg: url("icons/star.svg");
}
.icon-cart {
--svg: url("icons/cart.svg");
}
/* Exemple d'interaction */
.icon:hover {
background-color: hotpink;
}
/* Exemple pour dark mode */
@media (prefers-color-scheme: dark) {
.icon {
background-color: white;
}
}
Les masques CSS en action :
<use>
pour optimiser vos SVGL'élément <use>
offre un excellent compromis en permettant de regrouper des SVG en "sprites" tout en gardant la possibilité de les styliser individuellement.
<symbol>
(sprite)Chaque élément (ici, chaque icône) est défini dans un <symbol>
avec un ID unique, le tout regroupé dans <svg>
unique. Ces symboles sont ensuite instanciés via <use>
.
<symbol>
est un conteneur qui ne sera pas affiché directement, mais qui peut être utilisé pour créer des instances de ce symbole (des clones) ailleurs dans le document.
<!-- N'importe où dans votre document HTML -->
<svg style="display: none">
<symbol id="icon-cart" viewBox="0 0 24 24">
<path d="…" />
</symbol>
<symbol id="icon-star" viewBox="0 0 24 24">
<path d="…" />
</symbol>
</svg>
<symbol>
avec use
use
permet d'instancier chacun des symboles définis précédemment. Vous pouvez les placer où vous le souhaitez dans la page et les styliser comme n'importe quel autre SVG inline.
<svg class="icon">
<use href="#icon-cart" />
</svg>
<svg class="icon icon-big">
<use href="#icon-star" />
</svg>
.icon {
width: 1rem;
height: 1rem;
fill: currentColor;
&:hover {
fill: hotpink;
}
}
.icon-big {
width: 2rem;
height: 2rem;
}
<use>
Il est également possible de faire référence à un fichier SVG externe contenant plusieurs symboles. Cette fonctionnalité évite de devoir insérer l'ensemble du sprite SVG de manière inline :
<!-- sprite.svg est un fichier externe contenant des symbols -->
<svg class="icon">
<use href="/icons/sprite.svg#icon-cart" />
</svg>
Les sprites CSS en action :
Remarques importantes :
symbol
et use
Diverses applications permettent de faciliter la composition de symboles (sprites) de SVG.
Pour commencer, l'excellente ressource Icônes.js du talentueux Anthony Fu propose une palette de plusieurs milliers d'icônes SVG récupérables dans tous les formats possibles (y compris frameworks) et notamment sous forme de symbol SVG.
L'outil svgsprit.es quant à lui s'applique à générer votre sprite SVG à partir d'un lot de fichiers que vous lui téléversez.
S'adapter au mode d'apparence (clair ou sombre) offre une expérience utilisateur souvent grandement améliorée. SVG est parfaitement malléable sur ce sujet également.
Manipuler le mode de couleurs des SVG inline est relativement simple. Il est possible d'utiliser :
currentColor
pour que la couleur du SVG s'adapte à la couleur du texte parent,light-dark()
pour appliquer des couleurs spécifiques au SVG sans être dépendant de la couleur du parent,data
pour appliquer des styles spécifiques selon le mode de l'utilisateur.<svg class="icon" width="24" height="24" viewBox="0 0 24 24">
<path d="…" fill="…" />
</svg>
.icon {
/* S'adapte automatiquement à la couleur du texte */
fill: currentColor;
/* OU avec la fonction light-dark() */
fill: light-dark(#333333, #ffffff);
/* OU avec media query */
@media (prefers-color-scheme: dark) {
fill: #ffffff;
}
/* OU avec attribut data */
[data-theme="dark"] & {
fill: #ffffff;
}
}
Légèrement plus contraignant, il est possible ajouter un élément <style>
dans le SVG pour appliquer les styles CSS suivants (ici la classe .path
a été ajoutée à l'élément dont la couleur doit s'adapter).
Notez que là aussi, les valeurs doivent être stipulées en dur (pas de currentColor
, ni de var(--ma-couleur)
) :
<svg width="24" height="24" viewBox="0 0 24 24">
<style>
.path {
fill: #333333;
}
/* Adaptations pour dark mode */
@media (prefers-color-scheme: dark) {
.path {
fill: white;
}
}
/* Adaptations via attribut data */
[data-theme="dark"] path {
fill: white;
}
</style>
<path class="path" d="…" />
</svg>
Selon vos contraintes (SVG inline ou externe, modifiables ou non), divers scénarios permettent d'appliquer des styles CSS aux éléments SVG. Dans tous les cas, pensez à respecter quelques bonnes pratiques générales :
<use>
est souvent la solution la plus flexible, mais aucune approche n'est réellement parfaite.<style>
) dans le SVG… quand c'est possible.currentColor
, light-dark()
ou les media queries pour adapter automatiquement vos icônes au thème préféré de l'utilisateur.fill
, stroke
et opacity
peuvent être animées avec des transitions CSS. Attention toutefois aux éventuels problèmes d'accessibilité et de performance.La stylisation des SVG avec CSS offre de nombreuses possibilités créatives, mais nécessite de comprendre les différences entre les méthodes d'intégration. En choisissant l'approche adaptée à vos besoins spécifiques et en suivant les bonnes pratiques, vous pouvez créer des graphiques vectoriels attrayants, accessibles et parfaitement intégrés à votre interface utilisateur.
À retenir :
fill/stroke="currentColor"
adopte la couleur de texte du parent (color
),fill/stroke="var(--ma-couleur, currentColor)"
applique une couleur de variable,fill/stroke="light-dark(couleur1, couleur2)"
applique une couleur en fonction du choix de thème utilisateur,<style></style>
dans le SVG applique des styles CSS (les styles sont compartimentés),fill/stroke="#FF69B4"
), pas de currentColor
, ni de var(--ma-couleur)
,<use>
: Facile à manipuler en CSS, mais nécessite une préparation préalable.
<symbol>
identifié via id
, tous regroupés dans "sprite" <svg>
et clonés via <use>
,Retrouvez l'intégralité de ce tutoriel en ligne sur Alsacreations.com
L'acronyme UTM correspond à "Urchin Tracking Module". Urchin fut une entreprise de d'outils d'analyses de statistiques de visites, fondée en 1995. Elle avait publié un outil du même nom, qui fut racheté en 2005 par Google pour finalement le transformer en Google Analytics ð».
Vous les avez souvent déjà vus lors que vous tentez de partager une adresse à quelqu'un, par exemple truc.html?utm_source=facebook
: les paramètres UTM sont des portions de texte ajoutés à une URL, d'abord utilisés dans Urchin pour suivre l’origine du trafic, puis conservés par Google dans son système d’analyse, mais ils fonctionnent aussi avec tout autre solution compatible, comme Matomo.
Ils permettent d'identifier :
On les ajoute à la fin d'une URL sous la forme clé=valeur
:
Paramètre | Description | Exemple |
---|---|---|
utm_source | La source du trafic | utm_source=facebook |
utm_medium | Le type de canal | utm_medium=social |
utm_campaign | Le nom de la campagne | utm_campaign=kiwiparty2026 |
utm_term | (Optionnel) Mot-clé pour les pubs | utm_term=eplucheur_de_kiwi |
utm_content | (Optionnel) Différencier les variantes | utm_content=banniere_anim |
ð Exemple
https://www.example.org/produit?utm_source=facebook&utm_medium=social&utm_campaign=kiwiparty2026&utm_content=banniere_anim
Il existe un générateur : Campaign URL Builder
Lorsqu'on se connecte au serveur et effectue la requête HTTP, l'outil de statistique (s'il y en a bien un en place) intercepte ces paramètres et les enregistre pour effectuer le suivi des visites.
Par exemple, Matomo récupère ces paramètres et les affiche dans les rapports (Acquisition, Campagnes).
ð¡ Si vous ne voulez pas être pisté, supprimez-les avant de partager ou de consulter les adresses envoyées ;) On retrouve des équivalents du côté d'autres sites comme YouTube/Twitter mais de façon moins "visible" car non préfixés par utm
, avec un simple & s=...
qui permet de savoir qui a partagé le lien initial.
Des extensions existent pour supprimer automatiquement ces paramètres indiscret, ainsi que plein d'autres "connus" que l'on peut trouver sur des sites de vente en ligne : ClearURLs fonctionne sur Firefox.
Vous rêvez d’un site web aussi performant qu’un champion olympique ? ð
Et si vous aviez un coach perso… mais pour votre site ?
Nous avons longtemps travaillé dessus, Alsacréations peut désormais présenter une nouvel outil ð ClipIA ! ð
Propulsé par KIWI JUICE™, ClipIA est l’assistant personnel qui chouchoute votre site web au quotidien.
ðª Son super-pouvoir ? Il s’est entraîné sur le top 3000 du web (oui, rien que ça) pour vous aider à :
Prêt à révolutionner votre site ? Découvrez ClipIA dès maintenant