Platzieren der SVG-Ausgabe direkt inline mit dem Seitencode Ich kann Füllfarben mit CSS einfach so ändern:
polygon.mystar {
fill: blue;
}
circle.mycircle {
fill: green;
}
Dies funktioniert hervorragend, ich suche jedoch nach einer Möglichkeit, das Attribut "fill" eines SVG zu ändern, wenn es als BACKGROUND-IMAGE bereitgestellt wird.
html {
background-image: url(../img/bg.svg);
}
Wie kann ich jetzt die Farben ändern? Ist es überhaupt möglich?
Als Referenz hier der Inhalt meiner externen SVG-Datei:
<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>
Antworten:
Eine Möglichkeit, dies zu tun, besteht darin, Ihr SVG von einem serverseitigen Mechanismus aus zu bedienen. Erstellen Sie einfach eine Ressourcenserverseite, die Ihr SVG gemäß den GET-Parametern ausgibt, und Sie stellen es unter einer bestimmten URL bereit.
Dann verwenden Sie einfach diese URL in Ihrem CSS.
Weil es als Hintergrundbild nicht Teil des DOM ist und Sie es nicht manipulieren können. Eine andere Möglichkeit wäre, es regelmäßig zu verwenden, es auf normale Weise in eine Seite einzubetten, es aber absolut zu positionieren, die volle Breite und Höhe einer Seite festzulegen und dann die CSS-Eigenschaft z-index zu verwenden, um es hinter alle anderen DOM-Elemente zu setzen auf einer Seite.
quelle
<?php header('Content-type: image/svg+xml'); ?>
Ich brauchte etwas Ähnliches und wollte bei CSS bleiben. Hier finden Sie WENIGER- und SCSS-Mixins sowie einfaches CSS, das Ihnen dabei helfen kann. Leider ist die Browserunterstützung etwas lasch. Weitere Informationen zur Browserunterstützung finden Sie weiter unten.
WENIGER mixin:
WENIGER Verwendung:
SCSS-Mixin:
SCSS-Verwendung:
CSS:
Hier finden Sie weitere Informationen zum Einbetten des vollständigen SVG-Codes in Ihre CSS-Datei. Es wurde auch die Browserkompatibilität erwähnt, die etwas zu klein ist, als dass dies eine praktikable Option wäre.
quelle
#
Zeichen für Ihre Hex-Farben urlencodieren müssen , damit dies in Firefox funktioniert. So<svg fill="#ffffff" ...></svg>
wird so etwas wie<svg fill="%23ffffff" ...></svg>
.Sie können CSS-Masken verwenden. Mit der Eigenschaft 'mask' erstellen Sie eine Maske, die auf ein Element angewendet wird.
Weitere Informationen finden Sie in diesem großartigen Artikel: https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images
quelle
Ein weiterer Ansatz ist die Verwendung einer Maske. Anschließend ändern Sie die Hintergrundfarbe des maskierten Elements. Dies hat den gleichen Effekt wie das Ändern des Füllattributs des SVG.
HTML:
CSS:
Ein vollständiges Tutorial finden Sie hier: http://codepen.io/noahblon/blog/coloring-svgs-in-css-background-images (nicht mein eigenes). Es werden verschiedene Ansätze vorgeschlagen (nicht auf Masken beschränkt).
quelle
mask
wird weder von IE noch von Edge unterstützt: caniuse.com/#search=maskMit Sass ist das möglich! Das einzige, was Sie tun müssen, ist die URL-Codierung Ihres SVG-Codes. Und das ist mit einer Helferfunktion in Sass möglich. Ich habe dafür einen Codepen gemacht. Schau dir das an:
http://codepen.io/philippkuehn/pen/zGEjxB
quelle
Codeben Artikel und Demo
quelle
Laden Sie Ihre SVG als Text herunter.
Ändern Sie Ihren SVG-Text mit Javascript, um die Farbe / Strich / Füllfarbe (n) zu ändern.
Betten Sie dann die geänderte SVG-Zeichenfolge wie hier beschrieben in Ihr CSS ein .
quelle
Jetzt können Sie dies auf der Client-Seite folgendermaßen erreichen:
Geige hier!
quelle
Sie können die SVG in einer Variablen speichern. Bearbeiten Sie dann die SVG-Zeichenfolge je nach Ihren Anforderungen (dh stellen Sie Breite, Höhe, Farbe usw. ein). Verwenden Sie dann das Ergebnis, um den Hintergrund festzulegen, z
Ich habe auch eine Demo gemacht, http://sassmeister.com/gist/4cf0265c5d0143a9e734 .
Dieser Code macht einige Annahmen über die SVG, z. B. dass das
<svg />
Element keine Füllfarbe hat und weder die Eigenschaften für Breite noch Höhe festgelegt sind. Da die Eingabe im SCSS-Dokument fest codiert ist, ist es recht einfach, diese Einschränkungen durchzusetzen.Machen Sie sich keine Sorgen über die Codeduplizierung. gzip Komprimierung macht den Unterschied vernachlässigbar.
quelle
Hierfür können Sie eine eigene SCSS-Funktion erstellen. Fügen Sie Ihrer config.rb-Datei Folgendes hinzu.
Dann können Sie es in Ihrem CSS verwenden:
Sie müssen Ihre SVG-Dateien bearbeiten und alle Füllattribute im Markup durch fill = "{color}" ersetzen.
Der Symbolpfad ist immer relativ zu Ihrem Parameter images_dir in derselben Datei config.rb.
Ähnlich wie bei einigen anderen Lösungen, aber dies ist ziemlich sauber und hält Ihre SCSS-Dateien aufgeräumt!
quelle
In einigen (sehr spezifischen) Situationen kann dies durch Verwendung eines Filters erreicht werden . Sie können beispielsweise ein blaues SVG-Bild in lila ändern, indem Sie den Farbton mit um 45 Grad drehen
filter: hue-rotate(45deg);
. Die Browserunterstützung ist minimal, aber immer noch eine interessante Technik.Demo
quelle
Für monochromen Hintergrund können Sie ein SVG mit einer Maske verwenden, in der die Hintergrundfarbe angezeigt werden soll
und dann benutze dieses CSS
quelle
Verwenden Sie den Sepia-Filter zusammen mit Farbton-Drehung, Helligkeit und Sättigung, um eine beliebige Farbe zu erstellen.
https://css-tricks.com/solved-with-css-colorizing-svg-backgrounds/
quelle
Spät zur Show hier, ABER, konnte ich dem SVG-Polygon eine Füllfarbe hinzufügen, wenn Sie den SVG-Code direkt bearbeiten können, sodass beispielsweise das folgende SVG Rot anstelle von Standardschwarz rendert. Ich habe jedoch nicht außerhalb von Chrome getestet:
quelle
Dies ist meine Lieblingsmethode, aber Ihre Browserunterstützung muss sehr fortschrittlich sein. Mit der mask-Eigenschaft erstellen Sie eine Maske, die auf ein Element angewendet wird. Überall dort, wo die Maske undurchsichtig oder fest ist, wird das zugrunde liegende Bild durchscheint. Wo es transparent ist, wird das zugrunde liegende Bild ausgeblendet oder ausgeblendet. Die Syntax für ein CSS-Maskenbild ähnelt dem Hintergrundbild. Schau dir den Codepen an
mask
quelle
Viele IFs, aber wenn Ihr vor base64 codiertes SVG startet:
Dann beginnt die Base64-codierte Zeichenfolge:
Wenn die vorcodierte Zeichenfolge beginnt:
dann codiert dies zu:
Beide codierten Zeichenfolgen beginnen gleich:
Die Besonderheit der Base64-Codierung besteht darin, dass alle 3 Eingabezeichen zu 4 Ausgabezeichen werden. Wenn das SVG so beginnt, beginnt die 6-stellige Hex-Füllfarbe genau an einer Codierungsblock-Grenze. Daher können Sie problemlos einen browserübergreifenden JS-Ersatz durchführen:
Aber die obige Antwort von tnt-rox ist der Weg, um vorwärts zu kommen.
quelle