Ich habe mehrere SVG-Grafiken, deren Farben ich über meine externen Stylesheets ändern möchte - nicht direkt in jeder SVG-Datei. Ich stelle die Grafiken nicht in eine Linie, sondern speichere sie in meinem Bilderordner und zeige auf sie.
Ich habe sie auf diese Weise implementiert, damit QuickInfos funktionieren, und ich habe sie jeweils in ein <a>
Tag eingeschlossen, um einen Link zu ermöglichen.
<a href='http://youtube.com/...' target='_blank'><img class='socIcon' src='images/socYouTube.svg' title='View my videos on YouTube' alt='YouTube' /></a>
Und hier ist der Code der SVG-Grafik:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="stylesheets/main.css" type="text/css"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 56.69 56.69">
<g>
<path d="M28.44......./>
</g>
</svg>
Ich habe Folgendes in meine externe CSS-Datei (main.css) eingefügt:
.socIcon g {fill:red;}
Es hat jedoch keine Auswirkung auf die Grafik. Ich habe auch .socIcon g path {} und .socIcon path {} ausprobiert.
Etwas stimmt nicht, vielleicht erlaubt meine Implementierung keine externen CSS-Änderungen, oder ich habe einen Schritt verpasst? Ich würde mich sehr über Ihre Hilfe freuen! Ich brauche nur die Möglichkeit, die Farben der SVG-Grafik über mein externes Stylesheet zu ändern, aber ich kann die Tooltip- und Link-Fähigkeit nicht verlieren. (Ich kann jedoch möglicherweise ohne Tooltips leben.) Danke!
svg { fill:red; }
oder geben Sie Ihrem Pfad einen Klassennamen. ZB<path class="socIcon" d="M28.44 ..... />
sollte dies den Trick tun.Antworten:
Ihre main.css-Datei würde sich nur dann auf den Inhalt der SVG auswirken, wenn die SVG-Datei inline im HTML-Code enthalten ist:
https://developer.mozilla.org/en/docs/SVG_In_HTML_Introduction
Wenn Sie Ihre SVG in Dateien behalten möchten, muss das CSS in der SVG-Datei definiert werden.
Sie können dies mit einem Style-Tag tun:
http://www.w3.org/TR/SVG/styling.html#StyleElementExample
Sie können ein Tool auf der Serverseite verwenden, um das Style-Tag abhängig vom aktiven Style zu aktualisieren. In Ruby konnte man dies mit Nokogiri erreichen. SVG ist nur XML. Es sind also wahrscheinlich viele XML-Bibliotheken verfügbar, die dies wahrscheinlich erreichen können.
Wenn Sie das nicht können, müssen Sie sie nur so verwenden, als wären sie PNGs. Erstellen eines Sets für jeden Stil und Speichern der Stile inline.
quelle
Sie können mit einer (wichtigen) Einschränkung tun, was Sie wollen: Die Pfade in Ihrem Symbol können nicht unabhängig über externes CSS gestaltet werden. Mit dieser Methode können Sie nur die Eigenschaften für das gesamte Symbol festlegen. Wenn Sie also zwei Pfade in Ihrem Symbol haben und möchten, dass diese unterschiedliche Füllfarben haben, funktioniert dies nicht. Wenn Sie jedoch möchten, dass alle Pfade gleich sind, sollte dies funktionieren.
In Ihrer HTML-Datei möchten Sie ungefähr Folgendes:
Und in der externen SVG-Datei möchten Sie so etwas:
Tauschen Sie die Klasse auf dem
svg
Tag (in Ihrem HTML) vonfill-red
bisfill-blue
und ta-da ... Sie haben Blau statt Rot.Sie können die Einschränkung teilweise umgehen, dass Sie die Pfade separat mit externem CSS ausrichten können, indem Sie das externe CSS mit bestimmten Inline-CSS auf bestimmten Pfaden mischen und abgleichen, da das Inline-CSS Vorrang hat. Dieser Ansatz funktioniert, wenn Sie so etwas wie ein weißes Symbol vor einem farbigen Hintergrund ausführen, bei dem Sie die Farbe des Hintergrunds über das externe CSS ändern möchten, das Symbol selbst jedoch immer weiß ist (oder umgekehrt). Mit demselben HTML-Code wie zuvor und so etwas wie diesem SVG-Code erhalten Sie einen roten Hintergrund und einen weißen Vordergrundpfad:
quelle
symbol
Element zu packen , dh Sie könnenid
dem svg-Element einfach eine geben , also: `<svg id = Beispiel" xmlns = " w3.org/2000/svg " viewBox = "0 0 256 256 "> <path class =" background "d =" M120 ... "/> <path class =" icon "style =" fill: white; "d =" M20 ... "/> </ svg > `Sie können in Ihre SVG-Dateien einen Link zu einer externen CSS-Datei aufnehmen, indem Sie Folgendes verwenden:
Sie müssen dies nach dem Öffnen des Tags einfügen:
Es ist keine perfekte Lösung, da Sie SVG-Dateien ändern müssen, aber Sie ändern sie einmal und dann können alle Stiländerungen in einer CSS-Datei für alle SVG-Dateien vorgenommen werden.
quelle
Sie können eine SVG-Datei formatieren, indem Sie dynamisch ein Stilelement in JavaScript erstellen und an das SVG-Element anhängen. Hacky, aber es funktioniert.
Sie können das JavaScript dynamisch in PHP generieren, wenn Sie möchten - die Tatsache, dass dies in JavaScript möglich ist, eröffnet eine Vielzahl von Möglichkeiten.
quelle
Sie können lediglich CSS-Filter verwenden, um das Erscheinungsbild der SVG-Grafiken im Browser zu ändern.
Wenn Sie beispielsweise eine SVG-Grafik haben, die eine Füllfarbe Rot im SVG-Code verwendet, können Sie sie mit einer Farbton-Rotations-Einstellung von 180 Grad lila drehen:
Experimentieren Sie mit anderen Einstellungen für die Farbtonrotation, um die gewünschten Farben zu finden.
Das obige CSS wird in das CSS aufgenommen, das auf Ihr HTML-Dokument angewendet wird. Sie gestalten das img-Tag im HTML-Code und nicht den Code der SVG.
Beachten Sie auch, dass dies bei Grafiken mit einer Füllung aus Schwarz, Weiß oder Grau nicht funktioniert. Sie müssen eine tatsächliche Farbe haben, um den Farbton dieser Farbe zu drehen.
quelle
Eine sehr schnelle Lösung für einen dynamischen Stil mit einem externen CSS-Stylesheet, falls Sie das
<object>
Tag zum Einbetten Ihres SVG verwenden.In diesem Beispiel wird dem Root-
<svg>
Tag eine Klasse hinzugefügt, wenn Sie auf ein übergeordnetes Element klicken.file.svg:
html:
Jquery:
Klicken Sie auf übergeordnetes Element:
dann können Sie Ihre CSS verwalten
svg.css:
quelle
Dies sollte möglich sein, indem zuerst die externen SVG-Bilder eingefügt werden. Der folgende Code stammt aus dem Ersetzen aller SVG-Bilder durch Inline-SVG von Jess Frazelle.
quelle
Bei Verwendung in einem
<image>
Tag muss SVG aus Datenschutzgründen in einer einzigen Datei enthalten sein. Dieser Bugzilla-Bug enthält weitere Details dazu, warum dies so ist. Leider können Sie kein anderes Tag wie z. B. ein verwenden,<iframe>
da dies nicht als Link funktioniert und Sie das CSS in ein<style>
Tag in der Datei selbst einbetten müssen .Eine andere Möglichkeit, dies zu tun, besteht darin, die SVG-Daten in der Haupt-HTML-Datei zu haben, d. H.
Sie können dies mit einer externen CSS-Datei mithilfe des HTML-
<link>
Tags formatieren.quelle
Ich weiß, dass es ein alter Beitrag ist, aber nur um dieses Problem zu lösen ... Sie verwenden Ihre Klassen nur am falschen Ort: D.
Zuallererst könnten Sie verwenden
in deinem
main.css
, um es rot zu bekommen. Dies hat Wirkung. Sie könnten wahrscheinlich auch Knotenselektoren verwenden, um bestimmte Pfade zu erhalten.Zweitens haben Sie die Klasse zum
img
-Tag erklärt.Sie sollten es tatsächlich in Ihrem SVG deklamieren. Wenn Sie unterschiedliche Pfade haben, können Sie natürlich mehr definieren.
Jetzt können Sie die Farbe nach Ihren
main.css
Wünschen ändernquelle
Ich empfehle Ihnen, dafür PHP zu verwenden. Es gibt wirklich keinen besseren Weg, dies ohne Symbolschriftarten zu tun, und wenn Sie sich weigern, sie zu verwenden, können Sie Folgendes versuchen:
Und später können Sie diese Datei verwenden
filename.php?color=#ffffff
, um die SVG-Datei in der gewünschten Farbe zu erhalten.quelle
if (!preg_match('/^[#][0-9a-f]{6}$/i', $_GET['color'])) die('Oops!');
(Platziere es irgendwo im Start-PHP-Block).Was für mich funktioniert: Style-Tag mit @ Import-Regel
quelle
Hinweis: Externe Stile funktionieren nicht, wenn Sie SVG in das
<img>
Tag aufnehmen. Es wird perfekt innerhalb des<div>
Tags funktionierenquelle
@leo hier ist die angleJS-Version, nochmals vielen Dank
quelle
Diese Methode funktioniert, wenn das SVG in einem Webbrowser angezeigt wird. Sobald dieser Code jedoch auf den Server hochgeladen und die Klasse für das SVG-Symbol so codiert wurde, als wäre es ein Hintergrundbild, geht die Farbe verloren und kehrt zur Standardfarbe zurück . Anscheinend kann die Farbe im externen Stylesheet nicht geändert werden, obwohl sowohl die SVG-Klasse für die Farbe als auch die oberste Ebenenklasse für die Anzeige und die Position des SVG demselben Verzeichnis zugeordnet sind.
quelle