Modifier SVG couleur de fond lorsque vous être servi en tant que Background-Image
De placer la sortie SVG directement en ligne avec le code de la page que je suis en mesure de simplement modifier les couleurs de remplissage avec du CSS comme ceci:
polygon.mystar {
fill: blue;
}
circle.mycircle {
fill: green;
}
Cela fonctionne très bien, cependant je suis à la recherche d'un moyen de modifier le "remplir" attribut d'un SVG lorsqu'il est servi en tant que BACKGROUND-IMAGE.
html {
background-image: url(../img/bg.svg);
}
Comment puis-je changer les couleurs maintenant? Est-il même possible?
Pour référence, voici le contenu de mon externes SVG fichier:
<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>
- Je me fais frapper jusqu'souvent avec des accessoires pour ma réponse. Vous devriez envisager de changer pour la accepté de répondre il n'est donc pas manqué.
Vous devez vous connecter pour publier un commentaire.
Une façon de le faire est au service de vos svg à partir de quelque côté serveur mécanisme.
Il suffit de créer un serveur de ressources secondaires que les sorties de votre svg selon les paramètres GET, et vous le servir sur une url spécifique.
Alors vous utilisez cette url dans votre css.
Parce que, comme un arrière-plan img, il ne fait pas partie du DOM et vous ne pouvez pas le manipuler.
Une autre possibilité serait de l'utiliser régulièrement, l'incorporer dans une page d'une manière normale, mais la position absolument, faire toute la largeur, & hauteur de la page, et ensuite utiliser z-index propriété css pour le mettre derrière tous les autres éléments du DOM sur une page.
<?php header('Content-type: image/svg+xml'); ?>
J'ai besoin de quelque chose de similaire et je voulais rester avec les CSS. Ici sont MOINS et SCSS mixin ainsi que simple CSS qui peut vous aider avec ceci. Malheureusement, c'est de 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:
SCSS mixin:
SCSS utilisation:
CSS:
Voici plus d'infos sur l'incorporation de la totalité SVG code dans votre fichier CSS. Il a également mentionné la compatibilité du navigateur, qui est un peu trop petite pour que ce soit une option viable.
#
caractère de votre hex couleurs pour faire ce travail dans Firefox. Donc, quelque chose comme<svg fill="#ffffff" ...></svg>
devient<svg fill="%23ffffff" ...></svg>
.Encore une autre approche consiste à utiliser un masque. Ensuite, vous modifiez la couleur d'arrière-plan de l'élément masqué. Cela a le même effet que la modification de l'attribut de suffisance 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 vous propose une variété d'approches (non limitée à un masque).
mask
est pas pris en charge par IE ni Edge: caniuse.com/#search=maskVous pouvez utiliser les CSS des masques, Avec le 'masque' de la propriété, vous créez un masque est appliqué à un élément.
Pour plus d'informations, voir cet excellent article: https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images
C'est possible avec Sass!
La seule chose que vous avez à faire est d'encoder votre code svg. Et cela est possible avec une fonction d'assistance dans le Sass. J'ai fait un codepen pour cela. Regardez ceci:
http://codepen.io/philippkuehn/pen/zGEjxB
Télécharger votre svg en tant que texte.
Modifier votre svg texte à l'aide de javascript pour changer la peinture/avc/remplir de la couleur[s].
Puis incorporer la modification de la chaîne svg inline dans votre css comme décrit ici.
Maintenant vous pouvez l'obtenir sur le côté client comme ceci:
Violon ici!
Vous pouvez stocker le SVG dans une variable. Ensuite manipuler la chaîne SVG en fonction de vos besoins (c'est à dire, définissez la largeur, la hauteur, la couleur, etc). Puis utiliser le résultat pour définir l'arrière-plan, par exemple
J'ai fait une démo aussi, 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 et que ni la largeur ou la hauteur propriétés sont définies. Depuis l'entrée est codé en dur dans le SCSS document, il est assez facile à faire respecter ces contraintes.Ne vous inquiétez pas au sujet de la duplication de code. gzip la compression qui fait la différence négligeable.
codeben article et de démonstration
Vous pouvez créer votre propre SCSS de la fonction pour cela. En ajoutant les lignes suivantes à votre fichier de configuration.rb fichier.
Alors vous pouvez l'utiliser dans votre CSS:
Vous devrez modifier vos fichiers SVG et remplacez tous les attributs de remplissage dans le balisage avec fill="{couleur}"
Le chemin d'icône est toujours par rapport à votre images_dir paramètre dans la même config.rb fichier.
À l'instar de certaines autres solutions, mais c'est assez propre et conserve vos fichiers SCSS bien rangé!
Tard pour le montrer ici, MAIS, j'ai pu ajouter une couleur de remplissage à l'SVG polygone, si vous êtes en mesure de modifier directement le code SVG, donc les suivantes, par exemple svg rend rouge au lieu de noir par défaut. Je n'ai pas testé en dehors de Chrome si:
Dans certains (très spécifique) des situations, cela peut être réalisé en utilisant un filtre. Par exemple, vous pouvez modifier un bleu SVG image de violet par la rotation de la teinte de 45 degrés à l'aide de
filter: hue-rotate(45deg);
. Prise en charge du navigateur est minime, mais c'est encore une technique intéressante.Démo
C'est ma méthode préférée, mais votre navigateur doit être très progressive. Avec le masque de la propriété vous créez un masque est appliqué à un élément. Partout où le masque est opaque, ou solide, l'image sous-jacente montre à travers. Lorsqu'il est transparent, l'image sous-jacente est masquée, ou cachés. La syntaxe du CSS masque d'image est similaire à l'image de fond d'écran.regardez les codepen
mask
Beaucoup de si, mais si votre pré codées en base64 SVG commence:
Puis le base64 chaîne va commencer:
si la pré-codées chaîne commence:
ensuite ce code la:
Les deux chaînes codées commencer le même:
Le caprice de l'encodage base64 est tous les 3 entrée personnages deviennent les 4 caractères de sortie. Avec le SVG de départ comme celui-ci de 6 caractères hexadécimal de la couleur de remplissage commence exactement sur un codage de bloc 'limite'.
Donc, vous pouvez facilement faire un cross-browser JS remplacer:
Mais tnt-rox réponse ci-dessus est le chemin à parcourir aller de l'avant.