1. Inline-SVG-Komponenten
Jedes Icon in eine Komponente umzuwandeln (genau das automatisiert diese Seite) gibt dir volle Kontrolle: Icons übernehmen Farben per currentColor, akzeptieren Props wie size und className und lassen sich mit CSS oder einer Motion-Bibliothek animieren. Bundler entfernen ungenutzte Komponenten per Tree Shaking, sodass nur importierte Icons ausgeliefert werden.
Der Nachteil: Das Markup wird Teil deines JavaScript-Bundles. Bei ein paar Dutzend kleinen Icons ist das vernachlässigbar, bei Hunderten komplexer Illustrationen nicht.
2. img-Tags und CSS-Hintergründe
<img src="/logo.svg" alt="Firma"> ist die einfachste Variante, und der Browser kann die Datei cachen. Das SVG ist jedoch von deinem CSS isoliert, sodass du die Farbe weder beim Hover noch im Dark Mode ändern kannst. Nutze das für Logos und Illustrationen, die sich nie ändern.
3. SVGR und Build-Zeit-Loader
SVGR (über @svgr/webpack oder vite-plugin-svgr) wandelt .svg-Imports beim Build in Komponenten um. Das ist bequem für große Icon-Ordner, erfordert aber zusätzliche Build-Konfiguration und kann sich zwischen Bundlern und Turbopack unterschiedlich verhalten. Eine einmalige Umwandlung mit diesem Tool liefert die gleiche Art Komponente als eingecheckten Quellcode.
4. SVG-Sprites und 5. Icon-Bibliotheken
Ein Sprite bündelt viele <symbol>-Elemente in einer Datei und referenziert sie mit <use href="#icon">. Das hält das HTML schlank, erschwert aber serverseitiges Rendering. Icon-Bibliotheken wie Lucide, Heroicons oder Phosphor liefern fertige Komponenten und sind ideal, wenn ihr Stil zu deinem Design passt.
Egal welche Methode du wählst – beachte diese Regeln zur Barrierefreiheit:
- Dekorative Icons neben Text erhalten aria-hidden="true".
- Alleinstehende Icons, etwa ein reiner Icon-Button, brauchen einen zugänglichen Namen per aria-label am Button oder einen <title> im SVG.
- Behalte eine viewBox und gib Icon-Größen in em oder rem an, damit sie mit der Schriftgröße der Nutzer skalieren.
- Sorge bei bedeutungstragenden Icons für ein Kontrastverhältnis von mindestens 3:1 (WCAG 1.4.11).