Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Animare le icone SVG con i CSS

Controllare le animazioni con i CSS struttando le proprietà transition, transform e animation.
Controllare le animazioni con i CSS struttando le proprietà transition, transform e animation.
Link copiato negli appunti

Per esaminare come rendere le nostre icone animate avanziamo per obiettivi successivi modificando l'esempio visto nella lezione precedente.

L'attivazione dell'icona

Come primo obiettivo modifichiamo i colori dell'icona al passaggio del cursore del mouse. L'icona dell'immagine acquisirà una doppia colorazione ed un alone giallo che rimarcherà l'idea della luminosità. Il risultato finale è mostrato nell'immagine che segue.

Icona

Per creare l'alone luminoso dietro l'immagine bisogna aggiungere un elemento circle, da collocare prima di tutti gli elementi path:

<g id="Layer_x0020_1" class="bulb">
	<circle cx="50%" cy="50%" r="50%" class="light" />
	<path class="glass" stroke="#434242" stroke-width="7.5" d="M348 71c8,2 13,10 12,18 -2,8 -10,13 -18,11l-130 -28c-8,-2 -13,-9 -12,-18 2,-8 10,-13 18,-11l130 28z"/>
	...
</g>

L'elemento circle è stato assegnato alla classe light, in modo che anche questo possa essere presentato con dichiarazioni CSS.

Si noti che l'elemento g è stato assegnato alla classe bulb, in modo che sia possibile puntare all'intero gruppo di elementi che costituiscono l'icona. Ed ecco gli stili:

<style type="text/css">
	<![CDATA[
		.bulb .glass { fill: url(#id0); }
		.bulb .screw { fill: url(#id5); }
		.bulb .light { fill: transparent; }
		.bulb:hover .glass { fill: #FFFF00; }
		.bulb:hover .screw { fill: #99CCFF; }
		.bulb:hover .light { fill: #FFFF88; }
	]]>
</style>

Ora gli elementi vengono selezionati tramite due classi nidificate: la prima, bulb, individua il container, ossia l'elemento g, le seconde individuano i singoli elementi dell'icona.
Si noti il valore transparent assegnato alla proprietà fill del cerchio luminoso. La proprietà transparent permette di attivare l'immagine quando il cursore del mouse è sul cerchio, anche se questo non è visibile. Se avessimo assegnato alla proprietà fill il valore none, il cerchio sarebbe rimasto inattivo fino a quando il cursore non avesse raggiunto la lampadina.

Nota: Purtroppo Opera mostra un cerchio nero, quindi sarebbe preferibile assegnare un colore preciso al posto di transparent.

.bulb .light { fill: #FFFFFF; }

Quando il cursore è su un qualsiasi elemento, l'intero gruppo viene attivato, e la lampadina si accende.

Controllare le animazioni con i CSS

Le animazioni possono essere controllate ricorrendo agli elementi SMIL, a JavaScript, o, infine, alle proprietà transition, transform e animation di CSS.
Vediamo, quindi, come animare l'icona dell'esempio precedente grazie alla proprietà transition. Lasciamo immutato il mark-up e modifichiamo gli stili come segue:

<style type="text/css">
	<![CDATA[
		.bulb .glass { fill: #FFFFFF; transition: fill 1s ease-in; }
		.bulb .screw { fill: url(#id5); }
		.bulb .light { fill: #FFFFFF; transition: fill .8s ease-out .4s; }
		.bulb:hover .glass { fill: #FFFF00; }
		.bulb:hover .screw { fill: #99CCFF; }
		.bulb:hover .light { fill: #FFFF88; }
	]]>
</style>

Due le cose da notare: il ricorso alla proprietà transition in due dichiarazioni, per animare gli elementi di classe glass (la parte luminosa della lampadina) e light (l'alone giallo); il diverso valore della proprietà fill nella prima dichiarazione. Nel caso in cui si dovesse utilizzare la notazione url(#id), la proprietà transition non viene applicata. Diventa necessario ricorrere ad una diversa notazione, come il sistema esadecimale dell'esempio.

Icona

Animazione avanzate

transition permette di generare animazioni semplici creando una transizione progressiva da uno stato iniziale ad uno stato finale. Il limite è costituito dal fatto che il numero di proprietà animabili è ridotto.

Tuttavia, a partire da SVG 2, l'attributo transform viene integrato nel modulo delle trasformazioni di CSS3, che così va ad estendere il numero delle proprietà che possono essere animate tramite transition.

In quest'ultimo esempio vedremo, quindi, come muovere un singolo elemento dell'icona document-export.svg del set Snipicons.

L'icona originale del set Snipicons

Icona

Apriamo il file SVG con un editor di testo e aggiungiamo gli attributi id all'elemento g, che racchiude tutti gli elementi che compongono l'icona, e all'ultimo elemento path, che genera una freccia rivolta verso destra:

<g id="icon">
	...
	<path id="arrow" class="fil1 str2" d="M479 325l-63 -63c-3,-3 -6,-6 -12,-6 -6,0 -13,6 -13,13l0 18c0,4 -3,7 -6,7l-159 0c-3,0 -6,3 -6,6l0 74c0,3 3,6 6,6l159 0c3,0 6,3 6,6l0 21c0,6 7,12 13,12 6,0 9,-3 12,-6l63 -63c9,-8 9,-16 0,-25z" />
</g>

Integriamo, poi, gli stili CSS con due dichiarazioni:

<style type="text/css">
	<![CDATA[
		...
		#arrow {
			transition: all 0.5s ease;
		}
		#icon:hover #arrow {
			-webkit-transform: translateX(20px);
			transform: translateX(20px);
		}
	]]>
</style>

La proprietà transform viene assegnata all'elemento path#arrow quando il cursore si trova sull'area dell'icona (#icon:hover). Il valore translateX sposta l'elemento sull'asse orizzontale, di 20px verso destra.
transition genera un'animazione su tutte le proprietà specificate nelle due dichiarazioni, con una durata di mezzo secondo.
Nell'immagine che segue il risultato finale.

Icona

Link utili

Animazioni e trasformazioni

Lo stile degli elementi SVG

Ti consigliamo anche