Realizzare slideshow complessi con jquery cycle

Tempo fa avevamo parlato di come realizzare un semplice slideshow con jquery, oggi vediamo come creare in poco tempo uno slideshow completamente customizzabile e compatibile grazie a jquery e jquery cycle.
Cos’è jquery cycle?
Jquery cycle è una libreria per jquery che permette la realizzazione di slideshow con molteplici effetti di transizione garantendo una buona customizzazione a livello funzionale tramite le opzioni messe a disposizione dagli sviluppatori.
Jquery cycle è scaricabile da qui.
Leggi l’articolo completo
Tag: css, html, jquery, web design
Realizzare layout al 100% di altezza con i css
Molto spesso capita di dover realizzare layout fluidi, che a causa del molto contenuto debbano adattarsi in larghezza alle dimensioni del browser. In un precedente articolo abbiamo visto quanto sia semplice realizzare layout fluidi con una buona compatibilità tra browser.
Obbiettivo più complesso è invece realizzare un layout con altezza che si adatti al browser. Questa operazione sicuramente non troppo comune ha il pregio (e soprattutto il difetto) di limitare il contenuto nell’altezza della finestra del browser.
Diventa quindi una scelta poco consigliata per garatire l’accessibilità dei contenuto, tuttavia può tornare utile per specifiche richieste che richiedono di emulare un full screen tipico dei siti in flash.
Per raggiungere in nostro obbiettivo è indispensabile far sì che il div contenitore della pagina mantenga un’altezza pari all’altezza della finestra del browser.
Cosa non fattibile settando semplicemente l’altezza dell’elemento al 100%, ma richiede che l’elemento genitore abbia settata un’altezza e che l’elemento in questione abbia un posizionamento assoluto.
body{
margin:0;
padding:0;
height:100%;
}
#content{
height:100%;
width:100%;
position:absolute;
top:0;
left:0;
overflow:hidden;
}
Grazie a questi parametri l’elemento si estende su tutta l’altezza della pagina rimanendo fuori dal flusso tradizionale con un posizionamento assoluto. Vedi l’esempio.
Per aggiungere un footer al nostro layout sarà sufficiente ridurre l’altezza dell’elemento precedente di pari valore all’altezza del footer ricordando di settare un posizionamento assoluto con bottom uguale a 0.
#footer{
height:10%;
width:100%;
position:absolute;
bottom:0;
left:0;
overflow:hidden;
}
In questo modo il footer rimarrà attaccato al fondo della finestra del browser anche al resize da parte dell’utente. Vedi esempio.
Come ultimo esempio vediamo come rendere centrato e a larghezza fissa il nostro layout.
Iniziamo settando delle larghezze a larghezza fissa mentre per centrare gli elementi non utilizziamo i margini laterali settati su auto bensì la proprietà left:50% in aggiunta ad un margine sinistro negativo pari alla metà della larghezza dell’elemento.
#content{
height:90%;
width:960px;
position:absolute;
top:0;
left:50%;
margin-left:-480px;
overflow:hidden;
}
#footer{
height:10%;
width:960px;
position:absolute;
bottom:0;
left:50%;
margin-left:-480px;
overflow:hidden;
}
In questo modo otteniamo un layout a larghezza fissa centrato con altezza al 100% e footer adiacente al margine inferiore della finestra del browser. Vedi l’esempio.
Note:
Questa soluzione non è consigliata per siti complessi in quanto il posizionamente assoluto rende maggiormente complessa l’impaginazione dei contenuti e come detto all’inizio mette a repentaglio l’accessibilità dei contenuti a risoluzioni ridotte.
La proprietà overflow:hidden; è stata inserita negli elementi per evitare che al ridimensionamento della finestra del browser l’altezza del contenuto comprometta il layout ma non è indispensabile per rendere l’altezza fluida.
Per far sì che il footer della pagina sia sempre adiacente al margine inferiore della pagina è possibile utilizzare solo il posizionamento assoluto con la proprietà bottom:0; senza ricorrere ad altezze in percentuale.
Le altezze in percentuale come le larghezze vengono renderizzate convertendo la dimensione in percentuale dell’elemento in pixel, può quindi accadere di avere uno spazio bianco tra due elementi (come #content e #footer) dato da un arrotondamento approssimativo, per risolvere questo problema è possibile utilizzare il background del body per non rendere visibile questo spazio. Nell’esempio si è settato volontariamente un sfondo bianco per rendere visibile questa problematica.
Tag: css, html, web design
Realizzare una semplice galleria immagini con jquery
Realizzare una galleria immagine è un’operazione abbastanza comune per il buon web designer, di norma la sfida più grande consiste nel rinnovarsi e nell’aggiungere un approccio creativo ai vari progetti.
Per trovare una facile applicazione alle soluzioni più creative ci viene incontro jquery che mette a disposizione numerosi effetti e semplifica notevolemente l’utilizzo di javascript.
Vediamo come realizzare una semplice galleria di immagini in pochi passi.
Per prima cosa creiamo la nostra pagina html ed inseriamo all’interno un div con i relativi contenuti (nel nostro caso le immagini della galleria).
<div id="contenitore"> <div><img src="images/1.jpg" alt="Immagine 1" /></div> <div><img src="images/2.jpg" alt="Immagine 2" /></div> <div><img src="images/3.jpg" alt="Immagine 3" /></div> </div>
Una struttura così semplice ci permetterà in seguito di creare alternative accessibili o per media che non supportano questa soluzione.
Fatto questo partiamo con jquery, come sempre iniziamo definendo la partenza dello script al caricamento della pagina con la funzione ready.
$(document).ready(function(){
});
Come seconda mossa definiamo un evento che porterà l’utente a vedere l’immagine successiva. Nel nostro caso il click sul div (o meglio sulla prima immagine visualizzata).
$(document).ready(function(){
$('div#contenitore div').click(function () {
});
});
Ora possiamo definire il codice che farà scomparire l’immagine attuale e mostrerà l’immagine successiva
$(this).fadeOut(200, function() {$(this).next().fadeIn( 200);});
In questo modo definiamo un fadeOut sul div contenitore dell’immagine su cui abbiamo appena cliccato e definiamo come funzione di callback un fadeIn sull’immagine successiva.
Rimane un unico problema da risolvere, quando si arriva all’ultima immagine questa deve scomparire e far apparire la prima. Per risolvere utilizziamo un semplice if che valuterà se l’elemento cliccato è l’ultimo del div oppure no.
if ($(this).is(":last-child")) {
}else{
}
Per vedere lo script in funzione guarda questo esempio.
Realizzare un rollover sull’immagine con Jquery in meno di un minuto
Realizzare un effetto rollover per le immagini di un sito è un’operazione molto semplice ma diventa complessa quando dobbiamo applicare questo effetto ad un numero elevato (e soprattutto differente) di elementi.
Come prima cosa aggiungiamo un link nella pagina alla libreria di jquery.
<script type="text/javascript" src="javascript/jquery.js"></script>
Iniziamo il nostro codice con $(document).ready che attenderà il caricamento completo della pagina prima di eseguire il codice
$(document).ready(function() {
)};
Al suo interno iniziamo a definire la prima funzione
$("img").each(function() {
rollsrc = $(this).attr("src");
rollON = rollsrc.replace(/.jpg$/ig,"_over.jpg");
$("<img>").attr("src", rollON);
});
Questa funzione salva il valore dell’attributo src nella variabile rollsrc per ogni immagine presente nella pagina, nella variabile rollON utilizza l’url dell’immagine e aggiunge la stringa “_over”. Nell’immagine dell’esempio cliccami.jpg diventa cliccami_over.jpg. Questa funzione serve per precaricare le immagini prima che siano utilizzate nelle successive funzioni.
$("a").mouseover(function(){
imgsrc = $(this).children("img").attr("src");
matches = imgsrc.match(/_over/);
if (!matches) {
imgsrcON = imgsrc.replace(/.jpg$/ig,"_over.jpg");
$(this).children("img").attr("src", imgsrcON);
}
});
La seconda funzione inizia all’over del mouse sul link, verifica che l’elemento <img> sia figlio dell’elemento <a> e salva in una variabile l’url, verifica se all’interno della variabile esiste la parte “_over” in caso negativo sostiutisce il nome dell’immagine da nomeimmagine.jpg a nomeimmagine_over.jpg. Questo serve per evitare che javascript ripeta l’effetto rollover se il mouse è già sopra l’immagine.
Come ultima funzione definiamo il rispristino dell’url con l’evento mouseout
$("a").mouseout(function(){
$(this).children("img").attr("src", imgsrc);
});
Sarà sufficiente questa funzione per applicare un’effetto rollover su ogni immagine linkata di una pagina. Basterà fare attenzione a salvare le immagini per l’effetto rollover con con lo stesso nome ed in aggiunta “_over” prima del formato del file.
Per un vedere lo script in azione vedi l’esempio.
Tag: html, jquery, web design
10 modi per ottimizzare i fogli di stile
Creare un buon foglio di stile richiede pazienza e precisione, anche una volta che tutto funziona, il test su più browser ha dato esito positivo e abbiamo validato il codice è possibile ottimizzare il css per ridurne il peso e in numero di richieste al server.
1) Sintassi contratta nelle regole
Per ridurre il peso di un foglio di stile la prima cosa a cui bisogna pensare è di ridurne il contenuto. Per fare questo possiamo come prima cosa valutare di utilizzare la sintassi contratta dove è possibile e dove è opportuno.
Ad esempio il seguente codice
margin-top:1px; margin-right:3px; margin-bottom:20px; margin-left:10px;
E’ facilmente sintetizzabile con una sintassi contratta come questa
margin:1px 3px 20px 10px;
La sintassi contratta è applicabile a molte proprietà, è bene conoscerle a fondo per capire quando poterle usare. Ecco un altro esempio per il background.
background-color:#ffffff; background-image:url(images/immagine.jpg); background-repeat:no-repeat; background-position:10px 20px;
che in forma contratta verrebbe così
background:#ffffff url(images/immagine.jpg) no-repeat 10px 20px
2) Evitare le unità di misura per valori negativi
Usare le unità di misura è utile per non confondere i vecchi browser e per non incorrere in problematiche di interpretazione errate se usiamo differenti unità di misura in un singolo css, esiste però un caso dove è possibile omettere l’unità di misura senza problemi, quando il valore è 0.
margin:0;
Essendo 0 ha poca importanza che l’unità di misua siano pixel, percentuali o punti perchè la proprietà sarà sempre nulla.
3) Regole scritte in linea
Un ulteriore modo per ridurre il peso dei css è quello di scrivere le regole inlinea piuttosto che a capo.
body{margin:0;padding:0;text-align:center;}
Questo sistema riduce notevolmente il peso del foglio di stile ma rende più difficoltosa la lettura per l’essere umano, è quindi consigliabile scrivere una regola in linea quando questa non ha più di tre proprietà al suo interno, per regole con più di tre proprietà si scriveranno a cascata.
div{
margin:0;
padding:0;
text-align:left;
color:#000;}
4) Valutare l’eredità di una regola
Abbiamo visto in un precedente articolo quanto sia importante valutare la priorità di una regola css, ma non bisogna esagerare con l’eccessiva specificità. Per esempio questa regola:
div#contenitore div#content div#main p#numerotelefono{}
E’ eccessivamente specifica essendo l’ultimo elemento comunque dotato di un id dovremmo trovare il modo di utilizzare la regola specificando meno elementi:
#numerotelefono{}
5) Evitare l’import
A differenza di <link> che collega un foglio di stile ad una pagina html, l’elemento @import presenta qualche lacuna a livello di performance di caricamento (in particolare per internet explorer) e andrebbe limitato il più possibile. Per approfondire l’argomento leggi questo articolo.
6) Ordinare le proprietà css in ordine alfabetico
Se questo consiglio vi suona come follia, l’unica cosa che può farvi cambiare idea è provare. Questa regola per esempio:
div.{
margin: 0 0 3em 0;
padding: 0.7em 0.2em;
font-size: 1em;
border-bottom: 1px solid #888;
border-top: 1px solid #888;
}
Può diventare molto più leggibile ordinando le regole per iniziale:
div.{
border-bottom: 1px solid #888;
border-top: 1px solid #888;
font-size: 1em;
margin: 0 0 3em 0;
padding: 0.7em 0.2em;
}
Con un sistema del genere in quale punto della regola guardereste per trovare le proprietà del background? Ovviamente in cima. E per trovare z-index? In fondo. E text-align? Poco più su.
Sembra assurdo ma un sistema del genere può far risparmiare molto tempo nel rintracciare le proprietà ed aiuta ad eveitare proprietà duplicate.
7) Non esagerare con i commenti
Aggiungere commenti nel css è sempre utile, soprattutto se lavoriamo su progetti con lunghi tempi di sviluppo o se non siamo i soli a dover modificare i files, aggiungere qualche commento è una forma di cortesia sempre gradita. E’ però utile cercare di limitare i commenti a dove siano realmente necessari, evitando sintassi simili.
/*inizio header*/
#header{}
/*fine header*/
/*inizio contenuto*/
#contenuto{}
/*fine contenuto*/
In questo caso gli id già rendono chiare le funzioni dell’elemento e sarebbe possibile omettere i commenti ma nel caso si desideri mantenere qualche suggerimento nel codice sarebbe opportuno evitare di segnalare la fine e l’inizio della regola.
/*inizio header*/
#header{}
/*inizio contenuto*/
#contenuto{}
8) Dividere le regole su più fogli di stile
Sembra una banalità ma non lo è, avere più files da caricare è sicuramente un carico maggiore in termini di richieste al server ma permette una navigazione più veloce all’utente il quale scaricherà e salverà nella cache i css delle pagine man mano che prosegue nella navigazione. Questo è positivo perchè permette di non scaricare fogli di stile per pagine che non vedremo (quindi non si utilizza banda per dati non necessari) e una volta completata la visita del sito i dati rimarranno nella cache rendendo le future visite più veloci.
9) Utilizzare le regole per internet explorer separatamente
Utilizzare i commenti condizionali è un buon modo per evitare che i comuni browser facciano una chiamata al server in più, la differenza a livello di peso è inesistente se il css è interno alla pagina ma con un css esterno è possibile risparmiare una richiesta al server e il peso del css dedicato ad internet explorer.
<!--[if IE 6]> <link rel="stylesheet" href="css/ie.css" /> <![endif]-->
10) Utilizzare meglio le classi
Le classi risultano oltremodo utile per ridurre il peso del css, questo perchè una classe definisce una regola applicabile su più elementi a differenza degli id è quindi utile se nella pagina html esistono molti elementi con proprietà comuni. Ovviamente occorre fare attenzione a non esagerare aumentando il numero di classi sugli elementi e di conseguenza il peso della pagina html, un modo utile per valutare se le regole sono ben bilanciate è vedere quante regole sono definite come id e quante come classi, nel caso le prime superino le seconde è utile valutare quante volte vengono ripetuta ogni proprietà nel css.
Tag: css
