Introduzione di un principiante all'animazione CSS

Oggigiorno sempre più siti web usano le animazioni, sia sotto forma di GIF, SVG, WebGL, video di sfondo e così via. Se usato correttamente, l'animazione sul Web offre vita e interattività, aggiungendo un ulteriore livello di feedback ed esperienza per gli utenti.

In questo tutorial ho intenzione di presentarti alle animazioni CSS; un modo molto performante di fare cose che sta diventando sempre più popolare man mano che il supporto del browser migliora. Avendo coperto le nozioni di base, costruiremo un rapido esempio che animerà un elemento quadrato in un cerchio:

Opzioni Premium

I designer di Envato Market sono stati impegnati a creare una gamma di animazioni CSS da collegare ai tuoi siti web, dalle ombre ai nastri, ai cursori e altro ancora.

Pacchetto ombra CSS3 sul mercato Envato

Puoi anche assumere un esperto CSS su Envato Studio per aiutarti con una vasta gamma di correzioni e personalizzazioni per il tuo progetto.

Esperti di CSS su Envato Studio

Un'introduzione a @keyframes and Animation

Il componente principale delle animazioni CSS è @keyframes, la regola CSS in cui viene creata l'animazione. Pensa a @keyframes come fasi lungo una linea del tempo. Dentro @keyframes, puoi definire queste fasi, ognuna con una dichiarazione di stile diversa.

Quindi, per far funzionare le animazioni CSS, è necessario associare il @keyframes a un selezionatore. Questo analizzerà gradualmente tutto il codice all'interno di @keyframes dichiarazioni e cambiare lo stile iniziale al nuovo stile, in base alle fasi.

I @keyframes

Qui imposteremo le fasi di animazione. Nostro @keyframes le proprietà sono:

  • Un nome a nostra scelta (tutsFade in questo caso).
  • fasi: 0%-100%; a partire dal (uguale a 0%) e a (uguale a 100%).
  • Stili CSS: lo stile che vorresti applicare per ogni fase.

Per esempio:

@keyframes tutsFade 0% opacity: 1;  100% opacità: 0; 

o:

@keyframes tutsFade from opacity: 1;  a opacità: 0; 

o la stenografia:

@keyframes tutsFade to opacity: 0; 

Il codice sopra applicherà una transizione all'opacità di un elemento, da opacità: 1 a opacità: 0. Ciascuno degli approcci di cui sopra otterrà lo stesso risultato finale.

L'animazione

Il animazione la proprietà è usata per chiamare @keyframes all'interno di un selettore CSS. L'animazione può avere più proprietà:

  • Animazione-nome: @keyframes nome (ricorda che abbiamo scelto tutsFade).
  • Animazione di durata: la durata del tempo, la durata totale dell'animazione dall'inizio alla fine.
  • animazione-timing-function: imposta la velocità di animazione ( lineare | facilità | disinvoltura | disinvoltura | disinvoltura | cubico-Bezier ).
  • animazione ritardo: il ritardo prima dell'inizio della nostra animazione.
  • animazione-iterazione-count: Quante volte itererà attraverso l'animazione.
  • animazione direzione: ti dà la possibilità di cambiare la direzione del loop, dall'inizio alla fine, o dalla fine all'inizio, o da entrambi.
  • Animazione-fill-mode: specifica quali stili verranno applicati all'elemento quando la nostra animazione è terminata ( nessuno | avanti | indietro | tutti e due )

Per esempio:

.element nome-animazione: tutsFade; durata animazione: 4s; ritardo di animazione: 1s; animazione-iterazione-conteggio: infinito; animazione-temporizzazione-funzione: lineare; animazione-direzione: alterna; 

o stenografia:

.elemento animazione: tutsFade 4s 1s infinito lineare alternativo; 

Il codice sopra creerà un effetto lampeggiante, con un ritardo di animazione di 1 secondo, una durata di animazione totale di 4 secondi, con direzione alternata e iterazioni di loop lineari infiniti.

Aggiunta di prefissi fornitore

