Animazioni CSS

Animazioni CSS

CSS permette l’animazione di elementi HTML senza usare JavaScript o Flash!

CSS

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

/* Il codice dell’animazione */
@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

/* Il codice dell’animazione */
@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

/* Il codice dell’animazione */
@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

div {
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

div {
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

div {
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

div {
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

div {
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

div {
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

div {
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

#div1 {animation-timing-function: linear;}
#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

div {
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

div {
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

div {
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

div{
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

div{
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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *