Creare menu orizzontali, stavolta con le Gif

Tutorial di Html (dal forum "Linguaggi per il Web" dell'Olimpo Informatico).



[ZEUS News - www.zeusnews.it - 26-12-2005]

Prendendo come partenza un tutorial dove si crea un menu orizzontale con effetto onmouseover usando i colori, vediamo ora di crearne uno usando invece delle immagini come sfondo e di risolvere tutti i problemi creati dalla difficolta' di ottenere un accettabile crossbrowsing. Partiamo dal codice (completo) della pagina:

Come vedete non c'e' nulla di particolare rispetto al solito, tranne il tag span che contiene il testo del link del menu. Il cancelletto nel tag a serve semplicemente a sostituire la Url di destinazione del link. Il Css invece è:

body {
   background: #fff;
   color: #000;
   margin: 0px;
   padding: 0px;
   text-align: center;
   font-family: verdana, arial, helvetica, sans-serif;
   font-size: 70%;
   }

hr, h1 {
   display: none;
   }
   
#esterno {
   width: 750px;
   border: 1px solid #fff;
   margin: 10px auto auto auto;
   text-align: left;
   }

#header {
   height: 150px;
   border: 1px solid #999;
   margin-bottom: 20px;
   background: url(logo.gif) no-repeat center center;
   }

#menu {
   background: url(sfondo.gif) repeat-x;
   }
   
   #menu ul {
      list-style: none;
      height: 30px;
      margin: 0px 0px 0px 70px;
      padding: 0px;
      border-left: 2px solid #c0c0c0;
      }
      
      #menu li {
         height: 30px;
         float: left;
         border-right: 2px solid #c0c0c0;
         margin: 0px;
         padding: 0px;
         }
      
   #menu a {
      display: block;
      width: 100px;
      height: 30px;
      text-align: center;
      text-decoration: none;
      font-size: 80%;
      font-weight: bold;
      color: #fff;
      }
      
      #menu a:hover {
         background: url(sfondo_abbassato.gif) repeat-x;
         }
   
   #menu a span {
      display: block;
      height: auto;
      width: 98%;
      margin-top: 9px;
      float: left;
      text-align: center;
      }

   #menu a:hover span {
      margin-top: 10px;
      }

#corpo {
   border: 1px solid #999;
   margin: 20px 0px 20px 0px;
   padding: 20px;
   }

#footer {
   border: 1px solid #999;
   padding: 10px 20px 10px 20px;
   text-align: right;
   }
Tralasciando header, corpo e footer che non hanno nulla di particolare, concentriamoci sul div menu; intanto ecco le immagini usate per la posizione "normale" e per la posizione "tasto premuto" (rigorosamente a casaccio: se usate queste, rinominatele, oppure createne di vostro gusto).

Il codice:

#menu {
   background: url(sfondo.gif) repeat-x;
   }
Al div #menu diamo l'immagine di sfondo e la facciamo ripetere per tutta la larghezza; c'e' chi preferisce fare un'immagine sottilissima, anche di un solo pixel per risparmiare peso, ma a volte ci sono piccoli ritardi nel caricamento su tutta la larghezza, percio' personalmente la nostra preferenza va a una larghezza dai 60 ai 100 pixel.
   #menu ul {
      list-style: none;
      height: 30px;
      margin: 0px 0px 0px 70px;
      padding: 0px;
      border-left: 2px solid #c0c0c0;
      }
- Come al solito togliamo il pallino dalla lista (list-style: none;)
- Diamo l'altezza: in questo modo sara' ul che determinera' l'altezza del div.
- Siccome useremo il comando float, dobbiamo determinare in questo modo quanto spazio lasciare da un lato e dall'altro, percio' daremo 70px a sinistra (ricordiamo che i 4 comandi si leggono "alto-destra-basso-sinistra").
- Togliamo padding; assieme a margin 0 serve per sopperire a qualche baco dei browser.
- Il cliente desidera un bordo tra i tasti: questa prima parte ci serve per il bordo laterale sinistro del primo tasto.
      #menu li {
         height: 30px;
         float: left;
         border-right: 2px solid #c0c0c0;
         margin: 0px;
         padding: 0px;
         }
