Animazioni CSS
CSS permette l’animazione di elementi HTML senza usare JavaScript o Flash!
In questo capitolo imparerete le seguenti proprietà:
@keyframes
animation-name
animation-duration
animation-delay
animation-iteration-count
animation-direction
animation-timing-function
animation-fill-mode
animation
Supporto del browser per le animazioni
I numeri nella tabella indicano la prima versione del browser che supporta pienamente la proprietà.
Proprietà | |||||
---|---|---|---|---|---|
@keyframes | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animazione-nome | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animazione-durata | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animazione-delay | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animazione-iterazione-conteggio | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
direzione di animazione | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animazione-timing-funzione | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animazione-fill-mode | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animazione | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
Cosa sono le animazioni CSS?
Un’animazione permette ad un elemento di cambiare gradualmente da uno stile ad un altro.
Puoi cambiare tutte le proprietà CSS che vuoi, tutte le volte che vuoi.
Per usare l’animazione CSS, devi prima specificare alcuni fotogrammi chiave per l’animazione.
I fotogrammi chiave contengono quali stili l’elemento avrà in certi momenti.
La regola @keyframes
Quando specifichi gli stili CSS all’interno della regola @keyframes
, l’animazione cambierà gradualmente dallo stile corrente al nuovo stile in certi momenti.
Per far funzionare un’animazione, dovete legare l’animazione ad un elemento.
L’esempio seguente lega l’animazione “esempio” all’elemento <div>. L’animazione durerà 4 secondi, e cambierà gradualmente il colore di sfondo dell’elemento <div> da “rosso” a “giallo”:
Esempio
@keyframes esempio {
from {background-color: rosso;}
a {colore di sfondo: giallo;}
}
/* L’elemento a cui applicare l’animazione */
div {
width: 100px;
altezza: 100px;
colore di sfondo: rosso;
nome dell’animazione: esempio;
durata dell’animazione: 4s;
}
Prova tu stesso ”
Nota: La proprietà animation-duration
definisce quanto tempo un’animazione dovrebbe impiegare per essere completata. Se la proprietà animation-duration
non è specificata, non ci sarà alcuna animazione, perché il valore predefinito è 0s (0 secondi).
Nell’esempio sopra abbiamo specificato quando lo stile cambierà usando le parole chiave “from” e “to” (che rappresentano 0% (inizio) e 100% (completamento)).
È anche possibile usare la percentuale. Usando la percentuale, puoi aggiungere tutti i cambiamenti di stile che vuoi.
L’esempio seguente cambierà il colore di sfondo dell’elemento <div> quando l’animazione è completa al 25%, al 50% e di nuovo al 100%:
Esempio
@keyframes example{
0% {background-color: red;}
25% {colore di sfondo: giallo;}
50% {colore di sfondo: blu;}
100% {colore di sfondo: verde;}
}
/* L’elemento a cui applicare l’animazione */
div {
width: 100px;
height: 100px;
background-color: red;
animation-name: example;
animation-duration: 4s;
}
Provate voi stessi ”
L’esempio seguente cambierà sia il colore di sfondo che la posizione dell’elemento <div> quando l’animazione è completa al 25%, al 50% e di nuovo al 100%:
Esempio
@keyframes esempio{
0% {background-color:red; left:0px; top:0px;}
25% {colore di sfondo:giallo; sinistra:200px; alto:0px;}
50% {colore di sfondo:blu; sinistra:200px; alto:200px;}
75% {colore di sfondo:verde; sinistra:0px; alto:200px;}
100% {colore di sfondo:rosso; sinistra:0px; top:0px;}
}
/* L’elemento a cui applicare l’animazione */
div {
larghezza: 100px;
altezza: 100px;
posizione: relativa;
colore sfondo: rosso;
nome animazione: esempio;
durata animazione: 4s;
}
Prova tu stesso ”
Ritarda un’animazione
La proprietà animation-delay
specifica un ritardo per l’inizio di un’animazione.
L’esempio seguente ha un ritardo di 2 secondi prima di iniziare l’animazione:
Esempio
larghezza: 100px;
altezza: 100px;
posizione: relativa;
colore di sfondo: rosso;
nome animazione: esempio;
durata animazione: 4s;
animazione-delay: 2s;
}
Prova tu stesso ”
Sono ammessi anche valori negativi. Se si usano valori negativi, l’animazione inizierà come se fosse già in corso da N secondi.
Nel seguente esempio, l’animazione inizierà come se fosse già in corso da 2 secondi:
Esempio
larghezza: 100px;
altezza: 100px;
posizione: relativa;
colore di sfondo: rosso;
nome animazione: esempio;
durata animazione: 4s;
animazione-delay: -2s;
}
Prova tu stesso ”
Imposta quante volte un’animazione deve essere eseguita
La proprietà animation-iteration-count
specifica il numero di volte che un’animazione deve essere eseguita.
L’esempio seguente eseguirà l’animazione 3 volte prima di fermarsi:
Esempio
larghezza: 100px;
altezza: 100px;
posizione: relativa;
colore di sfondo: rosso;
nome animazione: esempio;
durata animazione: 4s;
animazione-iterazione-conteggio: 3;
}
Provate voi stessi ”
L’esempio seguente usa il valore “infinito” per far continuare l’animazione per sempre:
Esempio
larghezza: 100px;
altezza: 100px;
posizione: relativa;
colore di sfondo: rosso;
nome animazione: esempio;
durata animazione: 4s;
animazione-iterazione-count: infinite;
}
Prova tu stesso ”
Esegui animazione in direzione inversa o a cicli alternati
La proprietà animation-direction
specifica se un’animazione deve essere riprodotta in avanti, indietro o a cicli alternati.
La proprietà animation-direction può avere i seguenti valori:
-
normal
– L’animazione viene riprodotta normalmente (in avanti). Questo è il valore predefinito -
reverse
– L’animazione viene riprodotta in direzione inversa (all’indietro) -
alternate
– L’animazione viene riprodotta prima in avanti, poi all’indietro -
alternate-reverse
– L’animazione viene riprodotta prima all’indietro, poi in avanti
L’esempio seguente eseguirà l’animazione in direzione inversa (indietro):
Esempio
larghezza: 100px;
altezza: 100px;
posizione: relativa;
colore di sfondo: rosso;
nome animazione: esempio;
durata animazione: 4s;
animation-direction: reverse;
}
Provate voi stessi ”
L’esempio seguente usa il valore “alternate” per far girare l’animazione prima in avanti e poi all’indietro:
Esempio
larghezza: 100px;
altezza: 100px;
posizione: relativa;
colore di sfondo: rosso;
nome animazione: esempio;
durata animazione: 4s;
animazione-iterazione-count: 2;
animazione-direzione: alternate;
}
Provate voi stessi ”
L’esempio seguente usa il valore “alternate-reverse” per far girare l’animazione prima all’indietro, poi in avanti:
Esempio
larghezza: 100px;
altezza: 100px;
posizione: relativa;
colore di sfondo: rosso;
nome animazione: esempio;
durata animazione: 4s;
animation-iteration-count: 2;
animazione-direzione: alternate-reverse;
}
Prova tu stesso ”
Specifica la curva di velocità dell’animazione
La proprietà animation-timing-function
specifica la curva di velocità dell’animazione.
La proprietà animation-timing-function può avere i seguenti valori:
-
ease
– Specifica un’animazione con un inizio lento, poi veloce, poi finisce lentamente (questo è il default) -
linear
– Specifica un’animazione con la stessa velocità dall’inizio alla fine -
ease-in
– Specifica un’animazione con un inizio lento -
ease-out
– Specifica un’animazione con una fine lenta -
ease-in-out
– Specifica un’animazione con un inizio e una fine lenti -
cubic-bezier(n,n,n,n)
– Permette di definire i propri valori in una funzione cubic-bezier
L’esempio seguente mostra alcune delle diverse curve di velocità che possono essere utilizzate:
Esempio
#div2 {animation-timing-function: ease;}
#div3 {animazione-timing-function: ease-in;}
#div4 {animazione-timing-function: ease-out;}
#div5 {animazione-timing-function: ease-in-out;}
Provate voi stessi ”
Specificare il fill-mode per un’animazione
Le animazioni CSS non influenzano un elemento prima che il primo keyframe sia riprodotto o dopo che l’ultimo keyframe sia riprodotto. La proprietà animation-fill-mode può sovrascrivere questo comportamento.
La proprietà animation-fill-mode
specifica uno stile per l’elemento di destinazione quando l’animazione non è in esecuzione (prima che inizi, dopo che finisce, o entrambi).
La proprietà animation-fill-mode può avere i seguenti valori:
-
none
– Valore predefinito. L’animazione non applicherà alcuno stile all’elemento prima o dopo la sua esecuzione -
forwards
– L’elemento manterrà i valori di stile che è impostato dall’ultimo keyframe (dipende da animation-direzione e animation-iteration-count) -
backwards
– L’elemento otterrà i valori di stile che è impostato dal primo keyframe (dipende da animation-direction), e lo manterrà durante il periodo di ritardo dell’animazione -
both
– L’animazione seguirà le regole sia in avanti che indietro, estendendo le proprietà dell’animazione in entrambe le direzioni
L’esempio seguente permette all’elemento <div> di mantenere i valori di stile dell’ultimo keyframe quando l’animazione finisce:
Esempio
larghezza: 100px;
altezza: 100px;
sfondo: rosso;
posizione: relativa;
nome animazione: esempio;
durata animazione: 3s;
animazione-fill-mode: forwards;
}
Provate voi stessi ”
L’esempio seguente permette all’elemento <div> di ottenere i valori di stile impostati dal primo keyframe prima che l’animazione inizi (durante il periodo di ritardo dell’animazione):
Esempio
larghezza: 100px;
altezza: 100px;
sfondo: rosso;
posizione: relativa;
nome animazione: esempio;
durata animazione: 3s;
animazione-delay: 2s;
animazione-fill-mode: backwards;
}
Provate voi stessi ”
L’esempio seguente permette all’elemento <div> di ottenere i valori di stile impostati dal primo keyframe prima dell’inizio dell’animazione, e mantenere i valori di stile dell’ultimo keyframe quando l’animazione finisce:
Esempio
larghezza: 100px;
altezza: 100px;
sfondo: rosso;
posizione: relativa;
nome animazione: esempio;
durata animazione: 3s;
animazione-delay: 2s;
animazione-fill-mode: both;
}
Prova tu stesso ”
Proprietà sintetiche di animazione
L’esempio qui sotto usa sei delle proprietà di animazione:
Esempio
animazione-nome: esempio;
animazione-durata: 5s;
animazione-timing-function: linear;
animazione-delay: 2s;
animazione-iteration-count: infinite;
animazione-direction: alternate;
}
Provate voi stessi ”
Lo stesso effetto di animazione di cui sopra può essere ottenuto utilizzando la proprietà sintetica animation
:
Esempio
animazione: esempio 5s lineare 2s infinito alternato;
}
Prova tu stesso ”
Testati con gli esercizi!
Proprietà di animazione CSS
La seguente tabella elenca la regola @keyframes e tutte le proprietà di animazione CSS:
Proprietà | Descrizione | |
---|---|---|
@keyframes | Specifica il codice dell’animazione | |
animazione | Una proprietà sintetica per impostare tutte le proprietà dell’animazione | |
animazione-delay | Specifica un ritardo per l’inizio di un’animazione | |
animazione-direzione | Specifica se un’animazione deve essere riprodotta in avanti, all’indietro o a cicli alternati | |
animazione-durata | Specifica quanto tempo deve impiegare un’animazione per completare un ciclo | |
animazione-fill-mode | Specifica uno stile per l’elemento quando l’animazione non è in riproduzione (prima che inizi, dopo la sua fine, o entrambi) | |
animation-iteration-count | Specifica il numero di volte che un’animazione dovrebbe essere riprodotta | |
animation-name | Specifica il nome dell’animazione @keyframes | |
animation-play-state | Specifica se l’animazione è in esecuzione o in pausa | |
animazione-timing-function | Specifica la curva di velocità dell’animazione |