Optimisation et factorisation de sprite SVG
Nous connaissons les « sprites » SVG classiques, avec l'utilisation de use.
Cette méthode implique souvent de charger le code du SVG et des symbol au coeur même de
la page HTML.
L'inconvénient de cette pratique (même si elle a des avantages…) est que ce fichier est présent dans
toutes les pages du site, le plus souvent. En cas de mise à jour du sprite, il faut
invalider le cache côté serveur (ou du CDN)
et côté client.
Un autre petit souci est qu'il faut faire appel à un polyfill pour certains navigateurs et que cet
usage devient compliqué lorsque l'on souhaite utiliser ce même fichier en propriété background-image dans
un fichier CSS.
Imaginons les icones suivantes :
Pour construire le SVG nécessaire, nous allons découper les icones et factoriser les éléments
communs.
Nous avons donc besoin d'une bassine (4 fois) ,
d'une croix (2 fois)
,
d'une température de 30 °C (3 fois)
,
d'un point (3 fois)
,
d'un cercle (3 fois)
,
d'un carré (3 fois)
,
et enfin d'un trait (3 fois)
.
Maintenant, nous allons assembler tout ce petit monde pour construire nos icones, avec pour effet de n'avoir
qu'un seul symbol à mettre à jour en cas de modification graphique.
Commençons à construire notre SVG.
Maintenant, nous mettons notre belle bassine dans son symbol avec un identifiant.
A noter le fait de ne pas mettre de viewBox sur le symbol, partant du principe que
toutes nos icones sortiront en 32x32 (nous le verrons à l'étape suivante).
Normalement, nous devrions nous arrêter là. Mais comme nous voulons utiliser ce SVG en ressource
externe ET via des background-image, nous allons compléter notre fichier avec des
balises view qui seront appelées via leur identifiant, suivies de balises
use pointant sur les symboles à l'intérieur du même fichier.
Plus clairement, ça donne ceci :
Le fichier complet avec quelques options supplémentaires (CSS, script) est accessible ici : sample_xlinks.svg
Il permet de générer 43 icones à partir de 19 balises symbol.
Taille des données transférées ~5.7 ko (gzip), mise
en cache côté client, centralisation des assets, maintenance facilitée, etc….
Kortic implémente bien entendu ce type de SVG :
- toutes les icones du site
- les drapeaux mondiaux visibles également sur cette page
Mise en oeuvre
Pour l'exemple, nous affichons l'icone de séchage prohibé en machine dans les consignes d'entretien de linge.
Note : l'utilisation de ce type de sprites SVG permet de s'affranchir de la gestion des positionnements en background-image CSS.
affichera
affichera avec la CSS ad hoc
ci-dessous.
Et gâteau sous la cerise : compatible IE9 et
plus récents.
Aller… y'a plus qu'à !!
Si besoin ou remarque(s), ça se passe ici : contact