Mentre una bozza di lavoro, abbiamo bisogno di utilizzare prefissi specifici del browser per garantire il miglior supporto del browser possibile. Si applicano i prefissi standard:

  • Chrome e Safari: -webkit-
  • Firefox: -moz-
  • Musica lirica: -o-
  • Internet Explorer: -Signorina-

Un animazione la proprietà utilizzando i prefissi dei fornitori sarà simile a: 

.element -webkit-animation: tutsFade 4s 1s infinito lineare alternativo; -moz-animation: tutsFade 4s 1s infinito lineare alternativo; -ms-animation: tutsFade 4s 1s infinito lineare alternativo; -o-animation: tutsFade 4s 1s infinito lineare alternativo; animazione: tutsFade 4s 1s infinito lineare alternativo; 

insieme a @keyframes:

@ -webkit-keyframes tutsFade / * tuo stile * / @ -moz-keyframes tutsFade / * tuo stile * / @ -ms-keyframes tutsFade / * tuo stile * / @ -o-keyframes tutsFade / * il tuo stile * / @keyframes tutsFade / * il tuo stile * /

Per motivi di leggibilità durante questo tutorial continuerò ulteriormente senza usare i prefissi, ma la versione finale li includerà e vorrei incoraggiarvi ad usarli nel vostro codice CSS.

Per saperne di più sui prefissi dei fornitori, è possibile controllare http://css3please.com/, che è un ottimo sito Web per le risorse dei prefissi dei fornitori.

Animazioni multiple

Puoi aggiungere più animazioni usando un separatore di virgola. Diciamo che vogliamo aggiungere una rotazione aggiuntiva al nostro tutsFade elemento, lo faremo dichiarando extra @keyframes e quindi legandoli al nostro elemento:

.elemento animazione: tutsFade 4s 1s infinito lineare alternativo, tutsRotate 4s 1s infinito lineare alternativo;  @keyframes tutsFade to opacity: 0;  @keyframes tutsRotate to transform: ruotare (180 gradi); 

Tutorial da quadrato a cerchio

Entriamo e creiamo una transizione di forma semplice; un'animazione quadrata per circoscrivere usando i principi di cui sopra. Avremo cinque fasi in totale e per ogni fase definiremo un raggio di confine, una rotazione e un colore di sfondo diverso per il nostro elemento. Basta parlare, passiamo alla codifica.

Elemento base

Per prima cosa, creiamo il markup, un elemento da animare. Non ci preoccuperemo nemmeno dei nomi delle classi, per ora utilizzeremo semplicemente un div diviso:

Quindi, usando un selettore di elementi (div ), Aggiungi lo stile predefinito al div:

div larghezza: 200px; altezza: 200 px; colore di sfondo: corallo; 

Dichiarazione dei fotogrammi chiave

Adesso prepariamoci @keyframes, che chiameremo piazza-to-cerchio, e le cinque fasi

@keyframes square-to-circle 0%  25%  50%  75%  100% 

Dobbiamo definire alcuni porcili in queste fasi, quindi iniziamo dettando il border-radius per ogni angolo del quadrato:

@ -webkit-keyframes square-to-circle 0% border-radius: 0 0 0 0;  25% border-radius: 50% 0 0 0;  50% border-radius: 50% 50% 0 0;  75% border-radius: 50% 50% 50% 0;  100% border-radius: 50%; 

Inoltre possiamo dichiarare un diverso colore di sfondo per ogni fase.

@keyframes square-to-circle 0% border-radius: 0 0 0 0; sfondo: Corallo;  25% border-radius: 50% 0 0 0; sfondo: darksalmon;  50% border-radius: 50% 50% 0 0; sfondo: indianred;  75% border-radius: 50% 50% 50% 0; sfondo: lightcoral;  100% border-radius: 50%; sfondo: darksalmon; 

Per colpire davvero l'idea di casa, andiamo oltre border-radius e colore di sfondo ruotando il div e aggiungendo un po 'di interesse visivo.

