Bottoni rollover facili col CSS


Bottoni rollover facili col CSS

Per chi ancora usa Javascript per inserire bottoni in rollover all’interno delle proprie web application illustro questo metodo CSS semplice ma molto funzionale.
I vantaggi rispetto all’uso del Javascript sono il funzionamento sui browser con Javascript disabilitato, implementazione velocissima, migliore leggibilità del testo da parte del browser e dei motori di ricerca e notevole risparmio di tempo nel caso vogliate cambiare o eliminare l’effetto in seguito.

COME FUNZIONA

Il CSS rollover in questione si serve di immagini in background e dell’evento :hover del tag <A>.
Un’immagine, contenente sia il disegno di rollout che di rollover, viene usata come background mostrando solo la prima porzione, quella di rollout: passando l’utente sopra all’immagine col mouse viene spostata la posizione del background e visualizzata la porzione di rollover, creando l’effetto.
Capirete ancora meglio vedendo lo script alla fine della pagina.

CREIAMO L’IMMAGINE

Come detto prima, avremo bisogno di un’unica immagine divisa in 2 porzioni, le quali dovranno essere della stessa grandezza in pixel.

Quindi creiamo prima l’immagine di rollout, quando l’effetto non è attivo: come al solito userò il logo del sito.
Apriamo Photoshop (nessuno comunque ci vieta di usare altri programmi di grafica ma questo tutorial illustra anche qualche comando del programma Adobe :) ) e la nostra immagine, premiamo Ctrl+R (o se preferite cliccate su View->Rulers) per attivare il RULER, il righello, che ci servirà per centrare al massimo il bottone, blocchiamo il suo livello selezionandolo dalla palette dei livelli e quindi cliccando sul lucchetto, selezionamo il livello di background, torniamo all’immagine e clicchiamo con il pulsante sinistro tenendo premuto sui numeri del righello a sinistra per creare una GUIDA, spostiamola fino al centro dell’immagine, dovreste sentire che si posiziona da sola (questo perchè il programma ci aiuta a posizionarle al centro) quindi rilasciate il pulsante del mouse.
Eseguite la stessa operazione creando una guida verticale cliccando sul righello in alto.
Ora riselezionate il livello con il bottone, togliete il lucchetto, posizionatelo più o meno al centro servendovi delle guide.

Ora premete Ctrl+Alt+C (oppure cliccate su Image->Canvas Size…), segnatevi altezza e larghezza che ci serviranno per il CSS, posizionate l’anchor (l’ancora) a sinistra cliccando sulla freccia a sinistra, quindi raddoppiate l’ampiezza, nel mio caso passerò da 150 pixel a 300, e cliccate OK.
La parte vuota a destra conterrà il nostro effetto di rollover.

Usare il canvas size

Nel mio caso ho semplicemente cliccato sul bottone e sullo sfondo e tenendo premuto Alt ricliccato per duplicare i livelli, poi ho spostato il nuovo livello nella parte a destra, che è la perfetta dell’immagine intera, occupandola tutta.
Le guide ormai non ci servono più quindi possiamo anche toglierle cliccandoci sopra e riportandola sopra il righello.

L'immagine pronta

Per creare un effetto di luminosità al passaggio del mouse, ho semplicemente cambiato i colori del logo usando i Gradient Map, li trovate cliccando su Image->Adjustments->Gradient Map…, voi potete utilizzare gli effetti che preferite, tipo un effetto di Blur in rollout che va via in rollover o del bagliore, dato spazio alla vostra creatività!

Ora l’immagine è pronta, possiamo salvarla in gif, jpg o png e tornare a lavorare sulla nostra pagina.

E ORA IL CODICE…

Per far funzionare questo trucco, ogni bottone deve avere un <div> parent del tag <a> ossia un div che contiene il nostro link.
L’immagine non viene caricata sull’HTML, sarà il CSS ad assegnare al div lo sfondo che ci serve.
Al div verrà data la proprietà class=button_ex.
Ecco il codice da inserire nella pagina:

<div class="button_ex"><a href="http://www.w3facile.com"></a></div>

La parte più importante sta nel CSS, il nostro foglio di stile, dove andremo ad inserire questo codice:

.button_ex {
width: 150px;
height: 155px;
}

