Mar 272013
 

Una rapida carrellata di opzioni sugli angoli arrotondati: opzione ormai ampiamente diffusa e che css3 ci permette di realizzare con estrema semplicità, ovviamente non aspettiamoci troppo dai vecchi internet explorer.

7 div ciascuno con una soluzione diversa:

  • nel primo la proprietà base con il valore del raggio della stondatura identico sui 4 angoli
  • il secondo arrotonda solo i due angoli sopra, dalla proprietà si evince come procedere per gli altri due angoli
  • il terzo presenta quattro stondature diverse partendo dal top-left e procedendo in senso orario
  • nel quarto esempio il raggio è pari a metà larghezza e quindi il risultato è un cerchio
  • il quinto è identico al quarto solo che abbiamo inserto un’immagine di background
  • il sesto propone per i quattro angoli una stondatura diversa per il raggio orizzontale e per il raggio verticale
  • il settimo e ultimo esmepio è ientico al primo ma con quattro soluzioni diverse una per ciascun angolo

Il codice


<style>
body{font: 12px Verdana;}
div{ background-color:#993300; width:200px; height:200px; margin:20px; float:left;}
#box1{ border-radius:20px;}
#box2{ border-top-left-radius:20px; border-top-right-radius:20px;}
#box3{ border-radius:10px 20px 30px 40px;}
#box4{ border-radius:100px;}
#box5{ border-radius:100px; background-image:url(images/bg.jpg);}
#box6{ border-radius:20px/100px;}
#box7{ border-radius:20px 30px 40px 50px/60px 70px 80px 90px;}
</style>

<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>
<div id="box4"></div>
<div id="box5"></div>
<div id="box6"></div>
<div id="box7"></div>

L’esempio

Mar 252013
 

Una delle possibilità offerte da css3 recentemente rivista riguarda la possibilità di usare i gradienti come sfondo. Al momento i browser non ofrrono ancora pieno supporto alla specifica quindi saremo costretti ad utilizzare i prefissi per ciascun vendor, ovviamente resterà il problema delle vecchie versioni di internet explorer. Vediamo una rapida carrellata di possibilità, inserendo 6 div all’interno della pagina html:

<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>
<div id="box4"></div>
<div id="box5"></div>
<div id="box6"></div>

Mettiamo un css comune a tutti questi div:

div{
width:250px;
height:150px;
margin:20px;
border:1px solid #000;
float:left;
}

E quindi procediamo con il primo div, in questo caso, a titolo esemplificativo, cercheremo di mantenere la compatibilità con tutti i browser, nei prossimi esmepi ci concentreremo su chrome:


#box1{
background-image: linear-gradient(top right, #FFFFFF 0%, #AACFEF 100%);
background-image: -webkit-linear-gradient(top right, #FFFFFF 0%, #AACFEF 100%);
background-image: -moz-linear-gradient(top right, #FFFFFF 0%, #AACFEF 100%);
background-image: -ie-linear-gradient(top right, #FFFFFF 0%, #AACFEF 100%);
background-image: -o-linear-gradient(top right, #FFFFFF 0%, #AACFEF 100%);
}

La proprietà base è background-image, lavoraimo sul linear-gradient, al quale poi daremo gli opportuni prefissi, si parte dall’angolo in alto a destra con il bianoc e si procede verso l’angolo opposto sfumando verso l’azzurro.

I 2 esempi successivi riguardano un gradiente verticale e un gradiente orizzontale


#box2{ background-image: -webkit-linear-gradient(top, #FFFFFF 0%, #C6F 100%);}
#box3{ background-image: -webkit-linear-gradient(left, #093 0%, #09C 100%);}

Non c’è solo la possibilità di una progressione omogenea dall’inizio alla fine possiamo anche prevedere step intermedi:


#box4{ background-image: -webkit-linear-gradient(left, #FF0 0%, #F90 30%, #F30 100%);}

Altra soluzione possibile è il gradiente radiale e quindi a partire dal centro procederemo con il nostro gradiente


#box5{ background-image: -webkit-radial-gradient(center, circle, #FFF 0%, #09C 100%);}

Infine l’ultimo esempio è un gradiente creato da uno dei tanti tool online utili a questo scopo


#box6{/* IE10 Consumer Preview */
background-image: -ms-linear-gradient(bottom, #FFFFFF 0%, #EF662B 100%);
/* Mozilla Firefox */
background-image: -moz-linear-gradient(bottom, #FFFFFF 0%, #EF662B 100%);
/* Opera */
background-image: -o-linear-gradient(bottom, #FFFFFF 0%, #EF662B 100%);
/* Webkit (Safari/Chrome 10) */
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #FFFFFF), color-stop(1, #EF662B));
/* Webkit (Chrome 11+) */
background-image: -webkit-linear-gradient(bottom, #FFFFFF 0%, #EF662B 100%);
/* W3C Markup, IE10 Release Preview */
background-image: linear-gradient(to top, #FFFFFF 0%, #EF662B 100%);
}

Infine l’esempio

 

 

Dec 282012
 

Fare un’animazione cross-fade con css3 è cosa relativamente semplice.

Mettiamo in una pagina all’interno di un box due immagini:

 <div id="cf">
 <img src="images/41b98.jpg">
 <img src="images/b4b92.jpg">
 </div>
 

Poi prepariamo il nostro div che contiene le immagini in modo classico:

 #cf {
 position:relative;
 height:145px;
 width:200px;
 margin:0 auto;
 }
 

Quindi prepariamo la transizione sulla nostra immagine:

 #cf img {
 position:absolute;
 left:0;
 -webkit-transition: opacity 1s ease-in-out;
 -moz-transition: opacity 1s ease-in-out;
 -o-transition: opacity 1s ease-in-out;
 transition: opacity 1s ease-in-out;
 }
 

Infine l’evento che genererà  l’effetto, ovvero l’over sull’immagine:

 #cf img.top:hover {opacity:0;}
 

L’esempio

Poi prepariamo il nostro div che" data-image="" data-button=""> Share
Dec 272012
 

Una cosa sempre richiesta nell’ambito dei siti web e sostanzialmente fino ad ora mai soddisfatta, è la possibilità  di giustificare un testo. La causa è da ricercare nel fatto che non essendo i browser in grado di sillabare i testi l’esito grafico spesso era disastroso: due righe adiacenti potevano contenere diverse quantità  di sillabe e compensare questa differenza dilatando gli spazi bianchi: esito pessimo.

Con CSS3 e in particolare la proprietà  hyphens le cose cambiano, vediamo come.

Prepariamo un div con un paragrafo e del testo:


<div id="contenitore">
 <p lang="it" class="hyphenate">I consumi elettrici in Italia ...</p>
 </div>
 

Si noti l’attributo, de facto obbligatorio, lang valorizzato con la lingua del testo.

Il foglio di stile contiene il contenitore “solito”:

 #contenitore{ border:1px solid #000; padding:5px; width:300px;}
 

Ma soprattutto il paragrafo con il nuovo attributo css3, al momento supportato solo con il prefisso:

 #contenitore p{
 -webkit-hyphens: auto;
 -moz-hyphens: auto;
 hyphens: auto;
 text-align:justify;
 }
 

Il codice in sé sarebbe finito, ma così funzionerà , in questo momento solo su firefox,
problema noto con il css3 e in particolare con questa specifica che ha avuto una gestazione piuttosto travagliata.
Quindi? Approntiamo una strategia per gli altri browser!
Che passa innanzitutto per l’inclusione di un file js per fornire supporto ai browser che non l’hanno nativo.

<script src="js/hyphenator.js"></script>
 

E poi prima della chiusura del body lo usiamo:

 Hyphenator.config({
 displaytogglebox : true,
 minwordlength : 4
 });
 Hyphenator.run();
 

L’esempio completo

Nov 232012
 

Uno dei problemi concreti del css3 è fornire un adeguato supporto per i vecchi browser, al momento attuale si intende quindi internet explorer 7 e internet explorer 8.
Proviamo a usare la pseudo classe :after per aggiungere contenuti e useremo modernizr per testare il supporto, jquery entrerà in azione in caso di bisogno.
Procediamo dun que con l’html che conterrà semplicemente un paragrafo:


<p>Paragrafo di prova</p>

Con il css3 aggiungiamo un contenuto dopo il paragrafo, grazie alla pseudoclasse after, e lo formattiamo:

p:after{content:” – test”; background-color:yellow; color:red; font-weight:bold;}

Questa soluzione attualmente funziona con chrome, firefox, ie9, ma non con i vecchi ie.

Verificheremo allora il mancato supporto con modernizr,
costruiremo un download personalizzato con la sola opzione che ci interessa.
Aggiungeremo poi il js nell’intestazione della pagina:

e poi il solito jquery

A questo punto avviamo il test di supprto:

Andando a vedere con l’ispettore degli elementi l’html generato noteremo la classe generatedcontent assegnata al atg html qualora vi sia il supporto.
quindi modifichere il nostro css in questo modo:

.generatedcontent p:after{content:” – test”; background-color:yellow; color:red; font-weight:bold;}

I browser privi della classe generata da modernizr non cercheranno di applicare la formattazione.

Per loro ci sarà uno script ausiliario che richiameremo con il nope:

Modernizr.load({
test: Modernizr.generatedcontent,
nope: ‘js/generatedcontent.js’
});

ovvero se il test fallisce carica js/generatedcontent.js
che conterrà l’alternativa jQuery al nostro css:


$(‘p’).addClass(‘floatlf’).after(“ – test“);

Dove la classe floatlf è:

.floatlf{ float:left;}

e il css dello span:

span{ background-color:yellow; color:red; font-weight:bold;}

L’esempio finale

Nov 042012
 

Un piccolo epserimento su trasformazioni e animazioni in css3, realizzato per essere testato su chrome (gli altri browser non sono stati presi i considerazione).

La prova riguarda la realizzazione di un piccolo acquario dove alcuni pesci possono nuotare…

La grafica è quella che é, photoshop è uno sconosciuto.

Partiamo dall’html:


<div id=”contenitore”>
<div id=”sx”></div>
<div id=”dx”></div>
<div id=”bottom”></div>
<div id=”top”></div>
<div id=”vasca”></div>
<div id=”corallo”><img src=”images/corallo.gif”></div>
<div id=”corallo2″><img src=”images/corallo2.gif”></div>
<div id=”pesce_01″><img src=”images/pesce-arciere.gif”></div>
<div id=”pesce_02″><img src=”images/pesce-arciere2.gif”></div>
<div id=”pesce_03″><img src=”images/pygoplites-diacanthus.gif”></div>
<div id=”pesce_04″><img src=”images/pygoplites-diacanthus2.gif”></div>
<div id=”pesce_05″><img src=”images/cardinale2.gif”></div>
<div id=”pesce_06″><img src=”images/cardinale.gif”></div>
<div id=”pesce_07″><img src=”images/pesci_tropicali_442.gif”></div>
<div id=”pesce_08″><img src=”images/pesci_tropicali_44.gif”></div>
</div>

Abbiamo la vasca dove nuoteranno i pesci, quattro cerotti ai lati per nascondere il fuori scenza, due coralli per farci nuotare i pesci in mezzo e appunto alcuni pesci,

più saranno più sarà difficile cogliere la ripetitività dei gesti.

La prima parte del css è molto tradizionale, sono praticamente tutti div posizionati in mdo assoluto per costruire lo scenario, lavorando quindi al massimo sullo z-index:


html, body{ margin:0; padding:0;}
#contenitore{ width:960px; height:600px; border:1px solid #000; position:absolute; left:50%; margin-left:-480px;}
#sx{ width:178px; height:600px; background-color:#D0F3FB; position:absolute; left:0; z-index:100;}
#dx{ width:178px; height:600px; background-color:#D0F3FB; position:absolute; right:0; z-index:100;}
#bottom{ width:960px; height:98px; background-color:#D0F3FB; position:absolute; bottom:0; z-index:100;}
#top{ width:960px; height:98px; background-color:#D0F3FB; position:absolute; top:0; z-index:100;}
#corallo{ width:300px; height:200px; position:absolute; bottom:100px; left:160px; z-index:100;}
#corallo2{ width:300px; height:200px; position:absolute; bottom:100px; left:400px; z-index:100;}
#vasca{ width:600px; height:400px; margin:100px auto; background-image:url(images/fondo.jpg); box-shadow:5px 5px 5px 5px #666666; border-radius:5px;}

La parte forse più interessante è costituita dai nostri pesci, ne prenderemo uno come esempio gli altri seguono la stessa linea di sviluppo con parametri diversi,

iniziamo a formattare e posizionare fuori dall vasca il nostro pesciolino:


#pesce_01{ width:60px; height:60px; position:absolute; top:270px; right:50px;}

poi impostiamo l’animazione in 5 step intermedi che sarà il risultato di traslazioni, per attraversare la vasca (e uscire dall’altra parte),

rotazioni e scale per far sembrare il movimento più naturale e non solo lineare:


@-webkit-keyframes ‘animazione_pesce_01′{
from{-webkit-transform:translate(0,0);}
20%{-webkit-transform:translate(-140px,-90px) rotate(10deg) scale(1,1.6);}
40%{-webkit-transform:translate(-280px,-70px) rotate(-1deg);}
60%{-webkit-transform:translate(-420px,-105px) rotate(-10deg) scale(1,1.6);}
80%{-webkit-transform:translate(-560px,-65px) scale(1,1.6);}
to{-webkit-transform:translate(-750px,50px);}
}

Ultimo passo usiamo la nostra animazione che abbiamo impostato:


#pesce_01{
-webkit-animation-name:animazione_pesce_01;
-webkit-animation-duration:20s;
-webkit-animation-delay:5s;
-webkit-animation-iteration-count:infinite;
-webkit-animation-timing-function:ease-in-out;
}

dove associamo l’animazione da usare tramite il nome assegnato, la durata in secondi, il “delay” dal caricamento della pagina

il numero di cicli o se la vogliamo infinita e l’effetto accellerazione

Ripetendo questo lavoro per diversi elementi, semplicemente variando i parametri si pò raggiungere questo risulatato

Nov 022012
 

Creiamo una pila di foto dandogli come effetto quello di essere buttate a caso una sopra l’altra nel loro contenitore e le sfogliamo cliccandoci sopra.

Come prima cosa pre pariamo in javascript l’array delle nostre immagini:


var foto=new Array(12);
foto[0]=’/foto/DSC00077.JPG’;
foto[1]=’/foto/DSC00078.JPG’;

tutte quelle che vogliamo.

In secondo luogo prepariamo un div contenitore e una lista che popoleremo con le nostre foto.


<div id=”contenitore”><ul id=”griglia”></ul></div>

Passiamo al css, quello di routine innanzitutto:


body {font-family: “Lucida Grande”, Verdana, Arial, sans-serif;}
#contenitore{ margin:50px auto; width:300px;}
#griglia { padding:0; margin:0; list-style:none; width:300px; height:300px; }
#griglia li { padding:0; margin:0; list-style:none; }

Poi passiamo alle cose specifiche, le liste saranno posizionate in modo assoluto:


.foto{position: absolute;}

questo ci serve per posizionarle una sopra l’altra.

Per dare l’effetto di sovrapposizione casuale, le foto dopo la prima saranno leggermente ruotate ciascuna in una direzione diversa, usando quindi le proproetà di css3:


.foto:nth-last-child(2) img{-webkit-transform: rotate(-5deg);-moz-transform: rotate(-5deg);-o-transform: rotate(-5deg);-ms-transform: rotate(-5deg);transform: rotate(-5deg);}
.foto:nth-last-child(3) img{-webkit-transform: rotate(5deg);-moz-transform: rotate(5deg);-o-transform: rotate(5deg);-ms-transform: rotate(5deg);transform: rotate(5deg);}
.foto:nth-last-child(4) img{-webkit-transform: rotate(7deg);-moz-transform: rotate(7deg);-o-transform: rotate(7deg);-ms-transform: rotate(7deg);transform: rotate(7deg);}
.foto:nth-last-child(5) img{-webkit-transform: rotate(-7deg);-moz-transform: rotate(-7deg);-o-transform: rotate(-7deg);-ms-transform: rotate(-7deg);transform: rotate(-7deg);}

in questo modo non risulteranno esattamente sovrapposte.

Successivamente diamo dimensioni, bordo e ombra alle nostre foto:


.foto img { max-width: 100%; height: auto; border: 5px solid #fff; -webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);}

Non resta che aggiungerle alla pagina tramite jQuery.

Al document.ready

facciamo un ordinamento random dell’array

e poi sullo stesso un ciclo foreach per creare tutti gli elementi:


foto.sort(randomFunct);
$.each(foto, function(i, el) {$(‘#griglia’).append(‘<li><img src=”‘+foto[i]+’”></li>’);});

A questo punto la visualizzazione è fatta, come ultima cosa possiamo mettere queste istruzioni in una funzione

al fine di intercettare il click sulle foto stesse e mostrare la pila riorganizzata.

Particolare interessante non potremo usare il semplice gestore ‘click’ sul document.ready poiché

la lista viene creata dopo, useremo quindi on in modo da evitare il ricorso al deprecato live.


function randomFunct() { return 0.5 – Math.round(Math.random()); }
$(document).ready(function(e) {mostra_foto();}).on(‘click’,'#griglia li img’,function(){mostra_foto();});

function mostra_foto(){
foto.sort(randomFunct);
$.each(foto, function(i, el) {$(‘#griglia’).append(‘<li><img src=”‘+foto[i]+’”></li>’);});
}

L’esempio

Jan 022012
 

Con il CSS3 è possibile usare un gradiente come sfondo a un elemento, peccato che, al momento, la funzionalità sia scarsamente supportata, per usare un eufemismo, dai browser di casa Microsoft.

Nella pagina inserisco un div con delle dimensioni fisse e a questo applico il gradiente:

background-image: linear-gradient(topright, #FFFFFF0%, #AACFEF100%);

Dove top right è la posizione di partenza da scegliere tra top, bottom, left, right o loro combinazioni come nel nostro caso e poi nell’ordine il primo e il secondo colore di stop.

Questo è un esempio

Dec 282011
 

Un effetto che sicuramente riscuoterà successo specificato da CSS3 è l’ombra sui testi, ora come probabilmente ci si aspetta il problema è legato a internet explorer ma forse conviene iniziare a portarsi avanti, gli utenti che usano browser obsoleti saranno esteticamente penalizzati ma la fruizzione dei contenuti non risultera compromessa. Tecnicamente non c’è molto da dire:


p {text-shadow: 2px 2px 3px #333 ;}

dove il primo valore è lo spostamento dell’ombra in orizzontale e il secondo è lo spostamento dell’ombra in verticale; quindi il livello di sfocatura e il colore dell’ombra.

Un esempio si può vedere in questa pagina

Dec 222011
 

Per molti anni uno dei principali motivi di discussione fra designer e sviluppatori era legato alle ombre inserite nei layout e di una discreta complessità da montare nelle pagine html, comunque facendo ricorso alla grafica tradizionale con le inevitabili scomodità del caso.

CSS3 propone una soluzione a questo problema introducendo la possibilità di gestire le ombre. L’istruzione cardine è questa:


box-shadow: 5px 5px 10px 2px #333333;

Esaminiamola nel dettaglio: i primi due valori indicano rispettivamente lo spostamento orizzontale e quello verticale, valori positivi spostano l’ombra verso destra e verso il basso, mentre valori negativi spostano l’ombra verso sinistra e verso l’alto. Il terzo valore rappresenta il grado di sfocatura, valori più bassi determinano ombre più nette. Il quarto valore imposta il grado di diffusione dell’ombra, più è alto e più l’ombra tende ad espandersi. L’ultimo valore, ma questo è abbastanza scontato, rappresenta il colore dell’ombra.

In pratica