Tout d'abord, utilisez une balise IMG dans votre HTML pour intégrer un graphique SVG. J'ai utilisé Adobe Illustrator pour réaliser le graphique.
<img id="facebook-logo" class="svg social-link" src="/images/logo-facebook.svg"/>
C'est exactement comme pour l'intégration d'une image normale. Notez que vous devez définir l'IMG pour avoir une classe de svg. La classe "social-link" n'est utilisée qu'à titre d'exemple. L'ID n'est pas obligatoire, mais il est utile.
Utilisez ensuite ce code jQuery (dans un fichier séparé ou en ligne dans le HEAD).
/**
* Replace all SVG images with inline SVG
*/
jQuery('img.svg').each(function(){
var $img = jQuery(this);
var imgID = $img.attr('id');
var imgClass = $img.attr('class');
var imgURL = $img.attr('src');
jQuery.get(imgURL, function(data) {
// Get the SVG tag, ignore the rest
var $svg = jQuery(data).find('svg');
// Add replaced image's ID to the new SVG
if(typeof imgID !== 'undefined') {
$svg = $svg.attr('id', imgID);
}
// Add replaced image's classes to the new SVG
if(typeof imgClass !== 'undefined') {
$svg = $svg.attr('class', imgClass+' replaced-svg');
}
// Remove any invalid XML tags as per http://validator.w3.org
$svg = $svg.removeAttr('xmlns:a');
// Replace image with new SVG
$img.replaceWith($svg);
}, 'xml');
});
Le code ci-dessus recherche tous les IMG avec la classe 'svg' et les remplace par le SVG en ligne du fichier lié. L'avantage majeur est qu'il vous permet d'utiliser le CSS pour changer la couleur du SVG, comme suit :
svg:hover path {
fill: red;
}
Le code jQuery que j'ai écrit porte également sur l'ID et les classes des images originales. Donc ce CSS fonctionne aussi :
#facebook-logo:hover path {
fill: red;
}
Ou :
.social-link:hover path {
fill: red;
}
Vous pouvez voir un exemple de son fonctionnement ici : http://labs.funkhausdesign.com/examples/img-svg/img-to-svg.html
Nous avons une version plus compliquée qui inclut la mise en cache ici : https://github.com/funkhaus/style-guide/blob/master/template/js/site.js#L32-L90
2 votes
Malheureusement, la balise img ne fonctionne pas avec les fichiers svg dans IE, il faut donc en tenir compte. IE reconnaît les balises embed. Quoi qu'il en soit, bon travail !
3 votes
Pour les svg, vous devez utiliser la propriété css "fill". Pour les images, il est approprié d'utiliser "filter". En fait, "Filter" fonctionne pour les deux, mais il est inutile de faire tout ce travail pour un graphique vectoriel.