SVG-Sprite-Systeme: Effizientes Icon-Management
Erstelle effiziente SVG-Sprite-Systeme für große Anwendungen. Lerne Sprite-Generierung, Nutzungsmuster und Performance-Optimierungstechniken.
Founder of VectoSolve
Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.
How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author
Key Takeaways
- SVG-Sprites kombinieren Dutzende von Icons in einer einzigen HTTP-Anfrage und reduzieren den Netzwerk-Overhead drastisch
-
Das
<symbol>+<use>-Muster ermöglicht es, Icons einmal zu definieren und überall auf der Seite zu referenzieren - Externe Sprites eignen sich am besten für große Apps (cachebar), während Inline-Sprites für kleinere Seiten geeignet sind (keine Latenz)
- Style Sprites mit CSS Custom Properties für konsistente Größen, Farbthemen und Hover-Zustände
-
Füge immer
aria-hidden="true"zu dekorativen Icons undrole="img"mit<title>zu bedeutungsvollen Icons hinzu
Warum SVG-Sprites?
Einzelne SVG-Dateien bedeuten separate HTTP-Anfragen. Sprite-Systeme kombinieren Icons in einzelne Dateien, verbessern die Performance und vereinfachen das Management.
Vorteile des Sprite-Systems
Performance
Einzelne Icons:
50 Icons x 1 Anfrage = 50 Anfragen
SVG-Sprite:
50 Icons = 1 Anfrage
Management
Vorteile:
- Eine einzige Wahrheitsquelle
- Einfache Updates
- Konsistentes Styling
- Versionskontrollfreundlich
Sprite-Typen
Externer Sprite
Separate referenzierte Datei:
<!-- sprites.svg -->
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="icon-home" viewBox="0 0 24 24">
<path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/>
</symbol>
<symbol id="icon-search" viewBox="0 0 24 24">
<path d="M15.5 14h-.79l-.28-.27..."/>
</symbol>
</svg>
<!-- Verwendung -->
<svg class="icon">
<use href="/sprites.svg#icon-home"/>
</svg>
Inline-Sprite
In HTML eingebettet:
<body>
<!-- Versteckter Sprite-Container -->
<svg style="display: none;">
<symbol id="icon-home" viewBox="0 0 24 24">
<path d="..."/>
</symbol>
<!-- weitere Symbole -->
</svg>
<!-- Verwendung überall auf der Seite -->
<svg class="icon">
<use href="#icon-home"/>
</svg>
</body>
CSS-Hintergrund-Sprite
Data-URI-Ansatz:
.icon-home {
background-image: url("data:image/svg+xml,...");
}
Pro Tip: Bevorzuge Inline-Sprites für Above-the-Fold-Icons, die sofort gerendert werden müssen, und externe Sprites für große Icon-Sets, die vom Browser-Caching zwischen Seitennavigationen profitieren.
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual DealSprites Erstellen
Manuelle Erstellung
Struktur:
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<!-- Geteilte Styles -->
<style>
.icon-stroke { stroke-width: 2; fill: none; }
</style>
</defs>
<symbol id="icon-1" viewBox="0 0 24 24">
<!-- Icon-Pfade -->
</symbol>
<symbol id="icon-2" viewBox="0 0 24 24">
<!-- Icon-Pfade -->
</symbol>
</svg>
Automatisierte Generierung
Mit svg-sprite:
// gulpfile.js
const svgSprite = require('gulp-svg-sprite');
gulp.task('sprite', () => {
return gulp.src('icons/*.svg')
.pipe(svgSprite({
mode: {
symbol: {
dest: '.',
sprite: 'sprites.svg'
}
}
}))
.pipe(gulp.dest('dist'));
});
Webpack-Integration
// webpack.config.js
const SpriteLoaderPlugin = require('svg-sprite-loader/plugin');
module.exports = {
module: {
rules: [{
test: /\.svg$/,
use: [{
loader: 'svg-sprite-loader',
options: { extract: true }
}]
}]
},
plugins: [new SpriteLoaderPlugin()]
};
Nutzungsmuster
Grundlegende Verwendung
<svg class="icon icon-home" aria-hidden="true">
<use href="#icon-home"/>
</svg>
React-Komponente
function Icon({ name, size = 24, className }) {
return (
<svg
className={`icon ${className}`}
width={size}
height={size}
aria-hidden="true"
>
<use href={`#icon-${name}`}/>
</svg>
);
}
// Verwendung
<Icon name="home" size={20} className="nav-icon"/>
Vue-Komponente
<template>
<svg :class="['icon', className]" :width="size" :height="size">
<use :href="`#icon-${name}`"/>
</svg>
</template>
<script>
export default {
props: {
name: String,
size: { type: Number, default: 24 },
className: String
}
}
</script>
"Ein gut aufgebautes SVG-Sprite-System ist das Rückgrat jedes skalierbaren Design-Systems. Es ist das einzige Asset, das jede Seite und jede Komponente berührt.
Sprites Stylen
CSS-Styling
.icon {
width: 24px;
height: 24px;
fill: currentColor;
}
.icon-primary {
fill: var(--color-primary);
}
.icon-lg {
width: 32px;
height: 32px;
}
CSS Custom Properties
:root {
--icon-size: 24px;
--icon-color: currentColor;
}
.icon {
width: var(--icon-size);
height: var(--icon-size);
fill: var(--icon-color);
}
.icon-lg { --icon-size: 32px; }
.icon-danger { --icon-color: #dc3545; }
Stroke-Icons
.icon-stroke {
fill: none;
stroke: currentColor;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
}
Free SVG Tools for Crafters
Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG
Check Your SVG FreeBarrierefreiheit
Dekorative Icons
<button>
<svg class="icon" aria-hidden="true">
<use href="#icon-settings"/>
</svg>
Einstellungen
</button>
Bedeutungsvolle Icons
<a href="/home">
<svg class="icon" role="img" aria-label="Startseite">
<title>Startseite</title>
<use href="#icon-home"/>
</svg>
</a>
Performance-Optimierung
Caching-Strategie
<!-- Externen Sprite vorladen -->
<link rel="preload" href="/sprites.svg" as="image" type="image/svg+xml">
Code-Splitting
// Sprite bei Bedarf laden
async function loadSprite() {
const response = await fetch('/sprites.svg');
const svg = await response.text();
document.body.insertAdjacentHTML('afterbegin', svg);
}
Sprite-Teilmengen
Erstelle kleinere Sprites pro Bereich:
/sprites
/navigation-icons.svg
/social-icons.svg
/editor-icons.svg
Für Anwendungen mit über 100 Icons, teile Sprites nach Seitenbereich oder Funktionsbereich auf. Dies vermeidet das Laden von Editor-Icons auf Seiten, die nur Navigations-Icons benötigen, und hält den initialen Payload klein.
Große Icon-Sets Verwalten
Organisation
/icons
/navigation
home.svg
menu.svg
/actions
edit.svg
delete.svg
/social
twitter.svg
facebook.svg
Dokumentation
Generiere eine Icon-Referenz:
<div class="icon-grid">
<div class="icon-item">
<svg><use href="#icon-home"/></svg>
<span>home</span>
</div>
<!-- ... -->
</div>
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual DealVectoSolve für Icon-Sets
Icon-Konvertierung
Verwende VectoSolve um Icons zu erstellen:
- Quellbilder konvertieren
- Bereinigen und optimieren
- In Sprite kombinieren
- Deployen
Konsistente Ausgabe
VectoSolve bietet:
- Saubere Pfade
- Konsistente viewBox
- Optimierte Ausgabe
- Bereit für Sprites
Fazit
SVG-Sprite-Systeme verbessern das Icon-Management und die Performance dramatisch. Wähle den richtigen Ansatz für dein Projekt — Inline für kleinere Sets, extern für größere Anwendungen. Verwende VectoSolve um saubere, konsistente Icons zu erstellen, die für die Sprite-Integration bereit sind.