Css3 transizioni e animazioni

Tempo stimato di lettura: 3 minuti, 10 secondi
Pubblicato il 18 Aprile 2012

Oggi parleremo di due nuove funzioni introdotte con la specifica css3: le transizioni e le animazioni. Entrambe le proprietà sono ancora allo stato di working draft, ma mentre la prima è totalmente supportata dai browser sul mercato (internet explorer la implementerà nella versione 10), la seconda ha solo un supporto parziale (Firefox, Webkit, IE9+).

Queste nuove proprietà consentono finalmente di ottenere effetti grafici che prima era possibile ottenere solo attraverso javascript o qualche libreria come jQuery.

Le transizioni CSS3

Le prime che approfondiremo sono le transizioni, che permettono di effettuare la transizione dello sfondo di un menu o di un testo in modo graduale tra due colori scelti.
Ora spiegheremo i vari parametri:

  • transition-property attraverso il quale si decide a quale proprietà applicare la transizione
  • transition-duration che ne decide la durata
  • transition-timing con cui si sceglie la modalità di transizione a scelta tra quelle predefinite :” ease, linear, ease-in, ease-out, ease-in-out, cubic-beizer(x1,y1,x2,y2)”
  • transition-delay imposta l’attesa prima di avviare una nuova transizione.

Di seguito mostriamo l’ esempio pratico:

p {
	-moz-transition-property: background-color, border;
	-moz-transition-duration: 0.5s, 1s;
	-moz-transition-timing-function: linear, ease-in;
	-moz-transition-delay: 0.5s, 1s;

	-webkit-transition-property: background-color, border;
	-webkit-transition-duration: 0.5s, 1s;
	-webkit-transition-timing-function: linear, ease-in;
	-webkit-transition-delay: 0.5s, 1s;

	-o-transition-property: background-color, border;
	-o-transition-duration: 0.5s, 1s;
	-o-transition-timing-function: linear, ease-in;
	-o-transition-delay: 0.5s, 1s;

	transition-property: background-color, border;
	transition-duration: 0.5s, 1s;
	transition-timing-function: linear, ease-in;
	transition-delay: 0.5s, 1s;
}
p:hover{
	-moz-transition-property: background-color, border;
	-moz-transition-duration: 0.5s, 1s;
	-moz-transition-timing-function: linear, ease-in;
	-moz-transition-delay: 0.5s, 1s;

	-webkit-transition-property: background-color, border;
	-webkit-transition-duration: 0.5s, 1s;
	-webkit-transition-timing-function: linear, ease-in;
	-webkit-transition-delay: 0.5s, 1s;

	-o-transition-property: background-color, border;
	-o-transition-duration: 0.5s, 1s;
	-o-transition-timing-function: linear, ease-in;
	-o-transition-delay: 0.5s, 1s;

	transition-property: background-color, border;
	transition-duration: 0.5s, 1s;
	transition-timing-function: linear, ease-in;
	transition-delay: 0.5s, 1s;
}

Le animazioni CSS3

Adesso parleremo delle animazioni via css3, che sono una delle proprietà più innovative introdotte con questa specifica.
La prima cosa da fare è impostare la regola @keyframes seguita dal nome scelto per identificare tutta l’animazione e dove vengono inserirti tutti parametri dell’animazione. Per avviare e chiudere l’animazione si può scegliere tra la forma letterale “from e to” o o quella numerica “0% a 100%”.

Una volta impostato il tipo di animazione tramite @keyframes useremo le seguenti proprietà per impostare quale tag html usufrirà di tale animazione:

  • animation-name richiamerà il keyframes prescelto
  • animation-delay imposta il ritardo con cui far partire l’animazione
  • animation-duration imposterà la durata
  • animation-iteration-count decideremo quante volte si vorrà ripetere l’ animazione
  • animation-direction si può decidere se la ripetizione dell’animazione deve ripartire dallo stato iniziale con il parametro normal o effettuare l’ animazione a percorso inverso per avere un andamento più fluido tramite il parametro alternate.

Di seguito mostriamo l’ esempio pratico:

div {
        margin: 50px;
        padding: 1em;
        width: 400px;
        border: thin dotted black;
        font: bold 1.3em/1.3em arial, verdana, sans-serif;
		cursor:pointer;
        position: absolute;
        -moz-animation: cinquecolori 6s 5s 3 alternate, slittamento 6s 5s 3 alternate;
		-webkit-animation: cinquecolori 6s 5s 3 alternate, slittamento 6s 5s 3 alternate;
		animation: cinquecolori 6s 5s 3 alternate, slittamento 6s 5s 3 alternate;
        }

      @-moz-keyframes cinquecolori {
        from {
          color: #3b86ca;
          animation-timing-function: ease-out;
        }
        30% {
          color: #337Fab;
          animation-timing-function: linear;
        }
        60% {
          color: #3b778c;
          animation-timing-function: linear;
        }
        90% {
          color: #67696b;
          animation-timing-function: ease-in;
        }
        to {
          color: #8e584b;
        }
      }

      @-moz-keyframes slittamento {
        from {
          top: 50px;
          animation-timing-function: ease-out;
        }
        25% {
          top: 150px;
          animation-timing-function: linear;
        }
        50% {
          top: 200px;
          animation-timing-function: linear;
        }
        75% {
          top: 150px;
          animation-timing-function: ease-in;
        }
        to {
          top: 300px;
        }
      }
	  @-webkit-keyframes cinquecolori {
        from {
          color: #3b86ca;
          animation-timing-function: ease-out;
        }
        30% {
          color: #337Fab;
          animation-timing-function: linear;
        }
        60% {
          color: #3b778c;
          animation-timing-function: linear;
        }
        90% {
          color: #67696b;
          animation-timing-function: ease-in;
        }
        to {
          color: #8e584b;
        }
      }

      @-webkit-keyframes slittamento {
        from {
          top: 50px;
          animation-timing-function: ease-out;
        }
        25% {
          top: 150px;
          animation-timing-function: linear;
        }
        50% {
          top: 200px;
          animation-timing-function: linear;
        }
        75% {
          top: 150px;
          animation-timing-function: ease-in;
        }
        to {
          top: 300px;
        }
      }
	  @keyframes cinquecolori {
        from {
          color: #3b86ca;
          animation-timing-function: ease-out;
        }
        30% {
          color: #337Fab;
          animation-timing-function: linear;
        }
        60% {
          color: #3b778c;
          animation-timing-function: linear;
        }
        90% {
          color: #67696b;
          animation-timing-function: ease-in;
        }
        to {
          color: #8e584b;
        }
      }

      @keyframes slittamento {
        from {
          top: 50px;
          animation-timing-function: ease-out;
        }
        25% {
          top: 150px;
          animation-timing-function: linear;
        }
        50% {
          top: 200px;
          animation-timing-function: linear;
        }
        75% {
          top: 150px;
          animation-timing-function: ease-in;
        }
        to {
          top: 300px;
        }
      }

Naturalmente, essendo ancora allo stato di working draft, l’uso in produzione va valutato con molta attenzione senza abusare di queste nuove funzionalità.

Shares