Liebe Community,
ich möchte eine Grafik als SVG in einem externen File in eine HTML-Seite einbinden, wobei deren Klasseninformationen in einem CSS ausgelagert werden sollen.
Hintergrund: die Grafik wird von Browsern nur einmal geladen und dann aus dem Cache angezeigt, ebenso das CSS.
Das ermöglicht eine hohe Effizienz hinsichtlich Übertragungsvolumen und Request-Zahlen.
Die Grafik sei folgendes grüne Quadrat:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100px" height="100px" viewBox="0 0 100 100"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<style type="text/css">
<![CDATA[
.fil0 {fill:red}
]]>
</style>
</defs>
<g>
<polygon class="fil0" points="0,0 100,0 100,100 0,100 "/>
</g>
</svg>
Ich möchte nun die Klassen (hier die Füllfarbe lime) in ein CSS "test.css" auslagern, die Daten des SVG als "grafik.svg" speichern und das Ganze in HTML als <img src="grafik.svg"> einbinden.
Das Einbinden und nachträgliche Ändern via CSS funktioniert bei inline SVG wie gewünscht. Auch wenn im Browser "grafik.svg" direkt geladen wird (unter Nachladen des "test.css", was im SVG notiert wird), wird die Grafik korrekt angezeigt.
ABER: Das funktioniert nicht, wenn die Grafik in HTML mit <img src="grafik.svg"> eingebunden wird. Hier wird der Content (das Quadrat) schwarz und nicht grün angezeigt.
Der IE11 und Android-Browser zeigen die Grafik richtig an, Firefox und Chrome (PC) hingegen nicht - hier bleibt die Farbe schwarz, weil das CSS nicht beachtet wird (vermute ich).
Zum Nachvollziehen alle drei benötigten Files:
grafik.svg:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="test.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 xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100px" height="100px" viewBox="0 0 100 100"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<polygon class="fil0" points="0,0 100,0 100,100 0,100 "/>
</g>
</svg>
test.css:
.fil0 { fill:lime }
test.htm:
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" type="text/css" href="test.css" />
</head>
<body>
inline:<br/>
<svg width="100px"; height="100px"; viewBox="0 0 100 100"><g><polygon class="fil0" points="0,0 100,0 100,100 0,100 "/></g></svg>
<br/><br/>als img nachgeladen:<br/>
<img src="grafik.svg">
</body>
</html>
Bei Anzeige von test.htm im Browser wird erst inline ein grünes Quadrat angezeigt (ohne test.css wäre es schwarz), und dann nochmal als img nachgeladen. Das zweite Quadrat ist nicht grün (Firefox, Chrome).
Wie muss ich das CSS abändern, damit auch der Firefox oder PC-Chrome Notiz davon nehmen?
ich möchte eine Grafik als SVG in einem externen File in eine HTML-Seite einbinden, wobei deren Klasseninformationen in einem CSS ausgelagert werden sollen.
Hintergrund: die Grafik wird von Browsern nur einmal geladen und dann aus dem Cache angezeigt, ebenso das CSS.
Das ermöglicht eine hohe Effizienz hinsichtlich Übertragungsvolumen und Request-Zahlen.
Die Grafik sei folgendes grüne Quadrat:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100px" height="100px" viewBox="0 0 100 100"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<style type="text/css">
<![CDATA[
.fil0 {fill:red}
]]>
</style>
</defs>
<g>
<polygon class="fil0" points="0,0 100,0 100,100 0,100 "/>
</g>
</svg>
Ich möchte nun die Klassen (hier die Füllfarbe lime) in ein CSS "test.css" auslagern, die Daten des SVG als "grafik.svg" speichern und das Ganze in HTML als <img src="grafik.svg"> einbinden.
Das Einbinden und nachträgliche Ändern via CSS funktioniert bei inline SVG wie gewünscht. Auch wenn im Browser "grafik.svg" direkt geladen wird (unter Nachladen des "test.css", was im SVG notiert wird), wird die Grafik korrekt angezeigt.
ABER: Das funktioniert nicht, wenn die Grafik in HTML mit <img src="grafik.svg"> eingebunden wird. Hier wird der Content (das Quadrat) schwarz und nicht grün angezeigt.
Der IE11 und Android-Browser zeigen die Grafik richtig an, Firefox und Chrome (PC) hingegen nicht - hier bleibt die Farbe schwarz, weil das CSS nicht beachtet wird (vermute ich).
Zum Nachvollziehen alle drei benötigten Files:
grafik.svg:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="test.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 xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100px" height="100px" viewBox="0 0 100 100"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<polygon class="fil0" points="0,0 100,0 100,100 0,100 "/>
</g>
</svg>
test.css:
.fil0 { fill:lime }
test.htm:
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" type="text/css" href="test.css" />
</head>
<body>
inline:<br/>
<svg width="100px"; height="100px"; viewBox="0 0 100 100"><g><polygon class="fil0" points="0,0 100,0 100,100 0,100 "/></g></svg>
<br/><br/>als img nachgeladen:<br/>
<img src="grafik.svg">
</body>
</html>
Bei Anzeige von test.htm im Browser wird erst inline ein grünes Quadrat angezeigt (ohne test.css wäre es schwarz), und dann nochmal als img nachgeladen. Das zweite Quadrat ist nicht grün (Firefox, Chrome).
Wie muss ich das CSS abändern, damit auch der Firefox oder PC-Chrome Notiz davon nehmen?