Quando usare SVG e quando usare Canvas
SVG e Canvas sono entrambe tecnologie in grado di disegnare elementi nei browser Web, quindi vale la pena confrontarli e comprenderli quando uno è più adatto dell’altro.
- Una piccola icona a colori piatti? Questo è chiaramente il territorio SVG.
- Un gioco interattivo simile a una console? Questo è chiaramente il territorio del canvas.
SVG è vettoriale e dichiarativo
Se sai che hai bisogno di arte vettoriale, SVG è la scelta. L’arte vettoriale è visivamente nitida e tende ad avere una dimensione del file inferiore rispetto alla grafica raster come JPG.
Ciò rende i loghi un caso d’uso SVG molto comune. Il codice SVG può andare direttamente all’interno di HTML e sono come istruzioni di disegno dichiarative.
Se ti preoccupi molto della flessibilità e della reattività della grafica, SVG è la soluzione.
Canvas è un’API di disegno JavaScript
Inserisci un elemento <canvas>
in HTML, quindi esegui il disegno in JavaScript. In altre parole, impartisci comandi per dirgli come disegnare (che è più imperativo che dichiarativo ).
SVG è nel DOM
Se hai familiarità con eventi DOM come click
e mouseDown
e quant’altro, questi sono disponibili anche in SVG. Un <circle>
non è terribilmente diverso da un <div>
in questo senso.
SVG per accessibilità
Poiché SVG può essere proprio nel DOM, generalmente pensiamo che SVG sia ciò che usi se stai cercando di creare un’esperienza accessibile. Spiegato in un altro modo, è possibile creare un SVG a cui la tecnologia assistiva possa accedere e trovare collegamenti e elementi secondari con le proprie spiegazioni uditive e simili.
Il testo è anche saldamente nel territorio SVG. SVG ha letteralmente un elemento <text>
accessibile e visivamente nitido, a differenza del canvas in cui il testo è generalmente sfocato.
Canvas per pixel
Il lavoro altamente interattivo con molti dettagli e sfumature complesse è il territorio del canvas. Per questo motivo vedrai molti più giochi creati con canvas di SVG per questo motivo.
CSS può lavorare con SVG
Abbiamo visto sopra che SVG può essere nel DOM e che JavaScript può entrare e fare cose. La storia è simile con i CSS.
Supponendo che tu abbia inserito letteralmente SVG nel HTML, potresti spostarlo o fare in modo che altri CSS esterni e JavaScript facciano la stessa cosa.
Ciò che è bello sapere è che le cose in cui CSS è eccezionale sono possibili in SVG, come stati :hover
e animazioni!
Combinazioni
Tecnicamente, non si escludono completamente a vicenda. Un <svg>
può essere dipinto in un <canvas>
.
DOM / DOM virtuale | CANVAS | |
---|---|---|
Pro | ||
Ottimo per l’animazione UI / UX | Danza pixel, danza! | |
Ottimo per SVG indipendente dalla risoluzione | Ottimo per contenuti 3D davvero coinvolgenti o coinvolgenti | |
Più facile da eseguire il debug | Movimento di tonnellate di oggetti | |
Contro | ||
Carri armati con molti oggetti | Più difficile da rendere accessibile | |
Perché devi preoccuparti del modo in cui animi | Non indipendente dalla risoluzione | |
Non si rompe nel nulla |
SVG | CANVAS | |
---|---|---|
Pro | Facile da iniziare | Molto performante |
Più facile registrare le interazioni dell’utente | Facile da aggiornare | |
Facile da animare | ||
Contro | DOM potenzialmente complesso | Più lavoro per iniziare |
Non performante per un gran numero di elementi | Più lavoro per gestire le interazioni | |
Devi scrivere animazioni personalizzate |
Conclusione
Quindi, se rivisitiamo quei primi due punti …
- Una piccola icona a colori piatti? SVG entra nel DOM, quindi qualcosa come un’icona all’interno di un pulsante ha molto senso per SVG per non parlare del fatto che può essere controllato con CSS e avere gestori di eventi JavaScript
- Un gioco interattivo simile a una console? Ciò avrà molti elementi in movimento, animazioni e interazioni complesse, considerazioni sulle prestazioni. Queste sono cose che eccelle il canvas.