En plaçant la sortie SVG directement en ligne avec le code de la page, je peux simplement modifier les couleurs de remplissage avec CSS comme ceci:
polygon.mystar {
fill: blue;
}
circle.mycircle {
fill: green;
}
Cela fonctionne très bien, mais je cherche un moyen de modifier l'attribut "fill" d'un SVG lorsqu'il est servi en tant qu'IMAGE DE FOND.
html {
background-image: url(../img/bg.svg);
}
Comment puis-je changer les couleurs maintenant? Est-ce même possible?
Pour référence, voici le contenu de mon fichier SVG externe:
<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="320px" height="100px" viewBox="0 0 320 100" enable-background="new 0 0 320 100" xml:space="preserve">
<polygon class="mystar" fill="#3CB54A" points="134.973,14.204 143.295,31.066 161.903,33.77 148.438,46.896 151.617,65.43 134.973,56.679
118.329,65.43 121.507,46.896 108.042,33.77 126.65,31.066 "/>
<circle class="mycircle" fill="#ED1F24" cx="202.028" cy="58.342" r="12.26"/>
</svg>
Réponses:
Une façon de le faire est de servir votre svg à partir d'un mécanisme côté serveur. Créez simplement un côté serveur de ressources qui génère votre svg en fonction des paramètres GET, et vous le servez sur une certaine URL.
Ensuite, vous utilisez simplement cette URL dans votre CSS.
Parce qu'en tant qu'image de fond, il ne fait pas partie du DOM et vous ne pouvez pas le manipuler. Une autre possibilité serait de l'utiliser régulièrement, de l'intégrer dans une page d'une manière normale, mais de la positionner absolument, de la rendre pleine largeur et hauteur d'une page, puis d'utiliser la propriété z-index css pour la mettre derrière tous les autres éléments DOM sur une page.
la source
<?php header('Content-type: image/svg+xml'); ?>
J'avais besoin de quelque chose de similaire et je voulais rester avec CSS. Voici les mixins LESS et SCSS ainsi que les CSS simples qui peuvent vous aider. Malheureusement, la prise en charge du navigateur est un peu laxiste. Voir ci-dessous pour plus de détails sur la prise en charge du navigateur.
MOINS mixin:
MOINS d'utilisation:
Mélange SCSS:
Utilisation de SCSS:
CSS:
Voici plus d'informations sur l'intégration du code SVG complet dans votre fichier CSS. Il a également mentionné la compatibilité du navigateur qui est un peu trop petite pour que cela soit une option viable.
la source
#
caractère de vos couleurs hexadécimales pour que cela fonctionne dans Firefox. Donc, quelque chose comme<svg fill="#ffffff" ...></svg>
devient<svg fill="%23ffffff" ...></svg>
.Vous pouvez utiliser des masques CSS. Avec la propriété 'mask', vous créez un masque qui est appliqué à un élément.
Pour plus d'informations, voir cet excellent article: https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images
la source
Une autre approche consiste à utiliser un masque. Vous modifiez ensuite la couleur d'arrière-plan de l'élément masqué. Cela a le même effet que de changer l'attribut fill du svg.
HTML:
CSS:
Vous trouverez un tutoriel complet ici: http://codepen.io/noahblon/blog/coloring-svgs-in-css-background-images (pas le mien). Il propose une variété d'approches (non limitées au masque).
la source
mask
ni pris en charge par IE ni Edge: caniuse.com/#search=maskC'est possible avec Sass! La seule chose que vous avez à faire est de coder en url votre code svg. Et cela est possible avec une fonction d'assistance dans Sass. J'ai fait un codepen pour cela. Regarde ça:
http://codepen.io/philippkuehn/pen/zGEjxB
la source
article et démo de codeben
la source
Téléchargez votre svg sous forme de texte.
Modifiez votre texte svg en utilisant javascript pour changer la couleur de peinture / trait / remplissage [s].
Ensuite, incorporez la chaîne svg modifiée en ligne dans votre CSS comme décrit ici .
la source
Vous pouvez maintenant y parvenir du côté client comme ceci:
Jouez ici!
la source
Vous pouvez stocker le SVG dans une variable. Ensuite, manipulez la chaîne SVG en fonction de vos besoins (c'est-à-dire, définissez la largeur, la hauteur, la couleur, etc.). Utilisez ensuite le résultat pour définir l'arrière-plan, par exemple
J'ai aussi fait une démo, http://sassmeister.com/gist/4cf0265c5d0143a9e734 .
Ce code fait quelques hypothèses sur le SVG, par exemple que
<svg />
élément n'a pas de couleur de remplissage existante et qu'aucune propriété de largeur ou de hauteur n'est définie. Étant donné que l'entrée est codée en dur dans le document SCSS, il est assez facile d'appliquer ces contraintes.Ne vous inquiétez pas de la duplication de code. gzip la compression rend la différence négligeable.
la source
Pour cela, vous pouvez créer votre propre fonction SCSS. Ajout de ce qui suit à votre fichier config.rb.
Ensuite, vous pouvez l'utiliser dans votre CSS:
Vous devrez modifier vos fichiers SVG et remplacer tous les attributs de remplissage du balisage par fill = "{color}"
Le chemin de l'icône est toujours relatif à votre paramètre images_dir dans le même fichier config.rb.
Semblable à certaines des autres solutions, mais c'est assez propre et garde vos fichiers SCSS bien rangés!
la source
Dans certaines situations (très spécifiques), cela peut être réalisé en utilisant un filtre . Par exemple, vous pouvez changer une image SVG bleue en violet en faisant pivoter la teinte de 45 degrés à l'aide de
filter: hue-rotate(45deg);
. Le support du navigateur est minime mais c'est toujours une technique intéressante.Démo
la source
pour l'arrière-plan monochrome, vous pouvez utiliser un svg avec un masque, où la couleur d'arrière-plan doit être affichée
et que d'utiliser ce css
la source
Utilisez le filtre sépia avec la rotation de la teinte, la luminosité et la saturation pour créer la couleur que nous voulons.
https://css-tricks.com/solved-with-css-colorizing-svg-backgrounds/
la source
Tard dans le spectacle ici, MAIS, j'ai pu ajouter une couleur de remplissage au polygone SVG, si vous êtes en mesure de modifier directement le code SVG, donc par exemple le svg suivant s'affiche en rouge, au lieu du noir par défaut. Je n'ai cependant pas testé en dehors de Chrome:
la source
C'est ma méthode préférée, mais la prise en charge de votre navigateur doit être très progressive. Avec la propriété mask, vous créez un masque qui est appliqué à un élément. Partout où le masque est opaque ou solide, l'image sous-jacente apparaît à travers. Lorsqu'elle est transparente, l'image sous-jacente est masquée ou masquée. La syntaxe d'une image de masque CSS est similaire à l'image d'arrière-plan. regardez le codepen
mask
la source
Beaucoup de FI, mais si votre SVG encodé pré base64 démarre:
Ensuite, la chaîne encodée en base64 démarre:
si la chaîne pré-encodée démarre:
alors cela code pour:
Les deux chaînes codées commencent de la même manière:
La particularité de l'encodage base64 est que tous les 3 caractères d'entrée deviennent 4 caractères de sortie. Avec le SVG commençant comme ceci, la couleur de remplissage hexadécimale à 6 caractères commence exactement sur une «frontière» de bloc de codage. Par conséquent, vous pouvez facilement remplacer JS entre plusieurs navigateurs:
Mais la réponse tnt-rox ci-dessus est la voie à suivre.
la source