- Di nuovo diamo l'altezza.
- Facciamo flottare l'elemento a sinistra; siccome prima abbiamo dato un margin-left di 70 pixel a ul, il primo li partira' da quel punto, mentre gli altri si appoggeranno in sequenza.
- border right: uno per ogni li completa la sequenza di bordi tra i tasti.
- margin e padding sono a 0 sempre per il crossbrowsing: a differenza di quanto si potrebbe pensare, il comando list-style: none non e' letto dai browser come "togli il punto elenco" (!)
   #menu a {
      display: block;
      width: 100px;
      height: 30px;
      text-align: center;
      text-decoration: none;
      font-size: 80%;
      font-weight: bold;
      color: #fff;
      }
Sebbene sia applicabile anche ad altri elementi, Internet Explorer legge l'effetto hover solo per il tag a, percio' e' a esso che siamo costretti a darlo.

- display block per rendere a (elemento in linea, quindi a dimensione variabile dal contenuto) un elemento block, quindi a dimensione determinabile da noi.
- Larghezza e altezza
- Allineamento centrale
- Togliamo la sottolineatura dal link.
- Rimpiccioliamo la font; il cliente aveva segnalato un sito con una particolare font molto piccola che usava pero' le Gif per ogni tasto; siccome si trattava comunque di una font a bastoncino, anziche' complicarci la vita personalizzando ogni tasto, abbiamo preferito riadattare la font verdana per ottenere un effetto molto simile a quello desiderato.
- Rendiamo piu' evidente la font.
- Diamo colore bianco.

Anche la scelta di usare il maiuscolo per il testo dei pulsanti deriva da questa preferenza estetica del cliente; se la scelta e' accettabile in testi brevi quali i nomi dei pulsanti, in genere e' preferibile NON usare il maiuscolo per i testi lunghi, perche' compromette la facilita' di lettura.

      #menu a:hover {
         background: url(sfondo_abbassato.gif) repeat-x;
         }
Tutti i parametri impostati per a sono validi anche per hover. L'unica cosa che cambia e' l'immagine di sfondo, o meglio: sovrascriviamo l'immagine che stiamo usando per lo sfondo del div con un'immagine di sfondo che dia l'effetto del tasto premuto.
   #menu a span {
      display: block;
      height: auto;
      width: 98%;
      margin-top: 9px;
      float: left;
      text-align: center;
      }
Qui il problema era fare in modo che il testo restasse comunque centrato in verticale/orizzontale e leggibile anche con l'effetto hover del tasto senza sfasciare il layout, percio':
- Abbiamo dato anche allo span display block per renderlo "solido".
- Abbiamo dato altezza automatica: in questo modo l'altezza sara' la minima necessaria a contenere il testo.
- Abbiamo dato una larghezza del 98% per evitare che "toccando" i bordi li allargasse, ma che comunque prendesse quasi tutta la larghezza dell'elemento contenitore.
- Abbiamo dato un margin-top di 9 pixel per centrarlo verticalmente: questo ci e' concesso dall'aver dato precedentemente display block all'elemento.
- L'abbiamo fatto flottare a sinistra: siccome e' largo quasi quanto il contenitore, in realta' "flotta" poco, pero' "galleggia" nello spazio contenitore e gestiamo meglio gli altri parametri.
- Centriamo il testo contenuto nell'elemento.
   #menu a:hover span {
      margin-top: 10px;
      }
Per completare l'effetto "bottone premuto", facciamo in modo che quando stiamo sul pulsante il testo si abbassi di un pixel. Et voila'!

Alcuni comandi sono incomprensibili, ma purtroppo necessari per avere un minimo di sicurezza sulla stabilita' crossbrowsing del nostro layout. Per quanto riguarda l'accessibilita', il layout mantiene la struttura semantica corretta data dall'uso della lista per l'elenco dei link e permette anche un modesto ingrandimento senza sfasciarsi.

