html
<img src="logo.svg" alt="Logo" class="logo-img">
CSS
.logo-img path {
fill: #000;
}
Das obige SVG wird geladen und ist nativ, fill: #fff
aber wenn ich das Obige verwende css
, um es in Schwarz zu ändern, ändert es sich nicht. Ich spiele zum ersten Mal mit SVG und bin mir nicht sicher, warum es nicht funktioniert.
Antworten:
Wenn Ihr Ziel nur darin besteht, die Farbe des Logos zu ändern, und Sie nicht unbedingt CSS verwenden müssen, verwenden Sie kein Javascript oder keine Abfrage, wie dies in einigen früheren Antworten vorgeschlagen wurde.
Um die ursprüngliche Frage genau zu beantworten, einfach:
Öffnen Sie Ihre
logo.svg
in einem Texteditor.suchen
fill: #fff
und ersetzen durchfill: #000
Sie
logo.svg
könnten beispielsweise so aussehen, wenn Sie sie in einem Texteditor öffnen:... einfach die Füllung ändern und speichern.
quelle
path
odercircle
Elementen wie hinzufügen<path fill="#777777" d="m129.774,74.409c-5.523,...
.fill="currentColor"
dascolor
auf dem übergeordneten Element verwendete Element css-tricks.com/cascading-svg-fill-color verwendenSie können Ihre SVG als Maske festlegen. Auf diese Weise würde das Festlegen einer Hintergrundfarbe als Füllfarbe fungieren.
HTML
CSS
JSFiddle: https://jsfiddle.net/KuhlTime/2j8exgcb/
MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/mask
Bitte überprüfen Sie, ob Ihr Browser diese Funktion unterstützt: https://caniuse.com/#search=mask
quelle
mask
eininvalid property value
. Ich teste dies in Chrom.Versuchen Sie reines CSS:
Weitere Informationen in diesem Artikel https://blog.union.io/code/2017/08/10/img-svg-fill/
quelle
2018: Wenn Sie eine dynamische Farbe möchten, kein Javascript und kein Inline-SVG verwenden möchten, verwenden Sie eine CSS-Variable. Funktioniert in Chrome, Firefox und Safari. edit: und Edge
Ersetzen Sie in Ihrer SVG alle Instanzen von
style="fill: #000"
durchstyle="fill: var(--color_fill)"
.quelle
"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
zugunsten von veraltet isthref
. Das kann also immer noch funktionieren.Sie müssen zuerst die SVG in das HTML-DOM einfügen.
Es gibt eine Open-Source-Bibliothek namens SVGInject , die dies für Sie erledigt. Es verwendet das
onload
Attribut, um die Injektion auszulösen.Hier ist ein minimales Beispiel für die Verwendung von SVGInject:
Nachdem das Bild geladen wurde
onload="SVGInject(this)
, löst das die Injektion aus und das<img>
Element wird durch den Inhalt der SVG-Datei ersetzt, die in dersrc
Attribut .Es löst mehrere Probleme mit der SVG-Injektion:
SVGs können ausgeblendet werden, bis die Injektion beendet ist. Dies ist wichtig, wenn bereits während der Ladezeit ein Stil angewendet wird, der andernfalls einen kurzen "nicht gestylten Inhaltsblitz" verursachen würde.
Die
<img>
Elemente injizieren sich automatisch. Wenn Sie SVGs dynamisch hinzufügen, müssen Sie sich keine Gedanken mehr über das erneute Aufrufen der Injektionsfunktion machen.Jeder ID in der SVG wird eine zufällige Zeichenfolge hinzugefügt, um zu vermeiden, dass dieselbe ID mehrmals im Dokument enthalten ist, wenn eine SVG mehr als einmal injiziert wird.
SVGInject ist einfaches Javascript und funktioniert mit allen Browsern, die SVG unterstützen.
Haftungsausschluss: Ich bin Mitautor von SVGInject
quelle
Die Antwort von @Praveen ist solide.
Ich konnte es nicht dazu bringen, in meiner Arbeit zu antworten, also habe ich eine JQuery-Hover-Funktion dafür erstellt.
CSS
JS / JQuery
quelle
Warum erstellen Sie nicht einen Webfont mit Ihrem SVG-Bild oder Ihren SVG-Bildern, importieren den Webfont in das CSS und ändern dann einfach die Farbe des Glyphen mithilfe des CSS-Farbattributs? Kein Javascript erforderlich
quelle
Diese Antwort basiert auf der Antwort https://stackoverflow.com/a/24933495/3890888, jedoch mit einer einfachen JavaScript-Version des dort verwendeten Skripts.
Sie müssen die SVG zu einer Inline-SVG machen . Sie können dieses Skript verwenden, indem Sie
svg
dem Bild eine Klasse hinzufügen :Und dann, wenn Sie das tun:
Oder vielleicht:
JSFiddle: http://jsfiddle.net/erxu0dzz/1/
quelle
parser.parseFromString(text, "image/svg+xml");
fetch
, dass Safari in 10.1 ( developer.mozilla.org/en-US/docs/Web/API/Fetch_API ) verwendet wurde. Die obige jQuery-Version funktioniert.Verwenden Sie Filter, um in eine beliebige Farbe zu transformieren.
Ich habe diese Lösung kürzlich gefunden und hoffe, dass jemand sie verwenden kann. Da die Lösung Filter verwendet, kann sie mit jeder Art von Bild verwendet werden. Nicht nur svg.
Wenn Sie ein einfarbiges Bild haben, dessen Farbe Sie nur ändern möchten, können Sie dies mithilfe einiger Filter tun. Es funktioniert natürlich auch bei mehrfarbigen Bildern, aber Sie können nicht auf eine bestimmte Farbe zielen. Nur das ganze Bild.
Die Filter stammen aus dem Skript unter So transformieren Sie Schwarz in eine bestimmte Farbe, indem Sie nur CSS-Filter verwenden. Wenn Sie Weiß in eine beliebige Farbe ändern möchten, können Sie den Invertierungswert in jedem Filter anpassen.
quelle
Um die @ gringo-Antwort zu erweitern, funktioniert die in anderen Antworten beschriebene Javascript-Methode, der Benutzer muss jedoch unnötige Bilddateien herunterladen, und IMO wird Ihr Code aufgebläht.
Ich denke, ein besserer Ansatz wäre es, alle einfarbigen Vektorgrafiken in eine Webfont-Datei zu migrieren. Ich habe Fort Awesome in der Vergangenheit verwendet und es funktioniert hervorragend, wenn Sie Ihre benutzerdefinierten Symbole / Bilder im SVG-Format zusammen mit den von Ihnen verwendeten Symbolen von Drittanbietern (Font Awesome, Bootstrap-Symbole usw.) in einer einzigen Webfont-Datei kombinieren Der Benutzer muss herunterladen. Sie können es auch anpassen, sodass Sie nur die von Ihnen verwendeten Symbole von Drittanbietern einschließen. Dies reduziert die Anzahl der Anforderungen, die die Seite stellen muss, und das Gesamtseitengewicht, insbesondere wenn Sie bereits Symbolbibliotheken von Drittanbietern enthalten.
Wenn Sie eine dev-orientierte Option bevorzugen, können Sie Google "npm svg webfont" verwenden. und eines der für Ihre Umgebung am besten geeigneten Knotenmodule verwenden.
Sobald Sie eine dieser beiden Optionen ausgeführt haben, können Sie die Farbe problemlos über CSS ändern, und höchstwahrscheinlich haben Sie Ihre Website dabei beschleunigt.
quelle
Wenn Sie nur das Bild zwischen der echten Farbe und Schwarzweiß umschalten, können Sie einen Selektor wie folgt einstellen:
{Filter: keine;}
und eine andere als:
quelle
Einfach..
Sie können diesen Code verwenden:
Geben Sie zuerst den Pfad von svg an und schreiben Sie dann die ID, in diesem Fall "Capa_1". Sie können die ID von svg erhalten, indem Sie sie in einem beliebigen Editor öffnen.
In CSS:
quelle
Das Hauptproblem in Ihrem Fall ist, dass Sie
<img>
das SVG aus einem Tag importieren, das die SVG-Struktur verbirgt.Sie müssen das
<svg>
Tag in Verbindung mit dem verwenden<use>
, um den gewünschten Effekt zu erzielen. Damit es funktioniert, müssen Sieid
dem Pfad, den Sie in der SVG-Datei verwenden möchten,<path id='myName'...>
einen geben, um sie dann aus dem<use xlink:href="#myName"/>
Tag abrufen zu können . Versuchen Sie das unten geschnippte.Code-Snippet anzeigen
Beachten Sie, dass Sie eine beliebige URL vor das Fragment stellen können,
#
wenn Sie die SVG-Datei aus einer externen Quelle laden möchten (und nicht in Ihren HTML-Code einbetten möchten ). Außerdem geben Sie die Füllung normalerweise nicht im CSS an. Es ist besser, die Verwendungfill:"currentColor"
innerhalb der SVG selbst in Betracht zu ziehen . Der CSS-Farbwert des entsprechenden Elements wird dann an Ort und Stelle verwendet.quelle
Da SVG im Grunde genommen Code ist, benötigen Sie nur Inhalte. Ich habe PHP verwendet, um Inhalte zu erhalten, aber Sie können verwenden, was Sie wollen.
Dann habe ich den Inhalt "wie er ist" in einem div-Container gedruckt
Um die Regel endgültig auf die SVG-Childs des Containers in CSS festzulegen
Ich habe diese Ergebnisse mit einem Material-Symbol SVG erhalten:
Mozilla Firefox 59.0.2 (64-Bit) Linux
Google Chrome66.0.3359.181 (Build oficial) (64 Bit) Linux
Opera 53.0.2907.37 Linux
quelle
Dies kann für Personen hilfreich sein, die
PHP
in Kombination mit verwenden.svg
Bilder Bildern verwenden, die sie mit CSS bearbeiten möchten.Sie können Eigenschaften in einem img-Tag nicht mit CSS überschreiben. Aber wenn der SVG-Quellcode in den HTML-Code eingebettet ist, können Sie dies sicherlich. Ich möchte dieses Problem mit einer
require_once
Funktion lösen, in die ich a.svg.php
Datei einbinde. Es ist wie beim Importieren eines Bildes, aber Sie können Stile trotzdem mit CSS überschreiben!Fügen Sie zuerst die SVG-Datei hinzu:
Und es enthält dieses Symbol zum Beispiel:
Jetzt können wir die Füllfarbe mit CSS ganz einfach so ändern:
Ich habe zuerst versucht, dieses Problem mit zu lösen,
file_get_contents()
aber die obige Lösung ist viel schneller.quelle
Ich weiß, dass dies eine alte Frage ist, aber kürzlich sind wir auf dasselbe Problem gestoßen und haben es von der Serverseite aus gelöst. Dies ist eine PHP-spezifische Antwort, aber ich bin mir sicher, dass andere Envs etwas Ähnliches haben. Anstatt das img-Tag zu verwenden, rendern Sie das SVG von Anfang an als SVG.
Jetzt, wenn Sie die Datei rendern, erhalten Sie vollständige Inline-SVG
quelle
Öffnen Sie das SVG-Symbol in Ihrem Code-Editor und fügen Sie nach dem Pfad-Tag eine Klasse hinzu:
Sie können svg eine Klasse hinzufügen und die Farbe folgendermaßen ändern:
Codepen
quelle
Wenn Sie Zugriff auf JQuery haben und die Antwort von Praveen erweitern, können Sie die Farbe verschiedener verschachtelter Elemente in SVG programmgesteuert ändern, indem Sie:
$('svg').find('path, text').css('fill', '#ffffff');
In find können Sie verschiedene Elemente erwähnen, deren Farbe geändert werden muss.
quelle