Skip to content
Technical

Sistemi di Sprite SVG: Gestione Efficiente delle Icone

Crea sistemi di sprite SVG efficienti per applicazioni su larga scala. Impara generazione di sprite, pattern di utilizzo e tecniche di ottimizzazione delle prestazioni.

Robin Monteiro27 gennaio 202610 ottobre 20266 min
Use this article with an AI assistant:
.md
Sistemi di Sprite SVG: Gestione Efficiente delle Icone
R
Robin Monteiro

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

Image vectorizationCutting machine filesEmbroidery filesSVG
Free previewNo signupFull-quality output

Key Takeaways

  • Gli sprite SVG combinano decine di icone in una singola richiesta HTTP, riducendo drasticamente il sovraccarico di rete
  • Il pattern <symbol> + <use> permette di definire le icone una volta e referenziarle ovunque nella pagina
  • Gli sprite esterni sono migliori per app grandi (cacheable), mentre gli sprite inline sono adatti a siti più piccoli (latenza zero)
  • Stilizza gli sprite con proprietà personalizzate CSS per dimensioni coerenti, temi di colore e stati hover
  • Aggiungi sempre aria-hidden="true" alle icone decorative e role="img" con <title> a quelle significative

Perché gli Sprite SVG?

File SVG individuali significano richieste HTTP separate. I sistemi di sprite combinano le icone in file unici, migliorando le prestazioni e semplificando la gestione.

Fogli di sprite SVG e architettura del sistema di icone
Sprite SVG: un file, decine di icone, una singola richiesta HTTP

Vantaggi del Sistema di Sprite

Prestazioni

Icone Individuali:
50 icone x 1 richiesta = 50 richieste

Sprite SVG:
50 icone = 1 richiesta

Gestione

Vantaggi:

  • Fonte unica di verità
  • Aggiornamenti facili
  • Stile coerente
  • Compatibile con il controllo versione

Tipi di Sprite

Sprite Esterno

File separato referenziato:

html
<!-- 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>

<!-- Utilizzo -->
<svg class="icon">
  <use href="/sprites.svg#icon-home"/>
</svg>

Sprite Inline

Incorporato nell'HTML:

html
<body>
  <!-- Container sprite nascosto -->
  <svg style="display: none;">
    <symbol id="icon-home" viewBox="0 0 24 24">
      <path d="..."/>
    </symbol>
    <!-- altri simboli -->
  </svg>

  <!-- Utilizzo ovunque nella pagina -->
  <svg class="icon">
    <use href="#icon-home"/>
  </svg>
</body>

Sprite CSS di Sfondo

Approccio Data URI:

css
.icon-home {
  background-image: url("data:image/svg+xml,...");
}

Pro Tip: Preferisci sprite inline per le icone above-the-fold che devono renderizzarsi istantaneamente, e sprite esterni per grandi set di icone che beneficiano del cache del browser tra le navigazioni.


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 Deal

Creazione di Sprite

Creazione Manuale

Struttura:

xml
<svg xmlns="http://www.w3.org/2000/svg">
  <defs>
    <style>
      .icon-stroke { stroke-width: 2; fill: none; }
    </style>
  </defs>
  <symbol id="icon-1" viewBox="0 0 24 24"></symbol>
  <symbol id="icon-2" viewBox="0 0 24 24"></symbol>
</svg>

Generazione Automatizzata

Usando svg-sprite:

javascript
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'));
});

Integrazione Webpack

javascript
const SpriteLoaderPlugin = require('svg-sprite-loader/plugin');
module.exports = {
  module: { rules: [{ test: /\.svg$/, use: [{ loader: 'svg-sprite-loader', options: { extract: true } }] }] },
  plugins: [new SpriteLoaderPlugin()]
};

Pattern di Utilizzo

Utilizzo Base

html
<svg class="icon icon-home" aria-hidden="true"><use href="#icon-home"/></svg>

Componente React

jsx
function Icon({ name, size = 24, className }) {
  return (
    <svg className={`icon ${className}`} width={size} height={size} aria-hidden="true">
      <use href={`#icon-${name}`}/>
    </svg>
  );
}
<Icon name="home" size={20} className="nav-icon"/>

Componente Vue

vue
<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>
"

Un sistema di sprite SVG ben costruito è la spina dorsale di qualsiasi sistema di design scalabile. È l'unico asset che tocca ogni pagina e ogni componente.

— Sarah Drasner, Engineering Director & Specialista SVG

Stilizzare gli Sprite

Stile CSS

css
.icon { width: 24px; height: 24px; fill: currentColor; }
.icon-primary { fill: var(--color-primary); }
.icon-lg { width: 32px; height: 32px; }

Proprietà Personalizzate CSS

css
: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; }

Icone Stroke

css
.icon-stroke { fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
Icone SVG ottimizzate per web app e sistemi di design
Stilizzare sprite SVG con proprietà personalizzate CSS per token di design coerenti

Free SVG Tools for Crafters

Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG

Check Your SVG Free

Accessibilità

Icone Decorative

html
<button><svg class="icon" aria-hidden="true"><use href="#icon-settings"/></svg> Impostazioni</button>

Icone Significative

html
<a href="/home"><svg class="icon" role="img" aria-label="Home"><title>Home</title><use href="#icon-home"/></svg></a>

Ottimizzazione delle Prestazioni

Strategia di Cache

html
<link rel="preload" href="/sprites.svg" as="image" type="image/svg+xml">

Divisione del Codice

javascript
async function loadSprite() {
  const response = await fetch('/sprites.svg');
  const svg = await response.text();
  document.body.insertAdjacentHTML('afterbegin', svg);
}

Sotto-insiemi di Sprite

Crea sprite più piccoli per sezione:

/sprites
  /navigation-icons.svg
  /social-icons.svg
  /editor-icons.svg

Per applicazioni con oltre 100 icone, dividi gli sprite per sezione della pagina o area funzionale. Questo evita di caricare icone dell'editor su pagine che necessitano solo di icone di navigazione.


Gestire Grandi Set di Icone

Organizzazione

/icons
  /navigation
    home.svg
    menu.svg
  /actions
    edit.svg
    delete.svg
  /social
    twitter.svg
    facebook.svg

Documentazione

html
<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 Deal

VectoSolve per Set di Icone

Usa VectoSolve per creare icone:

  1. Converti immagini sorgente
  2. Pulisci e ottimizza
  3. Combina in sprite
  4. Distribuisci

VectoSolve fornisce: cammini puliti, viewBox coerente, output ottimizzato, pronto per sprite.


Conclusione

I sistemi di sprite SVG migliorano drasticamente la gestione delle icone e le prestazioni. Scegli l'approccio giusto — inline per set piccoli, esterno per applicazioni grandi. Usa VectoSolve per creare icone pulite e coerenti pronte per l'integrazione in sprite.

Crea il Tuo Set di Icone

Tags:
sprite svg
icone
prestazioni
sviluppo web
componenti
Share:

Try VectoSolve Now

Convert your images to high-quality SVG vectors with AI

AI-Powered Vectorization

Ready to vectorize your images?

Convert your PNG, JPG, and other images to high-quality, scalable SVG vectors in seconds.