Nel caso qualcuno desiderasse personalizzare pulsante per pulsante, e' sufficiente dare un id a ogni tag li e determinare le caratteristiche di ogni #qualcosa a e di ogni #qualcosa a:hover, e di dare a #menu a span {display: none;}: altrettanto efficace e utilizzabile, per esempio nel caso vogliate usare una font particolare per i tasti.

Se facendo qualche prova ottenete risultati diversi (in meglio o in peggio, o anche semplicemente lo stesso risultato ma con meno comandi), scrivetelo tra i commenti!

Se questo articolo ti è piaciuto e vuoi rimanere sempre informato con Zeus News ti consigliamo di iscriverti alla Newsletter gratuita. Inoltre puoi consigliare l'articolo utilizzando uno dei pulsanti qui sotto, inserire un commento (anche anonimo) o segnalare un refuso.
© RIPRODUZIONE RISERVATA

Commenti all'articolo (5)

{giovanni}
IE bug, a:hover non torna NON hover Leggi tutto
23-1-2008 13:43

sono immagini a caso fatte in tutta fretta, anziche' usare 'ste qua che ho postato io, crea due gif alte 30px e larghe 100 di tuo gusto/con i colori che ti servono ed usa quelle :) Leggi tutto
26-12-2005 12:05

ma le immagini? Leggi tutto
26-12-2005 11:08

piace? :mrgreen: Leggi tutto
21-12-2005 17:24

:whistle:
21-12-2005 17:12

La liberta' di parola e' un diritto inviolabile, ma nei forum di Zeus News vige un regolamento che impone delle restrizioni e che l'utente e' tenuto a rispettare. I moderatori si riservano il diritto di cancellare o modificare i commenti inseriti dagli utenti, senza dover fornire giustificazione alcuna. Gli utenti non registrati al forum inoltre sono sottoposti a moderazione preventiva. La responsabilita' dei commenti ricade esclusivamente sui rispettivi autori. I principali consigli: rimani sempre in argomento; evita commenti offensivi, volgari, violenti o che inneggiano all'illegalita'; non inserire dati personali, link inutili o spam in generale.
E' VIETATA la riproduzione dei testi e delle immagini senza l'espressa autorizzazione scritta di Zeus News. Tutti i marchi e i marchi registrati citati sono di proprietà delle rispettive società. Informativa sulla privacy. I tuoi suggerimenti sono di vitale importanza per Zeus News. Contatta la redazione e contribuisci anche tu a migliorare il sito: pubblicheremo sui forum le lettere piu' interessanti.
Sondaggio
Quando guidi in città, chi non vorresti incontrare nel traffico?
La Scuola Guida
Il neopatentato
La donna che si trucca in coda
Il manager che legge un quotidiano in coda
L'imbranata: parte in terza e si spegne il motore
L'avvoltoio dei parcheggi: continua a girare fino trovarne uno
La mamma con il SUV davanti alla scuola
L'indeciso sulla strada da prendere
Il vecchio col cappello
Il camion della nettezza urbana

Mostra i risultati (2711 voti)
Settembre 2026
La Cina accelera sui robot umanoidi militari
L'IA trova migliaia di vulnerabilità nel kernel Linux: manutentori sotto pressione
Cosa accadrà dopo lo scoppio della bolla
Windows 11, gli aggiornamenti richiederanno un solo riavvio al mese
Windows, come recuperare spazio su disco con la pulizia dell'archivio di sistema
Agosto 2026
Da Nokia un telefono retrò che funziona da powerbank e ha una torcia potentissima
L'IA minaccia lavoro, sicurezza e sviluppo umano. Ma Bill Gates ha la soluzione
Dopo 28 anni finisce la disputa su Linux: chiuso il caso iniziato da SCO nel 1998
Windows ha un comando nascosto che riduce l'ingombro del sistema
AliExpress usa l'audio dei dispositivi per tracciare gli utenti
La BCE teme la bolla dell'IA
DayFrame, il rivale di Outlook che riporta in vita le Live Tiles di Windows 8
Tu, il truffato!
Office si ferma su Windows 10: Microsoft congela le funzioni
ChatGPT arriva su Linux: disponibile l'app desktop in anteprima
Tutti gli Arretrati
Accadde oggi - 8 settembre


web metrics