Wie ihr das volle Potential von Inline-SVG-Bildern entfaltet

Erstellt am

SVG-Bilder sind ein integraler Bestandteil des modernen Webdesigns. SVG, kurz für Scalable Vector Graphics , sind hoch skalierbar und haben eine geringe Dateigröße. Ihr könnt sie sogar mit CSS stylen, wie ich euch zeigen werde.

Ein SVG-Bild kann mit dem <img> Tag oder der CSS-Eigenschaft background-image in eine Website eingebettet werden. In diesem Fall könnt ihr aber das Styling des Bildes nicht ändern. Ich verwende lieber Inline-SVG-Bilder. Diese können mit CSS angepasst und sogar animiert werden.

Eine Frau malt eine Katzenfigur auf ein Stück Papier.

Wie kann man Inline-SVG-Bilder einbetten? Was sind die besten Methoden, um sie mit CSS-Eigenschaften und Variablen anzupassen? Lest weiter, um die Antworten darauf zu erfahren.

Wie ihr ein Inline-SVG einbettet

SVG-Bilder können mit dem <svg> Tag direkt in ein HTML-Dokument eingebettet werden. Öffnet einfach die Bilddatei in einem Code-Editor, kopiert den Code und fügt ihn in euer HTML-Template ein. Hier ist ein Beispiel:

<svg height="48" width="48" viewBox="0 -960 960 960" xmlns="http://www.w3.org/2000/svg">
    <path d="m393-165 279-335H492l36-286-253 366h154l-36 255Zm-73 85 40-280H160l360-520h80l-40 320h240L400-80h-80Zm153-395Z"></path>
</svg>

Websites werden oft mithilfe komponentenbasierter JavaScript-Frameworks wie Angular oder React erstellt. Damit könnt ihr ein Inline-SVG in einer eigenen Komponente verpacken, die ihr dann an verschiedenen Stellen eurer Website wiederverwenden könnt. Ein Beispiel dafür ist die Material UI Icon-Bibliothek.

Die UI-Bibliothek Angular Material geht sogar noch einen Schritt weiter: Damit könnt ihr SVG-Dateien als Assets der Website hinzufügen. Die Anwendung lädt die Bilder später vom Server, sodass der SVG-Code über die <mat-icon> Komponente in das HTML-Dokument eingebettet werden kann.

Demo: Flexibles Styling von SVG-Icon-Buttons

Ich habe eine Demo mit Anwendungsfällen für Inline-SVGs erstellt. Ihr könnt die Farbe der Icons über ein Farbwahlelement anpassen:

Wie das funktioniert? Indem ihr den fill des SVG-Bildes mit der CSS-Eigenschaft color verknüpft.

SVG-Bilder mit CSS stylen

Als erstes setzt ihr die Eigenschaft fill des SVG-Bildes auf den Wert currentColor . Dieses spezielle Schlüsselwort steht für den Wert der color CSS-Eigenschaft eines Elements. Auf diese Weise werden die Vektoren des SVG-Bildes mit der Schriftfarbe des Elements gefüllt. Ihr könnt die Eigenschaft im SVG-Code setzen:

<svg fill="currentColor" height="48" width="48" viewBox="0 -960 960 960" xmlns="http://www.w3.org/2000/svg">
    <path d="..."></path>
</svg>

Oder ihr definiert die Eigenschaft im CSS-Code:

.icon svg {
    fill: currentColor;
}

Jetzt könnt ihr das Aussehen des SVG-Bildes über die CSS-Eigenschaft color steuern. Das erleichtert die Verwaltung von Farbthemen und verschiedenen Zuständen von Steuerelementen.

Sagen wir, ihr verwendet eine Schaltfläche mit Icon und Text, wie in meiner Demo oben: Ihr könnt alle Elemente innerhalb der Schaltfläche mit einer einzigen CSS-Regel einfärben. Verschiedene Zustände wie :hover , :focus oder :disabled sind einfach zu gestalten. Ihr könnt sogar den Farbwechsel animieren:

.primary-btn {
    color: #f118a6;
    transition: color 0.5s ease;
}
.primary-btn:hover, .primary-btn:focus {
    color: #920c64;
    outline: 2px solid currentColor;
}

CSS-Variablen für mehrfarbige Bilder verwenden

Ihr könnt sogar CSS-Variablen innerhalb von SVG-Code verwenden. Das kann nützlich sein, wenn euer SVG-Bild mehrere Farben enthält. In diesem Fall könnt ihr die Hauptfarbe weiterhin mit der CSS-Eigenschaft color verknüpfen. Für die anderen Farben solltet ihr eigene CSS-Variablen definieren:

<svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
    <path d="..." />
    <path d="..." />
    <path fill="var(--secondary-fill)" d="..." />
</svg>

Im Beispiel oben werden das erste und zweite path Element durch die definierte Schriftfarbe eingefärbt. Die Füllung des dritten Pfades könnt ihr über die CSS-Variable —secondary-fill steuern:

.icon {
    color: darkred;
    --secondary-fill: white;
}

Der Artikel „Multi-Colored SVG Symbol Icons with CSS Variables“ gibt euch einen ausführlichen Einblick in das Konzept.

Macht eure Bilder barrierefrei

Und nicht zuletzt: Vergesst nicht auf die Barrierefreiheit! Wenn das SVG-Bild rein dekorativ ist, dann verwendet aria-hidden=“true” , um das Element vor assistiven Technologien zu verbergen.

Wenn das Bild wichtige Informationen vermittelt, solltet ihr role=“img” setzen und mit dem Attribut aria-label einen alternativen Text angeben. Lest den Artikel „Accessible SVGs“ für weitere Informationen und Anwendungsfälle.

Erstellt am