Le SVG comme fichier externe
Le tag img est associé au format matriciel, mais on peut le lier à un fichier SVG.
<img src="monimage.svg" class="imsvg">
La taille du SVG est importante : définie dans la document d’origine, elle s’applique à l’affichage, comme la taille en pixel d’un document matriciel. On peut évidemment influer sur cette taille via les CSS.
.imsvg {
width:400px;
}
Le SVG écrit dans la page HTML
Le SVG est un format écrit en XML. Cette particularité, et le caractère open source de son code, le rendent compatible avec le HTML. Les navigateurs offrent donc la possibilité de placer un SVG directement dans le code html.
Voici une image réalisée avec un logiciel standard de création en vectoriel.
Remarquez que le fichier a été recadré pour être à la taille du dessin, ce qui est nécessaire contrairement à des imports dans un fichier comme indesign, qui recadre lors de l’import.
Le code de cette image est celui-ci :
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="219px" height="126px" viewBox="0 0 219 126" xml:space="preserve">
<path fill="#FFFFFF" stroke="#000000" stroke-width="10" stroke-linejoin="round" stroke-miterlimit="10" d="M209.634,61.486
C194.906,30.912,155.109,9,108.317,9C61.525,9,21.729,30.912,7,61.486c14.728,30.574,54.525,52.486,101.317,52.486
C155.108,113.973,194.906,92.061,209.634,61.486L209.634,61.486z"/>
<circle cx="108.317" cy="61.486" r="43.837"/>
</svg>
Pour placer cette image directement dans une page html, nous allons récupérer le code du tag SVG et le placer dans la page, sans son entête xml
et son doctype.
Le résultat est une image qui comporte les avantages du vectoriel : nette à toute les taille, légère, modifiable de plus grâce aux css, ou directement dans le code.
Une version directement modifiée dans le code, par exemple :
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="219px" height="126px" viewBox="0 0 219 126" xml:space="preserve">
<path fill="#FFFFFF" stroke="blue" stroke-width="10" stroke-linejoin="round" stroke-miterlimit="10" d="M209.634,61.486 C194.906,30.912,155.109,9,108.317, 9C61.525,9, 21.729,30.912,7,61.486c14.728,30.574,54.525,52.486,101.317,52.486 C155.108,113.973,194.906,92.061,209.634,61.486L209.634,61.486z"/>
<circle fill="red" cx="108.317" cy="61.486" r="43.837"/>
</svg>
Modifier un svg avec CSS
Il est possible d’accéder aux éléments d’une image SVG à travers CSS. L’usage d’id et de classes est tout à fait possible.
Voici un code produisant une animation.
<style>
.cercle {
fill:red;
}
.contour {
animation: col 10s linear infinite;
}
@keyframes col {
0%{stroke-width:1;
stroke:red;}
25%{stroke-width:10}
50% {stroke-width:1}
75%{stroke-width:10; stroke:blue;}
100% {stroke-width:1}
}
</style>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="219px" height="126px" viewBox="0 0 219 126" xml:space="preserve"><path class="contour" fill="#FFFFFF" stroke="#000000" stroke-width="10" stroke-linejoin="round" stroke-miterlimit="10" d="M209.634,61.486 C194.906,30.912,155.109,9,108.317, 9C61.525,9,21.729,30.912,7, 61.486c14.728,30.574,54.525,52.486,101.317,52.486 C155.108, 113.973,194.906,92.061,209.634,61.486L209.634,61.486z"/><circle class="cercle" cx="108.317" cy="61.486" r="43.837"/> </svg>