.button_ex a {
display: block;
width: 150px;
height: 155px;
background: url(images/sphere.jpg) no-repeat top left;
}

.button_ex a:hover {
background-position: top right;
}

Come avviene la magia?
Prima dichiariamo il tag <A> come "block", altrimenti non siamo in grado di assegnare altezza e larghezza essendo un elemento inline con dimensioni pari al contenuto, poi assegniamo sia al tag <DIV> che al tag <A> le dimensioni che ci siamo segnati prima, che corrispondono a metà dell’immagine.

Infine la parte più importante: sull’evento :hover del tag <A> cambiamo la posizione del background da left a right creando l’effetto al passaggio del mouse.

Una volta realizzata questa tecnica possiamo implementarla chiudendo i tag <A> all’interno di <DIV> con classe button_ex ed eliminare o cambiare poi l’effetto modificando solo le linee del css, a differenza del Javascript dove avremmo dovuto cercare tutti i link nelle nostre pagine.
In questo caso ho utilizzato uno sfondo con una scritta, ma credo che l’uso che ne farete voi sarà quello di creare sfondi standard per i vostri bottoni dove la scritta sarà il testo del tag <A>.
Se poi questa spiegazione vi offrirà spunto per nuove cose o effetti non mancate di segnalarmele commentando su questo sito :)

Ecco l’effetto finale nella sua semplicità ed immediatezza.

Cerca: , , , ,

Ritieni questo post utile o interessante?
Condividi e Segnala

Leggi anche:

10 commenti per “Bottoni rollover facili col CSS”

  1. CSS Sprite, cosa sono e come migliorano il caricamento della pagina | W3 facile - Risorse, tutorial, notizie sul Web per lo sviluppatore ed il webdesigner ha detto:

    […] capire come funziona e cos’è un CSS Sprite facciamo riferimento ad un tutorial precedente dove si spiegava come utilizzare un’unica immagine per creare dei bottoni con effetto di […]

  2. daniele ha detto:

    ciao,hai un esempio completo per farmi vedere dove inserire i ccs creando bottoni rollover?
    grazie in anticipo

  3. daniele ha detto:

    ciao,hai un esempio completo per farmi vedere dove inserire i css creando bottoni rollover?
    grazie in anticipo

  4. R.A.M.Page ha detto:

    Beh, il codice CSS sta dentro un file .CSS che viene caricato dentro la pagina, tra i tag , tipo l’esempio qui in basso, che puoi vedere anche dal sorgente.

  5. Atlantis X ha detto:

    Ciao!

    In effetti questo uso del roll delle immagini tramite ridefinizione tag nel css snellisce il lavoro del browser e assicura il funzionamento in molti browser attualmente usati.
    Per assurdo si potrebbe anche tralasciare il div impostando, nella ridefinizione del tag A, il cambiamento della posizione dell’immagine. Che ne pensate?
    Con fantasia,

    Atlantis X

  6. R.A.M.Page ha detto:

    Certo, nel caso di pochi link è più funzionale e leggibile ma se consideri un menù con almeno 5-6 collegamenti tanto vale inserirli all’interno di un DIV e definire la classe solo per questo piuttosto che assegnare la stessa ad ogni A.
    Magari nell’esempio potevo evitare di assegnare dimensioni al DIV che lo contiene, sono inutili.

  7. Marco Grazia ha detto:

    Invece dell’elemento DIV usa una lista come è giusto fare quando devi implementare un menù.
    In questo modo puoi mantenere facilmente la struttura del menù anche a fogli di stile disabilitati e inoltre semanticamente sei corretto in quanto stai realizzando una lista di link, ovvero un menù.

  8. R.A.M.Page ha detto:

    Concordo assolutamente :)
    Nel caso dei menù la scelta migliore ricade nell’UL (Unorderd List) dove gli LI (List Item) contengono i link.

  9. Klavus ha detto:

    E per affiancare più bottoni con il rollover come si fa???

  10. R.A.M.Page ha detto:

    In questo caso basta aggiungere alla classe button_ex la proprietà float: left;, comunque ci sono anche altri modi, tipo l’UL sopra citato che puoi vedere in un tutorial anche in questo articolo: CSS SPRITE: cosa sono e come migliorano il caricamento della pagina

Rispondi al post