Exemple 2 : Responsive SVG by Mike
Ce pen n'est peut-être pas très impressionnant de prime abord, mais il a radicalement changé ma façon de voir le SVG, et je pense qu'il en sera de même pour vous.
Comme vous pouvez le voir, nous sommes sur quelque chose en apparence très simples, un petit bout de code très ingénieux pour pouvoir tester du responsif dans un pen et une image chargeant un fichier SVG. Fichier qui, comme vous pouvez le voir, adapte son design à sa taille ! Je ne m'étendrai pas plus sur la partie CSS/HTML, passons tout de suite au fichier SVG, que vous pourrez retrouver à cette adresse ou dans le pen suivant.
Passons rapidement sur le haut du fichier, nous y reviendrons plus tard, et attaquons-nous à la ligne 20 : <symbol id="corner" viewBox="0 0 50 50">
Les balises symboles permettent de créer des éléments réutilisables dans la suite de notre code SVG, un peu comme des fonctions, ou des mixins Sass. Vous pouvez voir au passage qu'elle possède son propre viewbox indépendant. Pour une documentation complète, je vous propose cette page du MDN.
Note : vous ne voyez pas de bleu, vert et rouge en meme temps sur l'image ? C'est tout à fait normal. Essayez de jouer sur la taille de votre fenêtre pour repérer ces éléments !
Un autre élément intéressant est à retrouver ligne 46 : mask.
Mask est un élément qui, comme son nom l'indique, sert à créer des masques permettant de choisir des portions d'un autre élément à afficher ou masquer, les parties blanches signifiant qu'il faut afficher, et les parties noires masquer. Notez qu'il est possible d'utiliser des nuances de gris pour ajouter plus ou moins d'alpha.
Astuce : comme vous pouvez le voir, l'élément Mask n'a pas de viewBox. À la place, il utilise les dimensions de l'élément sur lequel il est applique.
Maintenant que l'auteur a déclaré tous les éléments de son SVG, il ne lui reste plus qu'a les assembler, et c'est ce que vous pouvez voir à partir de la ligne 62. L'élément rect est le trait, auquel est applique notre #mask. Les autres éléments sont nos deux coins et notre diamant au milieu de la ligne. Notez la transformation scale négative appliquée au deuxième corner pour le retourner !
Astuce : il est possible d'utiliser scale couplée à une valeur négative pour "retourner" un élément. Sachez que la propriété css transform: scale() fonctionne exactement de la même manière !