Changer la couleur svg

Je veux utiliser cette technique http://css-tricks.com/svg-fallbacks/{[4] } et changer la couleur svg mais jusqu'à présent, je n'ai pas été en mesure de le faire. Je mets cela dans le css mais mon image est toujours noire, quoi qu'il arrive. Mon code:

<svg>
<image class="change-my-color" xlink:href="https://dl.dropboxusercontent.com/u/13823768/tumblr/iconmonstr-time-3-icon.svg" width="96" height="96" src="ppngfallback.png" />
</svg>

Et le css

.change-my-color {
    fill: green;
}

Sur jsfiddle: http://jsfiddle.net/Kk93M/

72
demandé sur Barbara 2014-03-07 18:15:03

8 réponses

, Vous ne pouvez pas changer la couleur d'une image de cette façon. Si vous chargez SVG comme une image, vous ne pouvez pas changer la façon dont il est affiché en utilisant CSS ou Javascript dans le navigateur.

Si vous voulez changer votre image SVG, vous devez la charger en utilisant <object>, <iframe> ou en utilisant <svg> inline.

Si vous souhaitez utiliser les techniques de la page, vous avez besoin de la bibliothèque Modernizr, où vous pouvez vérifier le support SVG et afficher conditionnellement ou non une image de secours. Vous pouvez ensuite inline votre SVG et appliquer le styles dont vous avez besoin.

Voir http://jsfiddle.net/helderdarocha/6uRgS/

Vous pouvez intégrer votre SVG, marquer votre image de secours avec un nom de classe(my-svg-alternate):

<svg width="96px" height="96px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
<path id="time-3-icon" .../>
</svg>

<image class="my-svg-alternate" width="96" height="96" src="ppngfallback.png" />

Et en CSS, utilisez la classe no-svg de Modernizr (CDN: http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.7.2.js ) pour vérifier le support SVG. S'il N'y a pas de support SVG, le bloc SVG sera ignoré et l'image sera affichée, sinon l'image sera supprimée de L'arborescence DOM (display: none):

.my-svg-alternate {
  display: none;
}
.no-svg .my-svg-alternate {
  display: block;
  width: 100px;
  height: 100px;
  background-image: url(image.png);
}

Ensuite, vous pouvez changer la couleur de votre élément inlined:

#time-3-icon {
   fill: green;
}
53
répondu helderdarocha 2014-03-07 14:57:01

Pour changer la couleur D'un fichier SVG, vous pouvez modifier directement le code svg en ouvrant le fichier svg dans n'importe quel éditeur de texte. Le code peut ressembler au code ci-dessous

<?xml version="1.0" encoding="utf-8"?>
    <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
    <g>
        <path d="M114.26,436.584L99.023,483h301.953l-15.237-46.416H114.26z M161.629,474.404h-49.592l9.594-29.225h69.223
            C181.113,454.921,171.371,464.663,161.629,474.404z"/>
    /*Some more code goes on*/
    </g>
    </svg>

Vous pouvez observer qu'il y a de certaines balises XML comme le chemin, cercle, polygone, etc. Là, vous pouvez ajouter votre propre couleur à l'aide de attribut de style. Regardez l'exemple ci-dessous

<path style="fill:#AB7C94;" d="M114.26,436.584L99.023,483h301.953l-15.237-46.416H114.26z M161.629,474.404h-49.592l9.594-29.225h69.223
                C181.113,454.921,171.371,464.663,161.629,474.404z"/>

Ajoutez l'attribut style à toutes les balises afin que vous puissiez obtenir votre SVG de votre couleur requise

92
répondu sushant047 2014-12-04 06:10:11

Ajout d'une page de test-à la couleur SVG via les paramètres de filtre:

Par Exemple filter: invert(0.5) sepia(1) saturate(5) hue-rotate(175deg)

Téléchargez et colorez votre SVG-jsfiddle

A pris l'idée de: https://blog.union.io/code/2017/08/10/img-svg-fill/

14
répondu Yonatan Ayalon 2018-03-01 12:54:57

