22 maggio 2009

Quanto sono ottimizzate le pagine del tuo sito web?

scritto daMauro Accornero

Lavorando su un sito web quanto tempo dedichi all’ottimizzazione? Definisci una fase del progetto dedicata a quest’operazione oppure crei il sito seguendo a priori determinati standard di produzione per garantire un buon risultato?

In entrambi i casi dovresti pensare al fatto che prima o poi dovrai accertarti di tempi di caricamento, peso delle pagine e numero di elementi presenti.

Per fare questo ti occorrono stime certe da poter confrontare con il tuo target di utenti e valutare le possibili soluzioni.

Leggi l’articolo completo

Tag: , , ,

17 maggio 2009

5 ottimi links sui css che non puoi perderti

scritto daMauro Accornero

La domenica è un buon giorno da dedicare alla lettura di tutto ciò che ci è passato sotto al naso ma non si è potuto leggere a causa del poco tempo durante la settimana.

Per oggi ti propongo 5 spunti interessanti sui css che penso possano interessarti:

Leggi l’articolo completo

Tag: , , ,

14 maggio 2009

Come posizionare gli elementi in una pagina html con i css

scritto daMauro Accornero

La proprietà position per gli elementi html è stata introdotta nella versione 2 dei CSS dal w3c, il loro utilizzo è molto semplice e spesso vengono utilizzati impropriamente da utenti poco esperti per la realizzazione del layout.

Come vedremo in questo tutorial il posizionamento dei vari elementi richiede qualche competenza per non compromette la compatibilità del layout nei vari browser.

La proprietà position

La proprietà position ammette quattro valori:  static, relative, absolute e fixed. Esistono grandi differenze tra questi quattro valori che occorre capire per utilizzarli al meglio.

Posizionamento statico

Il valore static è attribuito di default ad ogni elemento ed ignora qualunque tipo di offset attribuito all’elemento come top, left, bottom e right. Questo tipo di posizionamento non altera la posizione dell’elemento e viene implicitamente attribuito ad ogni elemento della pagina com’è possibile vedere in questo esempio.

Posizionamento relativo

Il valore relative altera il posizionamento di un elemento tramite un offset impostato con le proprietà top, left, bottom e right. Gli altri elementi della pagina non mutano il proprio posizionamento in quanto il posizionamento relativo non estrae dal flusso l’elemento ma lo colloca su un livello superiore.

In questo esempio possiamo notare come il posizionamento relativo collochi l’elemento sopra un elemento con posizionamento statico. Per gestire la sovrapposizione degli elementi è possibile utilizzare z-index con un valore inferiore a 0 (avendo gli elementi della pagina z-index con valore 0 di default) come in questo esempio.

Posizionamento assoluto

Il valore absolute posiziona un elemento in relazione all’elemento html o all’elemento genitore che ha un posizionamento diverso da statico. Bisogna ricordare che a differenza del posizionamento relativo quello assoluto colloca l’elemento al di fuori del tradizionale flusso della pagina influenzando quindi il layout.

In questo esempio vediamo come due elementi con posizionamento assoluto si comportino in maniera diversa a causa del riferimento per la posizione.

Il primo div infatti calcola l’offset partendo dall’elemento genitore (con id relativo) mentre il secondo non avendo un elemento genitore con posizionamento diverso da statico prende come riferimento l’elemento html.

Occorre ricordare che Internet Explorer 6 e versioni precedenti presentano numerosi bug sul posizionamento assoluto. Una buona soluzione per risolvere queste problematiche è quello di settare un’altezza dell’elemento contenitore a 0 solo per Internet Explorer 6 e precedenti.

<!--[if lte IE 6]>
div{height:0;}
<![endif]-->

Posizionamento fisso

Il valore fixed estrae un elemento dal flusso e lo posiziona in base all’offset (specificato con top, left, bottom e right) in relazione all’elemento html.

Il posizionamento fisso può sembrare simile al posizionamento assoluto, ma non rispetta la regola del genitore con posizionamento diverso da statico, infatti utilizza sempre come riferimento l’elemento html, utilizzando il precedente esempio con questo tipo di posizionamento notiamo che i due div si sovrappongo in cima alla pagina.

Un’altra differenza rispetto al posizionamento assoluto è che  ignora lo scroll nelle pagine con contenuto più alto dell’area visibile nel browser e mantiene la posizione definita in relazione alla finestra del browser.

In questo esempio vediamo come si comporta un elemento con posizionamento assoluto ed uno con posizionamento fisso in una pagina con molto contenuto.

Occorre inoltre ricordare che il valore fixed per la proprietà position non è supprtato da Internet Explorer 6 e versioni precedenti.

Tag: , ,

11 maggio 2009

Data uri scheme e base 64 nei fogli di stile e nell’html

scritto daMauro Accornero

Qualche tempo fa pubblicai un articolo su Italian Web Design dove veniva spiegato come validare il codice css incluso in Lightbox 2.0, la problematica era semplice, il codice css funziona ma presenta un errore nel css che viene riportato dal validatore w3c.

L’errore è dovuto ad un non corretto utilizzo del Data Uri Scheme in Base64.

background-image: url(data:image/gif;base64,AAAA);

La seguente proprietà andrebbe infatti scritta così:

background-image: url('data:image/gif;base64,AAAA');

Il seguente codice viene infatti validato senza problemi, la domanda che ci si potrebbe porre è perchè utilizzare questo metodo per inserire un’immagine di background?

Molto semplice, il Data Uri Scheme altro non è che uno schema di stringhe che definiscono una risorsa, in questo caso per esempio non abbiamo un URI tradizionale che richiede al server un’immagine, bensì abbiamo una stringa convertita in Base64 (che è l’encoding) interpretabile dal browser come immagine.

Al momento il Data Uri Scheme è supportato da tutti i browser basati su Gecko (firefox e derivati), Opera, Safari ed Internet Explorer 8 che però limita il peso della stringa a 32 kb.

Questa tecnica è molto appetibile per ridurre le chiamate al server ed applicabile nel css quanto nell’html.

Utilizzando la precedente stringa nell’url di un’immagine si può procede in questo modo:

<img src="data:image/gif;base64,AAAA" alt="Testo alternativo" />

La stringa in questione risulta vuota, esistono molti tool online che consentono di convertire un’immagine in una stringa in base64, un esempio reale di immagine convertita in base 64 è visibile a questo link.

Guardando il codice la stringa risulta molto lunga essendo un jpg complesso, di norma è consigliabile utilizzare questa tecnica in alternativa ad un’immagine  nel caso di un tracking con javascript, per esempio per gestire le API di Google o per monitorare lo stato di una newsletter inviata agli utenti.

Per maggiori informazioni in merito consiglio questo articolo dedicato all’utilizzo del Data Uri Scheme nei fogli di stile.

Tag: ,

9 maggio 2009

10 modi per ottimizzare i fogli di stile

scritto daMauro Accornero

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: