Vektorgra ken fürs Web
Webseiten exibel und dynamisch gestalten
S calable Vector Graphics (kurz SVG) sind vektorbasierte Gra ken für das Web. Sie können ebenso wie pixelbasierte Gra ken per oder als Hintergrundgra k in eine Webseite eingebunden werden. div { background-image:
url("hintergrund.svg"); }
Das SVG ist ein XML-basiertes Dateiformat. Sie könnten es direkt mit einem Texteditor schreiben. In den meisten Fällen werden Sie die Gra k aber mit einem Vektorprogramm wie Adobe Illustrator, Af nity Designer oder Inkscape erstellen, exportieren und dann in einem Texteditor optimieren.
Der große Vorteil ist, dass ein SVG für alle Größen und Au ösungen ohne Qualitätsverlust skaliert wird. Das SVG ist daher das richtige Format für Logos, Icons, Infogra - ken und vektorbasierte Illustrationen. Alle modernen Browser ab dem Internet Explorer 9 können SVG grundsätzlich darstellen. Innerhalb eines SVG können eine ganze Reihe von gra schen Elementen zum Einsatz kommen: Rechteck, Kreis, Ellipse, Linie, Pfad, Polygon, Polygonzug, aber auch Text
und andere (pixelbasierte) Bilder. Nehmen wir als Beispiel ein einfaches Rechteck mit den Maßen 200 x 300 Pixel, das bei den Koordinaten 10, 20 beginnt. Innerhalb eines SVG können Maßeinheiten verwendet werden, die aus CSS bekannt sind, etwa px, em, %. Es ist auch möglich, keine konkreten Einheiten anzugeben. In dem Fall entsprechen die Maße user units, was im Web effektiv auf Pixel hinausläuft.
Dazu kommen ein paar Basisdeklarationen und -informationen:
Der
Inline-SVG mit CSS anpassen
Sie können ein SVG auch direkt in das HTML einer Webseite einbauen. Sie sparen sich so zusätzliche Aufrufe, die externe Gra ken erzeugen würden. Auf der anderen Seite wird das Markup etwas unübersichtlicher. Aber meistens geht es um ein paar Stellen in Templates, mit denen Sie nicht ständig arbeiten müssen.
Ein Inline-SVG innerhalb von HTML bietet einen weiteren Vorteil: Sie können Elemente innerhalb des SVG direkt mit CSS ansprechen und verändern. Nehmen wir ein Search-Icon in einem Link:
Das Icon wird zunächst in weiß auf dem dunklen Hintergrund des Links dargestellt. Da das SVG direkt eingebunden ist, können Sie die Farbe des path bei einem Hover oder Focus per CSS anpassen: a { display: inline-block; width: 40px; height: 40px; padding: 20px; background: #333; } a:hover, a:focus { background: #CCC; } a:hover path, a:focus path {fill:black;}
Für komplexere Effekte können Sie Elemente innerhalb der Gra k mit ids und Klassen ausstatten. So können Sie etwa eine interaktive Infogra k erstellen, bei der auf einer Deutschlandkarte Informationen zu einem Bundesland angezeigt werden, wenn ein Benutzer über dem Land hovert. Dabei orientiert sich die Fläche für den Hover-Effekt an den tatsächlichen Umrissen des Bundeslandes und nicht etwa an einem Rechteck.
SVG generieren und optimieren
Sie können Ihre Gra k in einem Vektorprogramm erstellen, als SVG exportieren und direkt auf der Website einsetzen. Aber es emp ehlt sich, die Datei vorher in einem Texteditor zu öffnen und manuell zu bereinigen. Denn alle Programme erzeugen zusätzliche Anweisungen im SVG, die Sie nicht benötigen.
Angenommen, Sie erstellen in Illustrator einen schwarzen Kreis mit einem Durchmesser von 100 Pixel und speichern das Ergebnis als SVG mit den Standardeinstellungen ab – dann erhalten Sie folgende Datei:
Das ist eine ganze Menge an Informationen, wenn Sie wissen, dass es auch kürzer ginge:
Insbesondere die Informationen zur XMLVersion, dem Generator und dem Doctype sind nicht nötig. Außerdem können Sie einige Attribute im SVG-Element einsparen. In diesem einfachen Beispiel schrumpft die Datei von 495 auf 100 Byte. Sie sparen knapp 80 %. Wenn Sie mehrere Icons auf der Website einsetzen, lohnen sich solche Optimierungen, zumal sie schnell zu machen sind. In anderen Fällen kann ein Export aus Illustrator aber auch für deutlich mehr Ballast sorgen. Denn Illustrator speichert auch unsichtbare Ebenen ab. Das kann nützlich sein, wenn Sie diese Ebenen für bestimmte Effekte über CSS ein- und ausschalten möchten. In vielen Fällen müssen Sie solche nicht benötigten unsichtbaren Ebenen aber manuell entfernen.
Auch bei of ziellen Icons können manchmal noch Kleinigkeiten optimiert werden. Das Logo-Paket von Twitter enthält zum Beispiel dieses SVG für den blauen Vogel:
Man sieht auf den ersten Blick, dass die Datei ein paar unnötige Elemente enthält. Etwa die id, den unpassenden
Style-Angaben und das unnötige Rechteck. Sie erhalten die gleiche Gra k über:
Statt die SVG manuell zu bereinigen, können Sie auch Services im Netz einsetzen. Gute Ergebnisse liefert die Site vecta.io/nano.
In manchen Beispielen enthält das SVG Werte für width und height. Die Werte legen die Dimensionen der Gra k fest. Man könnte meinen, das reiche, um mit dem Bild sauber zu arbeiten. Tatsächlich kann es aber zu Problemen führen – je nachdem, wie Sie das Bild einbauen und per CSS verändern. Nehmen wir ein Bild, das ursprünglich für 400 x 400 Pixel gedacht ist, per eingebaut wird, aber per CSS verzerrt wird. // SVG
// HTML
// CSS img { width: 400px; height: 200px; }
Hier zeigen Firefox und Chrome das Bild verzerrt an. Der Internet Explorer hingegen schneidet das Bild bei 200 Pixel ab. In der Regel wollen Sie ein SVG aber weder verzerren noch abschneiden. Eine Vektorgra k sollte einfach passend zum umgebenden Raum skalieren.
Statt mit width und height zu arbeiten ist es daher sinnvoll, das Attribut viewBox zu verwenden. Damit legen Sie fest, welcher
Bereich eines SVG zu sehen ist. Für reguläre SVG reicht es, dort die Koordinaten 0,0 sowie Breite und Höhe des SVG anzugeben. In diesem Beispiel entspricht das also:
Wenn Sie dieses SVG als einbauen und über CSS „verzerren“, zeigen alle modernen Browser/Internet Explorer das gleiche Verhalten: Das SVG wird auf eine Höhe von 200px skaliert und in der Mitte einer Box von 400 x 200 Pixel angezeigt.
Bei einem optimierten SVG werden Sie also immer die Werte für width und height löschen und stattdessen nur mit der viewBox arbeiten. Das SVG wird so immer den maximalen möglichen Platz einnehmen; egal, ob das SVG Inline, als oder als Hintergrundbild eingebunden wird.
Bei komplexeren SVG-Gra ken wäre es auch möglich, Elemente darin über ids und CSS für breite und schmale Bildschirme anders anzuordnen.
Fallback-Lösungen für alte Browser
Der Internet Explorer unterstützt SVG seit Version 9. Falls Sie in einem Projekt noch den Internet Explorer 8 aus dem Jahr 2009 (oder gar ältere Versionen) berücksichtigen müssen, benötigen Sie eine FallbackLösung. Eine Möglichkeit bietet Modernizr ( modernizr.com). Das Tool überprüft, ob der aktuelle Browser SVG unterstützt und ergänzt dann die Klasse svg im html-Element der Seite. Sie können dann mit CSS auf dieser Klasse aufbauen – oder Sie nutzen die entsprechende Funktion für JavaScript: if (!Modernizr.svg) {
/* Anpassungen für alte Browser, die SVG nicht verstehen */ }
Alternativ sorgen Sie direkt im img-Element dafür, im Zweifel ein PNG zu laden:
Diese beiden Lösungen funktionieren dementsprechend nur, wenn im Browser JavaScript aktiviert ist.
Falls Sie bei den Fallbacks nur Internet Explorer berücksichtigen müssen, können Sie auch mit Conditional Comments arbeiten, die der IE bis Version 9 angeboten hat. In dem Fall können Sie eine Fallunterscheidung für ältere IE bis Version 8 einbauen:
/>
Viele weitere Features
Über das einfache Einsatzgebiet für Logos und Icons hinaus bieten SVG eine ganze Reihe weitere Features, mit denen sich ansehnliche Effekte umsetzen lassen. Dazu gehören Filter, Masken und Animationen. Ein paar dieser Möglichkeiten stellen wir im nächsten Artikel vor.