SVG-Leitfaden für Entwickler: Skalierbare Grafiken, die überall funktionieren
Erfahre, wie SVG funktioniert, wie du SVG-Dateien für das Web optimierst, wann du Inline- vs. externe Einbindung nutzt und wie du SVGs mit CSS und JavaScript animierst und manipulierst.
SVG (Scalable Vector Graphics) ist das einzige Bildformat, das von Browsern nativ als strukturiertes, stilisierbares und skriptfähiges XML verstanden wird. Ein Logo im SVG-Format wird auf einem 1×-Monitor, einem 4K-Display und einem gedruckten Werbeplakat gestochen scharf dargestellt – alles aus derselben Datei. Wer SVG versteht, wird zu einem fähigeren Frontend-Entwickler.
Was SVG besonders macht
Rasterformate (JPEG, PNG, WebP) speichern Bilder als Pixelraster. Vergrößert man sie, entsteht Unschärfe. SVG hingegen speichert Bilder als mathematische Beschreibungen von Formen:
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="40" fill="#3b82f6" />
<text x="50" y="55" text-anchor="middle" fill="white" font-size="14">Hello</text>
</svg>
Das ergibt einen blauen Kreis mit dem Text „Hello" – in jeder Größe, perfekt scharf.
Wann sollte man SVG verwenden:
- Logos und Icons (müssen in jeder Größe scharf bleiben)
- Illustrationen und Diagramme
- Charts und Datenvisualisierungen (D3.js gibt SVG aus)
- Animationen und interaktive Grafiken
- UI-Icons (deutlich besser als Icon-Fonts)
Wann sollte man SVG NICHT verwenden:
- Fotografien und komplexe fotorealistische Bilder (JPEG/WebP verwenden)
- Screenshots (PNG verwenden)
- Wenn das SVG Tausende von Knoten enthält (wird langsamer als Canvas)
Grundlegende SVG-Elemente
Formen
<!-- Rechteck -->
<rect x="10" y="10" width="80" height="60" rx="8" fill="#e2e8f0" stroke="#94a3b8" stroke-width="2"/>
<!-- Kreis -->
<circle cx="50" cy="50" r="30" fill="#3b82f6"/>
<!-- Ellipse -->
<ellipse cx="50" cy="50" rx="40" ry="20" fill="#10b981"/>
<!-- Linie -->
<line x1="0" y1="0" x2="100" y2="100" stroke="#1e293b" stroke-width="2"/>
<!-- Polygon -->
<polygon points="50,10 90,90 10,90" fill="#f59e0b"/>
<!-- Polylinie (offene Form) -->
<polyline points="10,80 30,20 50,60 70,30 90,70" fill="none" stroke="#ef4444" stroke-width="3"/>
Pfade – die universelle Form
Das <path>-Element kann beliebige Formen über eine Minisprache aus Bewegen-, Linien-, Kurven- und Bogenbefehlen beschreiben:
<path d="M 10 80 Q 50 10 90 80" fill="none" stroke="#8b5cf6" stroke-width="3"/>
Pfadbefehle:
M x,y— Bewegen zu (Stift hoch)L x,y— Linie zuH x— Horizontale LinieV y— Vertikale LinieQ cx,cy x,y— Quadratische BézierkurveC cx1,cy1 cx2,cy2 x,y— Kubische BézierkurveA rx,ry rot large-arc sweep x,y— BogenZ— Pfad schließen
Pfade schreibt man selten von Hand – Design-Tools exportieren sie. Sie lesen zu können hilft jedoch beim Debuggen und Optimieren.
Das viewBox-Attribut: responsive SVGs
Das viewBox-Attribut ist der Schlüssel zu responsiven SVGs:
<svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
<!-- Inhalt wird in einem 200×100-Koordinatenraum gezeichnet -->
</svg>
Ohne width/height am Element füllt das SVG seinen Container wie ein responsives Bild. Setzt man in CSS width: 100%, skaliert es einwandfrei.
.logo svg {
width: 100%;
height: auto;
}
Drei Möglichkeiten, SVG im Web einzubinden
1. Externe Datei (<img>)
<img src="logo.svg" alt="Firmenlogo" width="200" height="80">
✅ Einfach, gecacht, funktioniert überall
❌ Kein CSS-Styling, kein Scripting
2. CSS-Hintergrund
.icon {
background-image: url('icon.svg');
background-size: contain;
width: 24px;
height: 24px;
}
✅ Gut für dekorative Icons
❌ Kein CSS-Styling der SVG-Interna, keine Barrierefreiheit
3. Inline SVG (am leistungsfähigsten)
<button>
<svg width="20" height="20" viewBox="0 0 20 20" aria-hidden="true">
<path d="M5 4l7 6-7 6" fill="none" stroke="currentColor" stroke-width="2"/>
</svg>
Weiter
</button>
✅ Volle CSS-Kontrolle, skriptfähig, nutzt currentColor zur Vererbung der Textfarbe
❌ Nicht gecacht, erhöht die HTML-Größe
Für Icons in UI-Komponenten ist Inline SVG die beste Wahl. Sprite-Sheets (ein einzelnes <svg> mit <symbol>-Elementen und <use>-Referenzen) ermöglichen Caching mit Gestaltbarkeit.
SVG mit CSS stylen
Inline SVGs reagieren auf CSS wie jedes HTML-Element:
.icon {
width: 24px;
height: 24px;
color: #3b82f6; /* steuert currentColor */
}
.icon:hover {
color: #1d4ed8;
}
Im SVG verwendet man currentColor anstelle von fest kodierten Farben:
<path fill="currentColor" d="..."/>
<path stroke="currentColor" d="..."/>
So wird die Icon-Farbe vollständig durch CSS gesteuert – Dark Mode, Hover-Zustände und Theming funktionieren einfach.
CSS-Animationen auf SVG
@keyframes spin {
to { transform: rotate(360deg); }
}
.spinner {
animation: spin 1s linear infinite;
transform-origin: center;
}
<svg viewBox="0 0 24 24">
<circle class="spinner" cx="12" cy="12" r="10"
fill="none" stroke="#3b82f6" stroke-width="2"
stroke-dasharray="31.4" stroke-dashoffset="10"/>
</svg>
stroke-dasharray und stroke-dashoffset sind die mächtigsten Animationseigenschaften von SVG – sie ermöglichen Zeichenanimationen, bei denen Pfade scheinbar von selbst gezeichnet werden.
SVG-Dateien optimieren
Design-Tools exportieren SVGs mit unnötigen Metadaten, Kommentaren und Editor-IDs. Ein typisches exportiertes SVG kann 15 KB groß sein; optimiert könnte es 3 KB sein.
Was entfernt werden sollte:
<?xml version="1.0"?>-Deklaration (bei Inline-Einbindung nicht benötigt)xmlns:xlink,xmlns:dc, Adobe/Inkscape-Metadaten-Namespacesid-Attribute, die nur vom Editor verwendet werden- Kommentare und Leerzeichen
- Redundante Gruppenelemente
<g> - Standard-Attributwerte (
fill="black",opacity="1")
Tools wie SVGO automatisieren das. Wenn du für Plattformen ohne SVG-Unterstützung eine Rasterversion benötigst, konvertiere sie mit unserem SVG to PNG-Konverter in PNG.
Barrierefreiheit
SVGs, die als bedeutungsvoller Inhalt eingesetzt werden, brauchen barrierefreie Beschreibungen:
<svg role="img" aria-labelledby="title desc">
<title id="title">Umsatzdiagramm</title>
<desc id="desc">Balkendiagramm, das den monatlichen Umsatz zeigt, der von 10.000 € im Januar auf 45.000 € im Juni 2026 gestiegen ist</desc>
<!-- Diagramminhalt -->
</svg>
Dekorative SVGs (Icons neben beschrifteten Buttons) sollten vor Screenreadern verborgen werden:
<svg aria-hidden="true" focusable="false">...</svg>
Kurzreferenz: nützliche SVG-Attribute
| Attribut | Funktion |
|---|---|
viewBox="x y w h" |
Definiert das Koordinatensystem |
fill |
Füllfarbe der Form (none, Hex, currentColor) |
stroke |
Konturfarbe |
stroke-width |
Konturstärke |
stroke-linecap |
Linienendenstil: butt, round, square |
stroke-linejoin |
Eckenstil: miter, round, bevel |
opacity |
Transparenz des Elements (0–1) |
transform |
translate(), rotate(), scale(), skew() |
clip-path |
Inhalt auf eine Form zuschneiden |
filter |
SVG-Filter anwenden (Blur, Schlagschatten usw.) |
SVG ist eines der am meisten unterschätzten Werkzeuge des Webs. Wer das Koordinatensystem und das Styling-Modell einmal verstanden hat, kann Icons, Illustrationen, Charts und Animationen erstellen, die in jeder Größe perfekt aussehen und dynamisch auf Benutzerinteraktionen reagieren.