Le moyen le plus simple serait de créer une police à partir du SVG en utilisant un service comme https://icomoon.io/app/#/select {[2] } ou tel. téléchargez votre SVG, cliquez sur "Générer la police", inclure les fichiers de police et css dans votre côté et il suffit d'utiliser et de style comme tout autre texte. Je l'utilise toujours comme ça parce que cela rend le style beaucoup plus facile.

EDIT: {[6] } comme mentionné dans l'article commenté par les polices d'icônes @ CodeMouse92 gâchent les lecteurs d'écran (et sont peut-être mauvais pour le référencement). Donc, plutôt bâton à la SVGs.

6
répondu Felix Hagspiel 2017-06-08 09:50:53

Vous pouvez changer la coloration SVG avec css si vous utilisez quelques astuces. J'ai écrit un petit script pour ça.

  • passer par une liste d'éléments, qui ont une image svg
  • charge le fichier svg au format xml
  • récupère uniquement la partie svg
  • changer la couleur du chemin
  • remplacez src par le svg modifié comme image en ligne
$('img.svg-changeable').each(function () {
  var $e = $(this);
  var imgURL = $e.prop('src');

  $.get(imgURL, function (data) {
    // Get the SVG tag, ignore the rest
    var $svg = $(data).find('svg');

    // change the color
    $svg.find('path').attr('fill', '#000');

    $e.prop('src', "data:image/svg+xml;base64," + window.btoa($svg.prop('outerHTML')));
  });

});

Le code ci-dessus peut ne pas fonctionner correctement, j'ai implémenté ceci pour les éléments avec une image d'arrière-plan svg qui fonctionne presque similaire à ce. Mais de toute façon, vous devez modifier ce script pour s'adapter à votre cas. espérons qu'il a aidé.

3
répondu cydoc 2015-04-29 07:00:37

Seulement SVG avec des informations de chemin . vous ne pouvez pas faire ça à l'image.. comme le chemin, vous pouvez changer strock et de remplir les informations et vous avez terminé. comme Illustrator

Donc: via CSS, vous pouvez remplacer chemin fill valeur

path { fill: orange; }

Mais si vous voulez un moyen plus flexible que vous voulez le changer avec un texte lorsque vous avez un effet de survol en cours.. utiliser

path { fill: currentcolor; }

body {
  background: #ddd;
  text-align: center;
  padding-top: 2em;
}

.parent {
  width: 320px;
  height: 50px;
  display: block;
  transition: all 0.3s;
  cursor: pointer;
  padding: 12px;
  box-sizing: border-box;
}

/***  desired colors for children  ***/
.parent{
  color: #000;
  background: #def;
}
.parent:hover{
  color: #fff;
  background: #85c1fc;
}

.parent span{
  font-size: 18px;
  margin-right: 8px;
  font-weight: bold;
  font-family: 'Helvetica';
  line-height: 26px;
  vertical-align: top;
}
.parent svg{
  max-height: 26px;
  width: auto;
  display: inline;
}

/****  magic trick  *****/
.parent svg path{
  fill: currentcolor;
}
<div class='parent'>
  <span>TEXT WITH SVG</span>
  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" viewBox="0 0 32 32">
<path d="M30.148 5.588c-2.934-3.42-7.288-5.588-12.148-5.588-8.837 0-16 7.163-16 16s7.163 16 16 16c4.86 0 9.213-2.167 12.148-5.588l-10.148-10.412 10.148-10.412zM22 3.769c1.232 0 2.231 0.999 2.231 2.231s-0.999 2.231-2.231 2.231-2.231-0.999-2.231-2.231c0-1.232 0.999-2.231 2.231-2.231z"></path>
</svg>
</div>
2
répondu Biskrem Muhammad 2018-04-03 10:05:13

Pour simplement changer la couleur du svg:

Allez dans le fichier svg et sous styles, mentionnez la couleur dans le remplissage.

<style>.cls-1{fill:#FFFFFF;}</style>
0
répondu Sethu Sathyan 2018-04-30 10:42:30

Si vous voulez faire cela à un svg en ligne qui est, par exemple, une image d'arrière-plan dans votre css:

background: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(31,159,215,1)' viewBox='...'/%3E%3C/svg%3E");

Bien sûr, remplacer le ... avec votre code d'image en ligne

-1
répondu Vision Hive 2018-06-07 20:24:46