Animazioni SVG con CSS e JavaScript: Esempi di Codice per Sviluppatori (2026)
Esempi di codice pratici per animazioni SVG con CSS keyframes, GSAP, Framer Motion e JavaScript vanilla. Snippet pronti per la produzione per loader, transizioni, effetti hover e animazioni allo scroll.

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
Perché le Animazioni SVG Contano nel 2026
Le animazioni SVG sono diventate la spina dorsale delle interfacce web moderne. Dalle micro-interazioni sottili che guidano gli utenti in un flusso di checkout alle animazioni hero a schermo intero che definiscono l'identità di un brand, gli SVG animati offrono un movimento indipendente dalla risoluzione, leggero e accessibile che nessun altro formato può eguagliare.
A differenza delle animazioni raster (GIF, PNG animati o persino video), gli SVG si scalano perfettamente a qualsiasi dimensione di schermo, rimangono nitidi su display 4K e Retina, e possono essere manipolati con lo stesso CSS e JavaScript che già conosci. Nel 2026, con i Core Web Vitals che impattano direttamente sui ranking di ricerca, padroneggiare le animazioni SVG non è opzionale — è essenziale.
Questa guida ti accompagna attraverso ogni approccio principale per animare gli SVG, dal CSS puro alle librerie JavaScript avanzate, con esempi di codice pronti per la produzione ad ogni passo.
Fondamenti di Animazione CSS per SVG
CSS è il tuo primo e spesso migliore strumento per le animazioni SVG. Il thread compositor del browser gestisce le animazioni CSS sulle proprietà transform e opacity senza toccare il thread principale, offrendoti prestazioni fluide a 60fps gratuitamente.
Transizioni CSS: L'Approccio Più Semplice
/* Scala al hover su un'icona SVG */
.svg-icon {
transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
transform-origin: center;
}
.svg-icon:hover {
transform: scale(1.15);
}
.svg-icon path {
transition: fill 0.25s ease-in-out, stroke 0.25s ease-in-out;
fill: #6366f1;
}
.svg-icon:hover path {
fill: #818cf8;
}
Suggerimento: Imposta sempre transform-origin esplicitamente sugli elementi SVG. A differenza degli elementi HTML centrati di default, gli elementi SVG usano l'origine del viewport SVG (0, 0) di default.
Animazioni CSS Keyframes: Controllo Creativo Totale
@keyframes pulse {
0% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.4); opacity: 0.6; }
100% { transform: scale(1); opacity: 1; }
}
.notification-dot {
animation: pulse 2s ease-in-out infinite;
transform-origin: center;
}
@keyframes draw-path {
from { stroke-dashoffset: 1000; }
to { stroke-dashoffset: 0; }
}
.draw-line {
stroke-dasharray: 1000;
animation: draw-path 2.5s ease-out forwards;
}
La tecnica di disegno con stroke-dasharray è una delle animazioni SVG più popolari sul web. Funziona impostando la lunghezza del trattino uguale alla lunghezza totale del percorso, poi animando l'offset dal massimo a zero — creando l'illusione che il percorso venga disegnato in tempo reale.
Transform CSS: Il Sweet Spot delle Prestazioni
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes float-and-rotate {
0% { transform: translateY(0px) rotate(0deg); }
25% { transform: translateY(-10px) rotate(5deg); }
50% { transform: translateY(-18px) rotate(0deg); }
75% { transform: translateY(-10px) rotate(-5deg); }
100% { transform: translateY(0px) rotate(0deg); }
}
.floating-element {
animation: float-and-rotate 4s ease-in-out infinite;
transform-origin: center;
}
Le Proprietà Sicure per il Compositor: Solo transform e opacity sono garantite di essere eseguite sul thread compositor. Animare fill, stroke, width, height o d innesca ricalcoli del layout.
Approcci di Animazione JavaScript
Quando CSS raggiunge i suoi limiti — valori dinamici, trigger allo scroll, simulazioni fisiche o timeline complesse — JavaScript subentra.
La Web Animations API (WAAPI)
const logo = document.querySelector("#svg-logo");
const fadeIn = logo.animate(
[
{ opacity: 0, transform: "translateY(20px) scale(0.95)" },
{ opacity: 1, transform: "translateY(0) scale(1)" }
],
{
duration: 800,
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
fill: "forwards"
}
);
fadeIn.finished.then(() => {
console.log("Animazione del logo completata");
animateSubElements();
});
GSAP: La Libreria Standard dell'Industria
GreenSock Animation Platform (GSAP) resta la libreria di animazione più collaudata nel 2026. I suoi plugin specifici per SVG gestiscono casi limite che richiederebbero centinaia di righe di codice personalizzato.
import { gsap } from "gsap";
gsap.from("#hero-svg", {
opacity: 0, scale: 0.8, rotation: -5,
duration: 1.2, ease: "back.out(1.7)",
transformOrigin: "center center"
});
const tl = gsap.timeline({ defaults: { ease: "power2.out" } });
tl.from("#bg-circle", { scale: 0, duration: 0.6 })
.from("#icon-paths path", {
strokeDashoffset: 500, duration: 1, stagger: 0.15
}, "-=0.3")
.from("#label-text", { opacity: 0, y: 15, duration: 0.5 }, "-=0.5");
Animazioni SMIL: Ancora Vive, Ma da Usare con Parsimonia
<svg viewBox="0 0 100 100">
<circle cx="50" cy="50" r="20" fill="#6366f1">
<animate attributeName="r" values="20;25;20" dur="2s" repeatCount="indefinite" />
<animate attributeName="opacity" values="1;0.6;1" dur="2s" repeatCount="indefinite" />
</circle>
</svg>
Ottimizzazione delle Prestazioni in Dettaglio
La Regola del Thread Compositor
/* BENE: Animazioni sul thread compositor */
.optimized {
transition: transform 0.3s, opacity 0.3s;
}
.optimized:hover {
transform: translateY(-4px) scale(1.02);
opacity: 0.9;
}
/* MALE: Animazioni sul thread principale */
.unoptimized {
transition: top 0.3s, width 0.3s, fill 0.3s;
}
Ridurre la Complessità SVG
- Semplifica i percorsi: Usa strumenti come SVGO o l'ottimizzatore integrato di VectoSolve
- Rimuovi elementi nascosti
- Appiattisci i gruppi: L'annidamento inutile di
<g>aggiunge overhead - Usa simboli per forme ripetute
Accessibilità: Rispettare le Preferenze dell'Utente
Non tutti vogliono o possono tollerare il movimento sullo schermo. Gli utenti con disturbi vestibolari o sensibilità al movimento hanno un'impostazione di sistema che devi rispettare.
.animated-element {
animation: slide-in 0.6s ease-out forwards;
}
@media (prefers-reduced-motion: reduce) {
.animated-element {
animation: none;
opacity: 1;
}
}
const prefersReduced = window.matchMedia(
"(prefers-reduced-motion: reduce)"
).matches;
if (prefersReduced) {
element.style.opacity = "1";
} else {
element.animate(
[{ opacity: 0 }, { opacity: 1 }],
{ duration: 600, easing: "ease-out" }
);
}
Il Criterio di Successo WCAG 2.2 2.3.3 raccomanda che l'animazione di movimento attivata dall'interazione possa essere disabilitata. È sempre più un requisito legale.
CSS vs JavaScript vs IA: Scegliere l'Approccio Giusto
| Criterio | Animazioni CSS | JavaScript (WAAPI/GSAP) | IA (VectoSolve) |
|---|---|---|---|
| Complessità setup | Zero dipendenze | Minima a moderata | Upload e configura |
| Prestazioni | Eccellenti | Eccellenti / Molto buone | Eccellenti |
| Valori dinamici | Limitati | Controllo totale | Determinati dall'IA |
| Morphing percorsi | Non supportato | Richiede libreria | Integrato |
| Ideale per | Hover, loop, transizioni | Interazioni complesse, data viz | Prototipazione rapida |
Regola d'oro: Inizia con CSS. Passa a WAAPI quando serve controllo programmatico. Usa GSAP per timeline e morphing. Usa strumenti IA quando serve velocità.
Integrazione Framework: React e Next.js
import { useRef, useEffect } from "react";
function AnimatedIcon({ isActive }) {
const pathRef = useRef(null);
useEffect(() => {
const path = pathRef.current;
if (!path) return;
const prefersReduced = window.matchMedia(
"(prefers-reduced-motion: reduce)"
).matches;
if (prefersReduced) {
path.style.strokeDashoffset = "0";
return;
}
const length = path.getTotalLength();
path.style.strokeDasharray = length;
path.style.strokeDashoffset = length;
const animation = path.animate(
[{ strokeDashoffset: length }, { strokeDashoffset: 0 }],
{ duration: 1200, easing: "ease-out", fill: "forwards" }
);
return () => animation.cancel();
}, [isActive]);
return (
<svg viewBox="0 0 64 64" role="img" aria-label="Stato">
<path ref={pathRef} d="M18 44 L26 32 L34 38 L46 20"
fill="none" stroke="currentColor" strokeWidth="2.5"
strokeLinecap="round" />
</svg>
);
}
Punti Chiave e Prossimi Passi
- Inizia con CSS per effetti hover semplici, stati di caricamento e animazioni in loop
- Passa alla Web Animations API quando serve controllo dinamico o manipolazione della riproduzione
- Adotta GSAP per timeline complesse, animazioni allo scroll e morphing SVG
- Considera strumenti IA come l'animatore SVG di VectoSolve per prototipazione rapida
- Ottimizza sempre usando proprietà compositor-safe e rispettando
prefers-reduced-motion
La migliore animazione SVG è quella che l'utente nota appena — sembra naturale, si carica istantaneamente e si degrada con grazia per chi preferisce la quiete.
| Proprietà | Compositor (Veloce) | Attiva Layout (Lento) |
|---|---|---|
| transform | Sì — accelerato GPU | No |
| opacity | Sì — accelerato GPU | No |
| width / height | No | Sì — attiva reflow |
| top / left | No | Sì — attiva reflow |
| fill / stroke | No | Solo repaint (moderato) |