L’effetto foto piegata – PAGE CURL EFFECT – da un po’ di tempo circola come “nuovo” trend nel mondo del web: lo stile ricorda l’effetto di una cartolina piegata ai lati. Vediamo come realizzare questo effetto direttamente con le ombre CSS3, da applicare agli angoli inferiori di un elemento, e deformato con l’effetto CSS3 skew.
Vogliamo ottenere tutto questo con l’utilizzo dei soli CSS: in particolare degli pseudo-elementi :before
e :after
. L’effetto finale risulta molto ben fatto e sicuramente subito utilizzabile per tutti i browser (mediante l’utilizzo dei tag proprietari dei vari browser), escluse però tutte le versioni di Internet Explorer!
CSS3: Galleria di immagini con ombre e effetto foto piegata!
Dobbiamo realizzare una galleria di immagini per un portfolio online? Ecco di seguito una pagina di esempio e il codice che ci serve:
Per cominciare, organizziamo le illustrazioni in una semplice lista non ordinata di elementi. Se vogliamo testare velocemente, ci possiamo affidare a un servizio che mette a disposizione immagini placehorder, o se preferite “segnaposto”, da inserire in pagine Web di test. Per questa demo ho scelto picsum.photos:
Applichiamo gli stili CSS (nell’ordine che vedete sotto) in modo tale che le immagini si dispongano una a fianco all’altra, e che abbiano un effetto di ombra interna ed esterna, ottenuta rispettivamente con le propietà CSS3 rgba()
e rgba() inset
:
ul.box li { list-style-type: none;
margin: 0 30px 30px 0; padding: 0;
width: 250px;
height: 150px; border: 1px solid #efefef;
position: relative; float: left; background: #ffffff; /* per i vecchi browser */ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset; -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 60px rgba(0, 0, 0, 0.1) inset; -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset; }
Fatto questo, trasformiamo gli oggetti con i CSS3: ecco come applicare gli stili per ottenere l’ombra esterna "piegata"!
Inseriamo due elementi posizionati absolute
dietro ogni elemento della lista (con il corretto z-index
), con gli pseudo-elementi :after
e :before
. Essi vengono poi ruotati con la proprietà transform:rotate
, e deformati con la proprietà skew
, che applica una inclinazione lungo gli assi X e Y.
Ecco cosa inserire:
ul.box li:after { z-index: -1; position: absolute; background: transparent; width: 70%; height: 55%; content: ''; right: 10px; bottom: 10px; transform: skew(15deg) rotate(6deg); -webkit-transform: skew(15deg) rotate(6deg); -moz-transform: skew(15deg) rotate(6deg); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); } ul.box li:before { z-index: -2; position: absolute; background: transparent; width: 70%; height: 55%; content: ''; left: 10px; bottom: 10px; transform: skew(-15deg) rotate(-6deg); -webkit-transform: skew(-15deg) rotate(-6deg); -moz-transform: skew(-15deg) rotate(-6deg); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); }