Formazione continua

Impaginare con i CSS3: la proprietà transform e il rule @keyframes

aprile 4, 2012 by Giuseppe Maldarizzi | 0 Commenti

Rieccoci ad un nuovo appuntamento con i CSS3 dove esploriamo le funzionalità introdotte dal nuovo standard e vediamo insieme come puoi utilizzarle durante l'impaginazione del tuo sito web.

Oggi farò una panoramica su due particolari caratteristiche che ti permetteranno di animare il tuo codice senza utilizzare immagini e/o javascript.

Tutorial precedenti

- La proprietà Border Radius
- La pseudo-classe :target

La proprietà transform

Attraverso transform potrai applicare una trasformazione 2D o 3D ad un elemento HTML. In pratica puoi ruotare, scalare, muovere, etc... un qualsiasi elemento della tua pagina.

La sintassi è molto semplice:

transform: none|transform-functions;

Se imposti il valore none vai a definire che non ci deve essere nessuna trasformazione. Oppure puoi definire diverse funzioni di trasformazione, come ad esempio:

- Ruotare (passandogli l'angolo di rotazione):

#elemento
{
   transform:rotate(45deg);
}

- Spostare l'elemento su un solo asse, su 2 dimensioni - translate(x,y) - o su piano 3d - translate3d(x,y,z)

#elementoX
{
  transform:translateX(15px);
}

#elementoY
{
  transform:translateY(25px);
}

#elementoZ
{
  transform:translateZ(5px);
}

#elemento2d
{   
   transform:translate(30px,18px);
}

#elemento3d
{
  transform: translate3d(30px,10px,5px);
}

- Scalare in base alla percentuale passatagli come valore:

#elementoX
{
  transform:scaleX(1.5);
}

#elementoY
{
  transform:scaleY(2);
}

#elementoZ
{
  transform:scaleZ(1.1);
}

#elemento2d
{   
   transform:scale(2,3);
}

#elemento3d
{
  transform: scale3d(1.1,2,1.4);
}

Come sempre ti consiglio di avere sempre come riferimento il sito W3C per un dettaglio completo delle funzioni accettate come parametro.

Il rule @keyframes

Attraverso il rule @keyframes puoi creare delle vere e proprie animazioni semplicemente modificando i CSS a runtime. Vediamo la sua sintassi per capire meglio:

@keyframes animationname {
   keyframes-selector {css-styles;}
}

Dove:

- l'attributo animationname, come indica la parola stessa, è il nome da attribuire all'animazione;
- keyframes-selector rappresenta la percentuale della durata dell'animazione;
- in css-styles vai a definire gli stili css da attribuire in fase di animazione ad ogni selettore.

Ad esempio puoi utilizzare questo rule per spostare un elemento modificando a runtime la sua posizione top e left:

@keyframes animazione1
{
   from   {top:0px;left:0px;}
   25%  {top:200px;left:200px;}
   50%  {top:100px;left:100px;}
   75%  {top:150px;left:150px;}
   to {top:0px;left:0px;}
}

E puoi richiamarlo attraverso la proprietà animation, in questo modo:

#elemento1
{
  animation-name: animazione1;
  animation-duration: 2s;
  animation-timing-function: linear;
  animation-delay: 2s;
  animation-iteration-count: infinite;
  animation-direction: alternate;
  animation-play-state: running;
}

Maggiori dettagli sulle funzioni di animation sul sito W3C.

Esempio pratico: un'icona di loading senza immagini animate o flash

Adesso che ho fatto una panoramica su queste due funzionalità ti mostrerò come utilizzarle insieme per creare un'icona di loading senza utilizzare immagini animate o flash. Questo sarà il codice CSS del nostro esempio:

body
{
	background-color: #fff;
}

h1
{
	font-size: 1.5em;
	font-weight: normal;
	margin: 0 0 1em 0;
	color: #dc143c
}

h2, h2 a
{
	font-size: 1.3em;
	font-weight: normal;
	margin: 0;
	color: #ff8c00
}

#loader  
{  
    position: relative;
    top: 20px; 
    left:20px;
    width: 30px;  
    height: 30px;  
    border: 8px solid #6495ed;  
    border-right-color: transparent;  
    border-radius: 50%;  
    box-shadow: 0 0 25px 2px #ff7f50;  

    -webkit-animation: icon 1s linear infinite;
    -moz-animation: icon 1s linear infinite;
    -ms-animation: icon 1s linear infinite;
    -o-animation: icon 1s linear infinite;
    animation: icon 1s linear infinite;  
}  

@-webkit-keyframes icon
{
	from { -webkit-transform: rotate(0deg); opacity: 0.4; }
	50%  { -webkit-transform: rotate(180deg); opacity: 1; }
	to   { -webkit-transform: rotate(360deg); opacity: 0.4; }
}

@-moz-keyframes icon
{
	from { -moz-transform: rotate(0deg); opacity: 0.4; }
	50%  { -moz-transform: rotate(180deg); opacity: 1; }
	to   { -moz-transform: rotate(360deg); opacity: 0.4; }
}

@-ms-keyframes icon
{
	from { -ms-transform: rotate(0deg); opacity: 0.4; }
	50%  { -ms-transform: rotate(180deg); opacity: 1; }
	to   { -ms-transform: rotate(360deg); opacity: 0.4; }
}

@-o-keyframes icon
{
	from { -o-transform: rotate(0deg); opacity: 0.4; }
	50%  { -o-transform: rotate(180deg); opacity: 1; }
	to   { -o-transform: rotate(360deg); opacity: 0.4; }
}

@keyframes icon
{
	from { transform: rotate(0deg); opacity: 0.2; }
	50%  { transform: rotate(180deg); opacity: 1; }
	to   { transform: rotate(360deg); opacity: 0.2; }
}

L'elemento #loader non sarà altro che un div privo di contenuto al quale verrà applicata l'animazione specificata nel CSS.

Clicca qui per la demo

Applicando un pò di javascript puoi utilizzare questo codice per utilizzare questa animazione con le chiamate asincrone Ajax senza appesantire la pagina con immagini animate.

Supporto e compatibilità

Come puoi vedere è importante aggiungere il prefisso dei vari browser (-webkit, -moz, -ms, -o) per aumentare la compatibilità con la maggior parte di essi. Purtroppo ci sono i soliti problemi su Internet Explorer ed Opera che non supportano @keyframes e animation.

Vi segnalo anche questo sito dove potete vedere alcuni esempi di forme geometriche e non realizzate con i CSS3: CSS3 Shapes.

Cosa ne pensi di queste due funzionalità? Le hai mai utilizzate?

Libri consigliati per imparare e studiare il CSS3

Formazione continua

Impaginare con i CSS3: la pseudo-classe :target

marzo 27, 2012 by Giuseppe Maldarizzi | 0 Commenti

Rieccoci al secondo appuntamento con i CSS3 e le proprietà principali per impaginare una pagina web, meglio se HTML5, funzionale ed interattiva grazie alle nuove funzionalità introdotte. Tutorial precedenti - La proprietà Border Radius La pseudo-classe :target Sicuramente avrai già utilizzato altre pseudo classi con i CSS2, come ad esempio :hover e :active. I CSS3 ne introducono una nuova - :target - che ti permetterà di applicare a runtime lo... [Continua...]

Formazione continua

Impaginare con i CSS3: la proprietà border radius

marzo 16, 2012 by Giuseppe Maldarizzi | 0 Commenti

Con questo post inauguro una serie di articoli sulle proprietà del CSS3 presentandoti gradualmente alcune caratteristiche fondamentali per impaginare testi ed immagini nei tuoi siti web. Ti ricordo che i nuovi style CSS3 non sono supportati ancora da tutti i browser (il punto dolente è sempre il solito Explorer) e dato che la maggior parte delle features è già integrata in Mozilla e Safari ti consiglio di aggiungere l'opzione -moz e -webkit nei tuoi css. Cominciamo!... [Continua...]

Formazione continua

HTML5: come determinare l'orientamento, utilizzare la bussola e l'accelerometro del tuo smartphone

marzo 7, 2012 by Giuseppe Maldarizzi | 0 Commenti

Dopo aver visto come determinare la geo-localizzazione attraverso poche righe HTML5, oggi vorrei mostrarti come è semplice determinare l'orientamento di un dispositivo mobile e la sua posizione nello spazio. La W3C ha definito le specifiche per gestire questi tipi di eventi (DeviceOrientation Event) necessari per interagire con gli smartphone di ultima generazione (generalmente provvisti di bussola e di accelerometro). Gli esempi che ti mostrerò sono funzionanti su tutti i disposi... [Continua...]

Formazione continua

Impostare un immagine in full background con CSS3 e jQuery

febbraio 29, 2012 by Giuseppe Maldarizzi | 0 Commenti

Sempre più siti utilizzano come sfondo un immagine a pieno schermo - full background - e in questo post ti mostrerò due metodi per realizzarlo facilmente. Metodo 1: CSS3, semplice e responsive Con la nuova proprietà del CSS3, background-size, puoi semplicemente impostare un immagine come sfondo che si adatterà in modo automatico alla pagina senza dipendere dalle dimensioni dello schermo. E' quindi una soluzione responsive! Basta modificare solo il tuo CSS, in que... [Continua...]

Formazione continua

Come realizzare un percorso su mappa con HTML5 e Google Map v3 (2/2)

febbraio 21, 2012 by Giuseppe Maldarizzi | 7 Commenti

Nello scorso appuntamento ti ho mostrato come, sfruttando le caratteristiche della geo-localizzazione dell'HTML5, è possibile identificare la posizione geografica - longitudine e latitudine - dell'utente collegato. In questa seconda parte della guida andrai a collegare questi dati con la mappa di Google, attraverso le sue API v3. Abbiamo infatti ipotizzato una possibile applicazione reale di questo codice: nella pagina dei contatti del tuo sito l'utente potrà visualizzare il per... [Continua...]

Formazione continua

Come realizzare un percorso su mappa con HTML5 e Google Map v3 (1/2)

febbraio 16, 2012 by Giuseppe Maldarizzi | 0 Commenti

Tra le tante novità dello standard HTML5, quella che puoi maggiormente sfruttare è sicuramente la geo-localizzazione, ossia la possibilità di estrarre le coordinate e altre informazioni geografiche attraverso i dati di rete e le user agents dei browser dell'utente connesso. Lo scopo finale di questo tutorial sarà quello di creare in poche righe di codice javascript una semplice pagina web dove l'utente potrà visualizzare sulla Google Map il percorso per ragg... [Continua...]

E-government | Formazione continua

Lavorare fuori dall'Italia: differenze, riferimenti e dubbi. Intervista ad un'italiana all'estero.

febbraio 13, 2012 by Giuseppe Maldarizzi | 2 Commenti

Lavoro flessibile, articolo 18, meritocrazia, precariato... La crisi del mercato del lavoro porta a tante riflessioni. I ragazzi che hanno concluso i loro studi si chiedono se tentare la sorte  in Italia e sperare magari in un contratto non precario oppure preparare subito le valigie e partire verso destinazioni estere. Ma è davvero tutto rose e fiori all'estero? Quali sono i punti di riferimento per partire già con le idee chiare? Per cercare di dare delle risposte, ho f... [Continua...]

Formazione continua | Opinioni

Best Practices: come gestire correttamente un progetto

dicembre 2, 2011 by Giuseppe Maldarizzi | 0 Commenti

Lavorare in un progetto informatico non è sempre semplice soprattutto quando si ha a che fare con più persone, aziende o collaboratori, dove ognuno dovrà gestire la sua parte nel modo giusto per far funzionare la tua. La mia esperienza passata in una multi-nazionale americana mi ha insegnato che per lavori di questo tipo è necessario seguire un processo ben strutturato tale da consentire di ottenere un lavoro finale ben fatto e di qualità, da poter vendere a... [Continua...]

Formazione continua

jQuery Mobile: rilasciata la release 1.0!

novembre 30, 2011 by Giuseppe Maldarizzi | 0 Commenti

Dopo più di un anno di duro lavoro, il team di jQuery ha rilasciato la release finale 1.0 di jQuery Mobile dando così vita ad un mobile framework robusto HTML5-based e cross-platform. Migliori prestazioni, Theme Roller Tool per customizzare i temi e soprattutto tante, tantissime risorse tra siti, libri, presentazioni, plugins e tutorial presenti nella pagina Resources del sito. Penso di averlo già detto ma non mi stancherò mai di dirlo: la community di... [Continua...]