SVG inline in HTML per creare un’icona responsive con accessibilità e fallback

by Anastasia P.
SHARE
SVG inline in HTML per creare un’icona responsive con accessibilità e fallback
© Guida-HTML5.it

Introduzione

Integrare SVG direttamente nell’HTML è una scelta molto utile quando vuoi controllare in modo preciso l’aspetto di una piccola icona, mantenerla nitida su qualsiasi schermo e renderla facilmente adattabile al contesto della pagina. In questo tutorial vediamo un sotto-argomento pratico: come costruire un’icona inline responsive, con testo alternativo accessibile e un fallback semplice.

Questo approccio è particolarmente interessante per pulsanti, link di navigazione, indicatori di stato e micro-interazioni. A differenza di un’immagine raster, un SVG non perde qualità quando viene ingrandito. Inoltre, essendo inserito direttamente nel markup HTML, puoi controllarlo con CSS, migliorare l’accessibilità e gestire un fallback per ambienti molto vecchi o casi particolari.

Nel tutorial useremo un’icona “salva” stilizzata, ma il metodo vale per molte altre icone. L’obiettivo non è solo “farla vedere”, ma farla bene: responsive, leggibile, semantica e robusta.

Codice completo

<button class="icon-button" type="button" aria-label="Salva documento">
  <svg
    class="icon"
    viewBox="0 0 24 24"
    role="img"
    aria-labelledby="icon-save-title icon-save-desc"
    xmlns="http://www.w3.org/2000/svg"
  >
    <title id="icon-save-title">Icona salva</title>
    <desc id="icon-save-desc">Un dischetto stilizzato che rappresenta il salvataggio del documento</desc>

    <path
      d="M5 3h11l3 3v15H5V3zm2 2v4h10V6.2L15.8 5H7zm0 6v7h10v-7H7zm2 1h6v3H9v-3z"
      fill="currentColor"
    />
  </svg>
  <span class="label">Salva</span>
</button>

<p class="fallback">
  Se il browser non supporta SVG, puoi usare un simbolo testuale: 💾 Salva
</p>

In un progetto reale, la parte SVG può essere affiancata da CSS per dimensioni, colore e allineamento. Anche senza mostrare qui un blocco di stile, il codice sopra è già completo dal punto di vista semantico e accessibile.

Spiegazione

1. Perché usare SVG inline

Quando l’SVG è scritto direttamente nell’HTML, hai diversi vantaggi:

  • Controllo totale su colore, dimensioni e comportamento.
  • Scalabilità perfetta grazie al viewBox.
  • Accessibilità migliorabile con title e desc.
  • Integrazione semplice con pulsanti, link e componenti UI.

Nel nostro esempio, l’icona è usata dentro un button. Questo è importante: se l’icona rappresenta un’azione, il contenitore deve essere un elemento interattivo nativo, non un semplice div.

2. Il ruolo di viewBox

Il cuore della reattività SVG è il viewBox. La sintassi viewBox="0 0 24 24" definisce un sistema di coordinate interno. In pratica, l’icona può essere ridimensionata senza perdere proporzioni.

Se il CSS imposta l’icona a 16px, 24px o 48px, il disegno resta nitido. Questo è il motivo per cui SVG è ideale per le icone UI.

3. Accessibilità: title, desc e aria-labelledby

Un SVG decorativo può essere nascosto agli screen reader, ma quando l’icona comunica un significato, serve una descrizione corretta. Nel codice abbiamo usato:

  • title: un nome breve dell’icona.
  • desc: una descrizione più esplicativa.
  • aria-labelledby: collega il titolo e la descrizione all’SVG.

Inoltre, il pulsante ha aria-label="Salva documento". Questo è utile perché il testo visibile “Salva” potrebbe non bastare in alcuni contesti, oppure potresti avere una versione solo icona. In generale, per i controlli interattivi, il nome accessibile deve essere chiaro e univoco.

4. currentColor per un’integrazione elegante

Nel path abbiamo usato fill="currentColor". È una best practice molto comoda: l’icona eredita il colore del testo del contenitore. Così puoi cambiare il tema del componente con una sola regola CSS.

Per esempio, se il bottone ha colore blu, l’SVG diventa blu automaticamente. Questo evita di scrivere valori fissi dentro il markup dell’icona.

5. Fallback semplice e realistico

Oggi il supporto SVG è ampiamente diffuso, ma un fallback resta utile in alcuni scenari:

  • ambienti molto vecchi;
  • contenuti esportati o trasformati;
  • strategie progressive enhancement;
  • casi in cui vuoi garantire sempre una rappresentazione minima.

Nel nostro esempio il fallback è un simbolo testuale: 💾 Salva. È una soluzione semplice, leggibile e coerente con il significato dell’icona. In molti casi questo è più utile di un fallback immagine generico.

6. Perché il contenitore testuale è importante

Abbiamo incluso anche uno span con la label “Salva”. Questo migliora la comprensione visiva e aiuta chi usa zoom, lettori di schermo o interfacce ad alta densità. Se in futuro vuoi mostrare solo l’icona su schermi piccoli, puoi farlo con CSS senza cambiare la struttura semantica.

Best practice

  • Usa SVG inline per icone piccole e ricorrenti, soprattutto se vuoi controllare colore e dimensioni con precisione.
  • Imposta sempre viewBox: senza di esso, la scalabilità diventa meno prevedibile.
  • Preferisci currentColor quando l’icona deve seguire il colore del testo o del componente.
  • Non usare SVG inline solo come decorazione se l’icona rappresenta un’azione: aggiungi nome accessibile e contesto.
  • Evita path troppo complessi per le icone UI: mantieni il disegno semplice e leggibile anche a dimensioni ridotte.
  • Non affidarti solo al colore per comunicare significato, soprattutto per stati come errore, successo o avviso.
  • Usa fallback testuali quando ha senso: un simbolo o una label possono essere più robusti di un’immagine di riserva.
  • Testa l’icona con zoom e screen reader: un SVG ben fatto deve restare comprensibile anche in condizioni non ideali.

Riepilogo

Integrare SVG inline in HTML è una soluzione molto efficace per costruire icone responsive e accessibili. In questo tutorial abbiamo visto come:

  • creare un’icona scalabile con viewBox;
  • renderla adattabile al tema usando currentColor;
  • renderla accessibile con title, desc e aria-labelledby;
  • inserirla in un controllo interattivo corretto, come un button;
  • aggiungere un fallback semplice e sensato.

Il punto chiave è questo: un’icona SVG non deve essere solo “bella”, ma deve essere anche coerente con l’interfaccia, leggibile e mantenibile. Quando progetti componenti UI, questa attenzione fa davvero la differenza.

Approfondisci con risorse ufficiali

  • MDN Web Docs - SVG: documentazione completa su elementi, attributi e comportamento di SVG.
  • MDN Web Docs - Accessibility: linee guida per rendere i contenuti fruibili a tutti.
  • W3C SVG Specification: specifica ufficiale del formato SVG.
  • WAI-ARIA Authoring Practices: best practice per componenti interattivi accessibili.
  • MDN - aria-labelledby: riferimento utile per collegare nomi e descrizioni accessibili.

Se vuoi, nel prossimo passo posso trasformare questo tutorial in una versione con CSS completo per rendere il bottone davvero responsive, con hover, focus visibile e variante dark mode.

SHARE