@keyframes square-to-circle 0% border-radius: 0 0 0 0; sfondo: Corallo; trasformare: rotate (0deg);  25% border-radius: 50% 0 0 0; sfondo: darksalmon; transform rotazione (45 gradi);  50% border-radius: 50% 50% 0 0; sfondo: indianred; transform ruotare (90deg);  75% border-radius: 50% 50% 50% 0; sfondo: lightcoral; trasformare: rotate (135deg);  100% border-radius: 50%; sfondo: darksalmon; transform rotazione (180 °); 

Applica l'animazione

Dopo aver definito la nostra animazione da piazza a cerchio, dobbiamo applicarla al div:

div larghezza: 200px; altezza: 200 px; colore di sfondo: corallo; animazione: alternata infinita da quadrato a cerchio 2s 1s; 

Qui vedi che abbiamo aggiunto una stenografia animazione proprietà, che afferma:

  • Il nome dell'animazione è piazza-to-cerchio.
  • La durata dell'animazione è 2s.
  • Il ritardo dell'animazione è 1s.
  • Il conteggio dell'iterazione dell'animazione è infinito, quindi continuerà all'infinito.
  • E l'animazione-direzione è alternato, quindi suonerà dall'inizio alla fine, poi di nuovo all'inizio, poi di nuovo fino alla fine e così via. 

Utilizzare la funzione di temporizzazione Awesomeness 

Un ultimo valore che possiamo aggiungere alla proprietà di animazione è il animazione-timing-function. Questo definirà la velocità, l'accelerazione e la decelerazione del nostro movimento. Questa funzione può essere un valore molto dettagliato, che è scomodo da calcolare manualmente, ma ci sono molti siti web gratuiti che forniscono risorse e personalizzazione dal vivo per le funzioni di cronometraggio dell'animazione.

Uno di questi strumenti è lo strumento di animazione CSS Easing, quindi usiamolo per calcolare la nostra funzione di cronometraggio.

Vorrei aggiungere un elastico effetto al nostro piazza-to-cerchio animazione, usando una funzione cubico-bezier.

Avendo giocato con le maniglie e generato una sorta di curva di Bezier, aggiorna il valore della funzione di temporizzazione dell'animazione usando lo snippet fornito.

div larghezza: 200px; altezza: 200 px; colore di sfondo: corallo; animazione: alternata da 2 a 1 cubico-bezier quadrato (1, .015, .295,1.225); 

Il codice finale, senza utilizzare i prefissi dei produttori ( -webkit- , -moz-, -Signorina-, -o- ) è come segue:

div larghezza: 200px; altezza: 200 px; colore di sfondo: corallo; animazione: alternata di cubi-bezier (1, .015, .295,1.225) infinita da quadrato a cerchio 2s .5s;  @keyframes square-to-circle 0% border-radius: 0 0 0 0; sfondo: Corallo; trasformare: rotate (0deg);  25% border-radius: 50% 0 0 0; sfondo: darksalmon; transform rotazione (45 gradi);  50% border-radius: 50% 50% 0 0; sfondo: indianred; transform ruotare (90deg);  75% border-radius: 50% 50% 50% 0; sfondo: lightcoral; trasformare: rotate (135deg);  100% border-radius: 50%; sfondo: darksalmon; transform rotazione (180 °); 

Un'ultima cosa

Tutto funziona bene nei browser moderni, ma Firefox ha una brutta abitudine di rendere gli oggetti in trasformazione in modo scadente. Dai un'occhiata a queste linee frastagliate per vedere cosa intendo:

Fortunatamente, c'è una soluzione per questo. Aggiungi il seguente schema trasparente al tuo div e Firefox renderà le cose perfettamente!

schema: 1px trasparente solido;

Conclusione

Questo è tutto! Abbiamo usato la sintassi CSS Animation per creare un'animazione semplice e ripetitiva.

Supporto del browser

Per informazioni aggiornate sul supporto dei browser per l'animazione CSS, consulta Posso usare ... ma in breve, i browser di supporto includono: Firefox 5+, IE 10+, Chrome, Safari 4 e versioni successive, Opera 12+.

risorse:

  • CSS3 per favore
  • Ceaser - Strumento di animazione CSS Easing
  • Animazioni CSS3 sul mercato Envato