Un cliente mi ha chiesto di realizzare un sito dove l’immagine di sfondo si deve ridimensionare in base alla finestra del browser. Cercando sul web ho trovato diverse soluzioni basate su flash che  a mio avviso sono poco flessibili.

javascript-background-resize

Il progetto prevede un’immagine di sfondo diversa per ogni pagina e la possibilità di cambiarla in maniera abbastanza semplice.

Per questo e per altri motivi mi sono messo al lavoro su una soluzione javascript che risolvesse la cosa. Questo è il modo in cui ho risolto.

Partiamo da un semplice tag immagine:

<img id="imm3" src="sfondo.jpg" alt="" />

l’unico attributo della classe backimage sarà il position absolute per fare uscire l’immagine dal flusso della pagina e lo z-index per esssere sicuri che l’elemento venga mostrato sotto tutti gli altri.

Il nostro javascript verrà attivato ogni volta che viene ridimensionato il browser attraverso il comando:

window.onresize=resize;

Per prima cosa recuperiamo  l’immagine. per farlo si usa getElementById dove il nostro id sarà  imm3

Ora dobbiamo capire quanto grande è la finestra. Qui purtroppo bisogna tener conto di quale browser stiamo utilizzando. Le proprietà usate per recepire le dimensioni in pixel differiscono leggermente a seconda che si tratti di Internet Explorer o Firefox etc…

Fatto questo potremo andare ad impostare il corretto valore all’immagine attraverso gli attributi standard width e height. Javascript supporta infatti i css

Un problema che si è presentato è l’aspect ratio (larghezza / altezza) della finestra a confronto con quello dell’immagine. Bisogna prevedere una soluzione che adatti l’immagine al meglio a seconda che la finestra del browser sia più alta che larga o viceversa.

Una volta calcolati i due valori dobbiamo confrontarli e calcolare la dimensione dell’immagine che dobbiamo mostrare partendo dall’altezza o dalla larghezza.

L’esempio descritto potete vederlo a qui:

javascript-background-resize

Download

Mentre qui potete scaricarlo in formato zip:

Webquadro Javascript Background Resize (176)

Hai soluzioni diverse da proporre?

Ecco una lista di altre risorse che potrebbero interessarti:

  1. Estate, e c’è ancora tanto da fare!
  2. Quali Browser per i tuoi test?
  3. Il tuo browser è compatibile con Html5?
  4. Quali browser supportano CSS3 e HTML5