html
<img src="logo.svg" alt="Logo" class="logo-img">
css
.logo-img path {
fill: #000;
}
Le svg ci-dessus se charge et est natif, fill: #fff
mais lorsque j'utilise ce qui précède css
pour essayer de le changer en noir, il ne change pas, c'est ma première fois à jouer avec SVG et je ne sais pas pourquoi cela ne fonctionne pas.
Réponses:
Si votre objectif est simplement de changer la couleur du logo et que vous n'avez pas nécessairement besoin d'utiliser CSS, n'utilisez pas javascript ou jquery comme cela a été suggéré par certaines réponses précédentes.
Pour répondre précisément à la question d'origine, il suffit:
Ouvrez votre
logo.svg
dans un éditeur de texte.le chercher
fill: #fff
et le remplacer parfill: #000
Par exemple, votre
logo.svg
pourrait ressembler à ceci lorsqu'il est ouvert dans un éditeur de texte:... changez simplement le remplissage et enregistrez.
la source
path
ou auxcircle
éléments comme<path fill="#777777" d="m129.774,74.409c-5.523,...
.fill="currentColor"
puis utiliser l'color
élément sur l'élément parent css-tricks.com/cascading-svg-fill-colorVous pouvez définir votre SVG comme masque. De cette façon, définir une couleur d'arrière-plan agirait comme votre couleur de remplissage.
HTML
CSS
JSFiddle: https://jsfiddle.net/KuhlTime/2j8exgcb/
MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/mask
Veuillez vérifier si votre navigateur prend en charge cette fonctionnalité: https://caniuse.com/#search=mask
la source
mask
c'est uninvalid property value
. je teste cela en chrome.Essayez du CSS pur:
plus d'informations dans cet article https://blog.union.io/code/2017/08/10/img-svg-fill/
la source
2018: Si vous voulez une couleur dynamique, ne voulez pas utiliser le javascript et ne voulez pas un SVG en ligne, utilisez une variable CSS. Fonctionne dans Chrome, Firefox et Safari. modifier: et Edge
Dans votre SVG, remplacez toutes les instances de
style="fill: #000"
parstyle="fill: var(--color_fill)"
.la source
"This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped"
xlink:href
soit déconseillé en faveur dehref
. Cela peut donc toujours fonctionner.Vous devrez d'abord injecter le SVG dans le DOM HTML.
Il existe une bibliothèque open source appelée SVGInject qui le fait pour vous. Il utilise l'
onload
attribut pour déclencher l'injection.Voici un exemple minimal utilisant SVGInject:
Une fois l'image chargée
onload="SVGInject(this)
, l'<img>
élément déclenchera l'injection et l' élément sera remplacé par le contenu du fichier SVG fourni dans l'src
attribut.Il résout plusieurs problèmes avec l'injection SVG:
Les SVG peuvent être masqués jusqu'à la fin de l'injection. Ceci est important si un style est déjà appliqué pendant le temps de chargement, ce qui provoquerait sinon un bref "flash de contenu sans style".
Les
<img>
éléments s'injectent automatiquement. Si vous ajoutez des SVG dynamiquement, vous n'avez pas à vous soucier d'appeler à nouveau la fonction d'injection.Une chaîne aléatoire est ajoutée à chaque ID dans le SVG pour éviter d'avoir le même ID plusieurs fois dans le document si un SVG est injecté plusieurs fois.
SVGInject est Javascript simple et fonctionne avec tous les navigateurs qui prennent en charge SVG.
Avertissement: je suis le co-auteur de SVGInject
la source
La réponse de @Praveen est solide.
Je ne pouvais pas le faire répondre dans mon travail, j'ai donc fait une fonction de survol jquery pour cela.
CSS
JS / JQuery
la source
Pourquoi ne pas créer une police Web avec votre image ou vos images SVG, importer la police Web dans le CSS et ensuite simplement changer la couleur du glyphe en utilisant l'attribut de couleur CSS? Pas de javascript nécessaire
la source
Cette réponse est basée sur la réponse https://stackoverflow.com/a/24933495/3890888 mais avec une version JavaScript simple du script utilisé.
Vous devez faire du SVG un SVG en ligne . Vous pouvez utiliser ce script, en ajoutant une classe
svg
à l'image:Et puis, maintenant si vous le faites:
Ou peut-être:
JSFiddle: http://jsfiddle.net/erxu0dzz/1/
la source
parser.parseFromString(text, "image/svg+xml");
fetch
ce qui a été ajouté à Safari dans 10.1 ( developer.mozilla.org/en-US/docs/Web/API/Fetch_API ). La version jQuery ci-dessus fonctionne.Utilisez des filtres pour vous transformer en n'importe quelle couleur.
J'ai récemment trouvé cette solution et j'espère que quelqu'un pourra l'utiliser. Étant donné que la solution utilise des filtres, elle peut être utilisée avec tout type d'image. Pas seulement svg.
Si vous avez une image monochrome dont vous voulez juste changer la couleur, vous pouvez le faire à l'aide de certains filtres. Cela fonctionne bien sûr sur les images multicolores, mais vous ne pouvez pas cibler une couleur spécifique. Seule l'image entière.
Les filtres provenaient du script proposé dans Comment transformer le noir en n'importe quelle couleur en utilisant uniquement des filtres CSS Si vous voulez changer le blanc en n'importe quelle couleur, vous pouvez ajuster la valeur d'inversion dans chaque filtre.
la source
Si vous ne faites que basculer l'image entre la couleur réelle et le noir et blanc, vous pouvez définir un sélecteur comme suit:
{filtre: aucun;}
et un autre comme:
la source
Pour développer la réponse @gringo, la méthode Javascript décrite dans d'autres réponses fonctionne, mais nécessite que l'utilisateur télécharge des fichiers image inutiles, et IMO, il gonfle votre code.
Je pense qu'une meilleure approche serait de migrer tous les graphiques vectoriels 1 couleur vers un fichier webfont. J'ai utilisé Fort Awesome dans le passé, et cela fonctionne très bien pour combiner vos icônes / images personnalisées au format SVG, ainsi que toutes les icônes tierces que vous utilisez (Font Awesome, icônes Bootstrap, etc.) dans un seul fichier de police Web l'utilisateur doit télécharger. Vous pouvez également le personnaliser, de sorte que vous n'incluez que les icônes tierces que vous utilisez. Cela réduit le nombre de demandes que la page doit faire et vous avez un poids global de page, surtout si vous incluez déjà des bibliothèques d'icônes tierces.
Si vous préférez une option plus orientée vers les développeurs, vous pouvez utiliser Google "npm svg webfont" et utiliser l'un des modules de nœuds les plus appropriés pour votre environnement.
Une fois que vous avez fait l'une de ces deux options, vous pouvez facilement changer la couleur via CSS et, très probablement, vous avez accéléré votre site dans le processus.
la source
Facile..
Vous pouvez utiliser ce code:
Spécifiez d'abord le chemin de svg puis écrivez son ID, dans ce cas "Capa_1". Vous pouvez obtenir l'ID de svg en l'ouvrant dans n'importe quel éditeur.
En CSS:
la source
Le problème principal dans votre cas est que vous importez le svg à partir d'une
<img>
balise qui masquera la structure SVG.Vous devez utiliser la
<svg>
balise en conjonction avec le<use>
pour obtenir l'effet souhaité. Pour le faire fonctionner, vous devez donner unid
au chemin que vous souhaitez utiliser dans le fichier SVG<path id='myName'...>
pour pouvoir ensuite les récupérer à partir de la<use xlink:href="#myName"/>
balise. Essayez le découpé ci-dessous.Afficher l'extrait de code
Notez que vous pouvez mettre n'importe quelle URL avant le fragment
#
si vous souhaitez charger le SVG à partir d'une source externe (et ne pas l'intégrer dans votre HTML). En outre, vous ne spécifiez généralement pas le remplissage dans le CSS. Il est préférable d'envisager l'utilisationfill:"currentColor"
dans le SVG lui-même. La valeur de couleur CSS de l'élément correspondant sera alors utilisée en place.la source
Puisque SVG est essentiellement du code, vous avez juste besoin de contenu. J'ai utilisé PHP pour obtenir du contenu, mais vous pouvez utiliser ce que vous voulez.
Ensuite, j'ai imprimé le contenu "tel quel" dans un conteneur div
Pour définir enfin la règle sur les enfants SVG du conteneur sur CSS
J'ai obtenu ces résultats avec une icône matérielle SVG:
Mozilla Firefox 59.0.2 (64 bits) Linux
Google Chrome66.0.3359.181 (Build oficial) (64 bits) Linux
Opera 53.0.2907.37 Linux
la source
Cela pourrait être utile pour les personnes utilisant
PHP
en combinaison avec des.svg
images qu'ils souhaitent manipuler avec CSS.Vous ne pouvez pas remplacer les propriétés à l'intérieur d'une balise img avec CSS. Mais lorsque le code source svg est intégré dans le HTML, vous le pouvez sûrement. J'aime résoudre ce problème avec une
require_once
fonction où j'inclus un.svg.php
fichier. C'est comme importer une image mais vous pouvez toujours écraser les styles avec CSS!Incluez d'abord le fichier svg:
Et il comprend cette icône par exemple:
Maintenant, nous pouvons facilement changer la couleur de remplissage comme ceci avec CSS:
J'ai d'abord essayé de résoudre ce problème avec
file_get_contents()
mais la solution ci-dessus est beaucoup plus rapide.la source
Sachez que c'est une vieille question mais récemment nous sommes tombés sur le même problème, et nous l'avons résolu du côté serveur. C'est une réponse spécifique à PHP mais je suis certain que d'autres envs ont quelque chose de similaire. au lieu d'utiliser la balise img, vous rendez le svg en svg dès le départ.
maintenant, lorsque vous rendrez le fichier, vous obtiendrez un svg en ligne complet
la source
ouvrez l'icône svg dans votre éditeur de code et ajoutez une classe après la balise path:
Vous pouvez ajouter une classe à svg et changer la couleur comme ceci:
codepen
la source
Si vous avez accès à JQuery, puis en étendant la réponse de Praveen, vous pouvez changer par programme la couleur des différents éléments imbriqués dans SVG en:
$('svg').find('path, text').css('fill', '#ffffff');
Dans find, vous pouvez mentionner différents éléments qui doivent être modifiés en couleur.
la source