{"id":164048,"date":"2025-04-14T09:00:00","date_gmt":"2025-04-14T07:00:00","guid":{"rendered":"https:\/\/gtechgroup.it\/blog\/svg-html-grafica-vettoriale-scalabile\/"},"modified":"2025-04-14T09:00:00","modified_gmt":"2025-04-14T07:00:00","slug":"svg-html-grafica-vettoriale-scalabile","status":"publish","type":"post","link":"https:\/\/gtechgroup.it\/blog\/svg-html-grafica-vettoriale-scalabile\/","title":{"rendered":"SVG in HTML: Grafica Vettoriale Scalabile per il Web"},"content":{"rendered":"<p style=\"text-align: justify;\">La <strong>Scalable Vector Graphics<\/strong> (SVG) \u00e8 un formato di immagine basato su XML che descrive la grafica attraverso forme geometriche, testo e percorsi matematici anzich\u00e9 pixel. Questa natura vettoriale rende le immagini SVG perfettamente scalabili a qualsiasi dimensione senza perdita di qualit\u00e0, un vantaggio cruciale nell&#8217;era dei display ad alta densit\u00e0 e del responsive design. In questa guida vedremo come integrare e sfruttare SVG all&#8217;interno delle pagine HTML.<\/p>\n<h2>SVG Inline vs SVG Esterno<\/h2>\n<p style=\"text-align: justify;\">Esistono diversi modi per includere un&#8217;immagine SVG in una pagina HTML, ognuno con vantaggi e limitazioni specifici. La scelta del metodo dipende dalle esigenze di interattivit\u00e0, performance e manutenibilit\u00e0 del progetto.<\/p>\n<p style=\"text-align: justify;\">L&#8217;<strong>SVG inline<\/strong> consiste nell&#8217;inserire il codice SVG direttamente nel markup HTML, utilizzando il tag <code>&lt;svg&gt;<\/code> come un qualsiasi altro elemento HTML. Questo approccio offre il massimo controllo: \u00e8 possibile stilizzare ogni elemento con CSS, manipolarlo con JavaScript, animarlo e renderlo interattivo. Lo svantaggio principale \u00e8 che il codice SVG non viene memorizzato nella cache separatamente e aumenta le dimensioni del documento HTML.<\/p>\n<p style=\"text-align: justify;\">L&#8217;<strong>SVG come immagine esterna<\/strong> si include tramite il tag <code>&lt;img&gt;<\/code> con l&#8217;attributo src che punta al file .svg. Questo metodo \u00e8 il pi\u00f9 semplice e permette la cache del file, ma limita le possibilit\u00e0 di interazione: non \u00e8 possibile stilizzare i singoli elementi dell&#8217;SVG con CSS esterno n\u00e9 manipolarli con JavaScript. \u00c8 il metodo ideale per illustrazioni decorative che non richiedono interattivit\u00e0.<\/p>\n<p style=\"text-align: justify;\">L&#8217;SVG pu\u00f2 essere incluso anche come <strong>sfondo CSS<\/strong> tramite background-image, come oggetto incorporato tramite <code>&lt;object&gt;<\/code> (che permette l&#8217;interattivit\u00e0 ma \u00e8 meno comune), o come riferimento <code>&lt;use&gt;<\/code> per sistemi di icone sprite. Il tag <code>&lt;object&gt;<\/code> \u00e8 particolarmente utile quando si necessita di interattivit\u00e0 con SVG esterni, poich\u00e9 permette l&#8217;accesso al DOM interno dell&#8217;SVG tramite JavaScript.<\/p>\n<h2>Elementi SVG Fondamentali<\/h2>\n<p style=\"text-align: justify;\">SVG definisce un ricco set di <strong>elementi geometrici<\/strong> per la costruzione di grafiche. Gli elementi base includono forme primitive che possono essere combinate per creare composizioni complesse:<\/p>\n<ul>\n<li><strong>&lt;rect&gt;<\/strong>: rettangolo definito da posizione (x, y), dimensioni (width, height) e opzionalmente angoli arrotondati (rx, ry)<\/li>\n<li><strong>&lt;circle&gt;<\/strong>: cerchio definito dal centro (cx, cy) e dal raggio (r)<\/li>\n<li><strong>&lt;ellipse&gt;<\/strong>: ellisse definita dal centro (cx, cy) e dai raggi orizzontale (rx) e verticale (ry)<\/li>\n<li><strong>&lt;line&gt;<\/strong>: linea tra due punti (x1, y1) e (x2, y2)<\/li>\n<li><strong>&lt;polyline&gt;<\/strong>: serie di segmenti collegati definiti dall&#8217;attributo points<\/li>\n<li><strong>&lt;polygon&gt;<\/strong>: come polyline ma con chiusura automatica della forma<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">L&#8217;elemento pi\u00f9 versatile \u00e8 <code>&lt;path&gt;<\/code>, che utilizza un mini-linguaggio di comandi nell&#8217;attributo <strong>d<\/strong> per definire percorsi arbitrari. I comandi principali sono: <strong>M<\/strong> (moveTo) per spostare il cursore, <strong>L<\/strong> (lineTo) per tracciare una linea, <strong>C<\/strong> per curve di B\u00e9zier cubiche, <strong>Q<\/strong> per curve quadratiche, <strong>A<\/strong> per archi ellittici e <strong>Z<\/strong> per chiudere il percorso. I comandi maiuscoli usano coordinate assolute, quelli minuscoli coordinate relative.<\/p>\n<p style=\"text-align: justify;\">L&#8217;elemento <code>&lt;text&gt;<\/code> permette di inserire testo all&#8217;interno dell&#8217;SVG, con il vantaggio che il testo rimane selezionabile e indicizzabile dai motori di ricerca. Gli attributi x, y posizionano il testo, mentre font-family, font-size e font-weight controllano l&#8217;aspetto tipografico.<\/p>\n<h2>L&#8217;Attributo viewBox e il Sistema di Coordinate<\/h2>\n<p style=\"text-align: justify;\">Il <strong>viewBox<\/strong> \u00e8 uno degli aspetti pi\u00f9 importanti e spesso fraintesi di SVG. Definisce il sistema di coordinate interno dell&#8217;SVG attraverso quattro valori: min-x, min-y, width e height. In combinazione con gli attributi width e height dell&#8217;elemento <code>&lt;svg&gt;<\/code>, il viewBox controlla come il contenuto viene scalato e posizionato.<\/p>\n<p style=\"text-align: justify;\">Quando le proporzioni del viewBox non corrispondono a quelle dell&#8217;elemento SVG, l&#8217;attributo <strong>preserveAspectRatio<\/strong> determina il comportamento di adattamento. Il valore predefinito &#8220;xMidYMid meet&#8221; centra il contenuto mantenendo le proporzioni e facendolo rientrare completamente nell&#8217;area di visualizzazione. Il valore &#8220;none&#8221; distorce il contenuto per riempire l&#8217;intera area, mentre &#8220;xMidYMid slice&#8221; mantiene le proporzioni ma ritaglia il contenuto eccedente.<\/p>\n<p style=\"text-align: justify;\">Per creare SVG <strong>responsive<\/strong>, la tecnica pi\u00f9 efficace \u00e8 definire il viewBox e rimuovere gli attributi width e height dall&#8217;elemento SVG, impostandoli invece tramite CSS. In questo modo, l&#8217;SVG si adatta automaticamente alle dimensioni del suo contenitore, mantenendo le proporzioni definite dal viewBox. Questa \u00e8 la stessa tecnica che rende le icone SVG scalabili perfettamente a qualsiasi dimensione.<\/p>\n<h2>Stilizzare SVG con CSS<\/h2>\n<p style=\"text-align: justify;\">Quando un SVG \u00e8 inserito inline nel documento HTML, ogni suo elemento pu\u00f2 essere stilizzato con CSS, utilizzando selettori, classi e propriet\u00e0 come per qualsiasi altro elemento HTML. Tuttavia, le propriet\u00e0 CSS per SVG differiscono in parte da quelle standard.<\/p>\n<p style=\"text-align: justify;\">Le propriet\u00e0 principali per la colorazione sono <strong>fill<\/strong> (equivalente a background-color, controlla il colore di riempimento), <strong>stroke<\/strong> (equivalente a border-color, controlla il colore del contorno) e <strong>stroke-width<\/strong> (lo spessore del contorno). La propriet\u00e0 <strong>opacity<\/strong> e le sue varianti fill-opacity e stroke-opacity controllano la trasparenza.<\/p>\n<p style=\"text-align: justify;\">\u00c8 possibile applicare <strong>transizioni e animazioni CSS<\/strong> agli elementi SVG, rendendo possibile creare effetti hover, cambi di colore graduali e animazioni sofisticate senza JavaScript. Ad esempio, un&#8217;icona SVG inline pu\u00f2 cambiare colore al passaggio del mouse semplicemente definendo una regola CSS con :hover che modifica la propriet\u00e0 fill.<\/p>\n<p style=\"text-align: justify;\">CSS offre anche propriet\u00e0 specifiche per SVG come stroke-dasharray (per linee tratteggiate) e stroke-dashoffset (per animare il tratto delle linee), che permettono di creare il popolare effetto di &#8220;disegno progressivo&#8221; di un percorso SVG. Questo effetto \u00e8 ampiamente utilizzato nelle animazioni di intro dei siti web moderni.<\/p>\n<h2>Animazioni SVG<\/h2>\n<p style=\"text-align: justify;\">SVG supporta tre approcci per le animazioni: <strong>SMIL<\/strong> (Synchronized Multimedia Integration Language), <strong>CSS<\/strong> e <strong>JavaScript<\/strong>. SMIL utilizza elementi XML come <code>&lt;animate&gt;<\/code> e <code>&lt;animateTransform&gt;<\/code> direttamente nel codice SVG. Sebbene Chrome avesse inizialmente annunciato la deprecazione di SMIL, ha poi fatto marcia indietro e il supporto \u00e8 attualmente stabile in tutti i browser principali.<\/p>\n<p style=\"text-align: justify;\">Le animazioni CSS sono generalmente preferite per la loro semplicit\u00e0 e integrazione con il workflow di sviluppo web esistente. Si possono usare @keyframes e la propriet\u00e0 animation su qualsiasi elemento SVG inline, cos\u00ec come le transizioni per effetti al passaggio del mouse. Le propriet\u00e0 transform (translate, rotate, scale) funzionano anche su elementi SVG, con la differenza che l&#8217;origine della trasformazione \u00e8 l&#8217;angolo superiore sinistro dell&#8217;SVG e non il centro dell&#8217;elemento.<\/p>\n<p style=\"text-align: justify;\">Per animazioni pi\u00f9 complesse, le librerie JavaScript come <strong>GSAP<\/strong> (GreenSock Animation Platform) offrono un controllo preciso e performance eccellenti per animare elementi SVG. GSAP gestisce automaticamente le differenze tra browser e fornisce funzionalit\u00e0 avanzate come timeline, morphing di percorsi e animazioni basate sullo scroll. Per chi preferisce un approccio pi\u00f9 leggero, la Web Animations API nativa offre un buon compromesso tra funzionalit\u00e0 e peso.<\/p>\n<h2>Icone SVG e Accessibilit\u00e0<\/h2>\n<p style=\"text-align: justify;\">Uno degli usi pi\u00f9 diffusi di SVG \u00e8 la creazione di <strong>sistemi di icone<\/strong>. Le icone SVG offrono vantaggi decisivi rispetto ai font di icone: caricamento pi\u00f9 affidabile, dimensioni pi\u00f9 contenute (si caricano solo le icone utilizzate), nessun problema di rendering FOUT, supporto per multicolore e animazioni, e migliore accessibilit\u00e0.<\/p>\n<p style=\"text-align: justify;\">La tecnica moderna per i sistemi di icone SVG prevede l&#8217;uso di un sprite SVG (un file contenente tutti i simboli definiti con <code>&lt;symbol&gt;<\/code>) e il riferimento ai singoli simboli tramite <code>&lt;use&gt;<\/code> con l&#8217;attributo href. Questo approccio combina i vantaggi della cache del file esterno con la possibilit\u00e0 di stilizzazione CSS tramite la propriet\u00e0 currentColor.<\/p>\n<p style=\"text-align: justify;\">L&#8217;<strong>accessibilit\u00e0<\/strong> delle immagini SVG richiede attenzione specifica. Per SVG decorativi, aggiungere role=&#8221;img&#8221; e aria-hidden=&#8221;true&#8221; nasconde l&#8217;elemento dalle tecnologie assistive. Per SVG informativi, aggiungere un elemento <code>&lt;title&gt;<\/code> all&#8217;interno dell&#8217;SVG fornisce un&#8217;alternativa testuale equivalente all&#8217;attributo alt delle immagini raster. L&#8217;attributo aria-labelledby pu\u00f2 collegare l&#8217;SVG al suo titolo per una migliore compatibilit\u00e0 con gli screen reader.<\/p>\n<p style=\"text-align: justify;\">Per approfondire le differenze tra Canvas e SVG in scenari specifici, leggi il nostro articolo su <a href=\"https:\/\/gtechgroup.it\/blog\/html-canvas-grafica-animazioni-browser\/\">HTML Canvas<\/a>. La scelta tra le due tecnologie dipende dal caso d&#8217;uso, e conoscere entrambe \u00e8 fondamentale per ogni sviluppatore web moderno.<\/p>\n<p style=\"text-align: justify;\">Hai bisogno di aiuto con la grafica SVG per il tuo sito web? <strong>G Tech Group<\/strong> offre servizi di sviluppo web professionale e web design. Contattaci a <strong>support@gtechgroup.it<\/strong> o via WhatsApp al <strong>0465 84 62 45<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La Scalable Vector Graphics (SVG) \u00e8 un formato di immagine basato su XML che descrive la grafica attraverso forme geometriche, testo e percorsi matematici anzich\u00e9&hellip;<\/p>\n","protected":false},"author":2,"featured_media":164228,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"1246","_seopress_titles_title":"SVG in HTML: Grafica Vettoriale Scalabile per il Web %%sep%% %%sitename%%","_seopress_titles_desc":"Guida completa a SVG in HTML: grafica vettoriale scalabile, elementi base, viewBox, styling CSS, animazioni, icone SVG e accessibilit\u00e0.","_seopress_robots_index":"","footnotes":""},"categories":[1246],"tags":[787,1108],"class_list":["post-164048","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-html","tag-sviluppo-web","tag-web-design"],"_links":{"self":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/164048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/comments?post=164048"}],"version-history":[{"count":0,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/164048\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media\/164228"}],"wp:attachment":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media?parent=164048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/categories?post=164048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/tags?post=164048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}