Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
* [tutorial] ancora menu orizzontali, ma stavolta con le gif
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
rebelia
Dio maturo
Dio maturo


Registrato: 17/07/03 08:22
Messaggi: 7987

MessaggioInviato: 21 Dic 2005 11:36    Oggetto: * [tutorial] ancora menu orizzontali, ma stavolta con le gif Rispondi citando

prendendo come partenza questo 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:

Codice:

<html>

<head>
<title>Rollover</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="esterno">
   <div id="header">
      <h1>Eusebio snc</h1>
   </div>
   <hr />
   <div id="menu">
      <ul>
         <li><a href="#"><span>HOME</span></a></li>
         <li><a href="#"><span>CHI SIAMO</span></a></li>
         <li><a href="#"><span>DOVE SIAMO</span></a></li>
         <li><a href="#"><span>COSA FACCIAMO</span></a></li>
         <li><a href="#"><span>ATTREZZATURA</span></a></li>
         <li><a href="#"><span>CLIENTI</span></a></li>
      </ul>
   </div>
   <hr />
   <div id="corpo">
      <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed facilisis nulla nec dolor.
      Suspendisse potenti. Fusce pretium, erat ullamcorper pulvinar pharetra, magna elit tristique nisl,
      adipiscing ornare dui diam quis ipsum. Nam ornare, pede eu pretium aliquet, nibh nisi dictum dui,
      eget venenatis lorem ligula vitae felis. Vestibulum gravida, velit at iaculis sagittis, lectus
      lectus porttitor odio, in ornare nibh orci id felis. In sed risus sit amet mi iaculis cursus.
      Nullam pharetra neque. Sed cursus sagittis nibh. Cras sollicitudin. Nam commodo dolor. Donec metus
      elit, nonummy eget, cursus a, vehicula sed, erat. Proin mi nisi, hendrerit a, porttitor a,
      ullamcorper id, metus. Cras nec ante.</p>
   </div>
   <hr />
   <div id="footer">
      <p>by reb - zn</p>
   </div>
</div>
</body>

</html>


come vedete non c'e' nulla di particolare rispetto al solito, tranne un tag span che contiene il testo del link del menu (il cancelletto nel tag a serve semplicemente a sostituire l'url di destinazione del link)

e ora il css:

Codice:

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 le immagini usate:

per la posizione "normale" e per la posizione "tasto premuto"

(immagini rigorosamente a casaccio: se usate queste, rinominatele, oppure createne di vostro gusto: la scelta migliore Mr. Green )

il codice:

Codice:

#menu {
   background: url(sfondo.gif) repeat-x;
   }


al div #menu do l'immagine di sfondo e la faccio ripetere per tutta la larghezza; c'e' chi preferisce fare un'immagine sottilissima, anche di un solo pixel per risparmiare peso, ma ho visto che a volte ci sono piccoli ritardi nel caricamento su tutta la larghezza, percio' personalmente preferisco farla larga dai 60 ai 100 pixel

Codice:
   
   #menu ul {
      list-style: none;
      height: 30px;
      margin: 0px 0px 0px 70px;
      padding: 0px;
      border-left: 2px solid #c0c0c0;
      }
      


- come al solito tolgo il pallino dalla lista (list-style: none;)
- do l'altezza: in questo modo sara' l'ul che determinera' l'altezza del div
- siccome usero' il comando float, devo determinare in questo modo quanto spazio lasciare da un lato e dall'altro, percio' daro' 70px a sinistra (ricordo che i 4 comandi si leggono "alto-destra-basso-sinistra")
- tolgo il padding; assieme a margin 0 serve per sopperire a qualche baco dei browser
- il cliente desidera un bordo tra i tasti: questa prima parte mi serve per il bordo laterale sinistro del primo tasto

Codice:

      #menu li {
         height: 30px;
         float: left;
         border-right: 2px solid #c0c0c0;
         margin: 0px;
         padding: 0px;
         }


- di nuovo do l'altezza
- faccio flottare l'elemento a sinistra; siccome prima ho 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 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" (!!!)

Codice:
      
   #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, ie legge l'effetto hover *solo* per il tag a, percio' e' ad 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 ed altezza
- allineamento centrale
- tolgo la sottolineatura dal link
- rimpicciolisco 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 cmq di una font a bastoncino, anziche' complicarmi la vita personalizzando ogni tasto, ho preferito riadattare la font verdana che uso normalmente per ottenere un effetto molto simile a quello desiderato
- rendo piu' evidente la font
- do colore bianco

nota: 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 itesti lunghi, perche' compromette la facilita' di lettura

Codice:
      
      #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 cambio e' l'immagine di sfondo o meglio: sovrascrivo l'immagine che sto usando per lo sfondo del div, con un'immagine di sfondo che dia l'effetto del tasto premuto

Codice:
   
   #menu a span {
      display: block;
      height: auto;
      width: 98%;
      margin-top: 9px;
      float: left;
      text-align: center;
      }


qua 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':
- ho dato anche allo span display block per renderlo "solido"
- ho dato altezza automatica, in questo modo l'altezza sara' la minima necessaria a contenere il testo
- ho dato una larghezza del 98% per evitare che "toccando" i bordi li allargasse, ma che cmq prendesse quasi tutta la larghezza dell'elemento contenitore
- ho dato un margin-top di 9 pixel per centrarlo verticalmente: questo mi e' concesso dall'aver dato precedentemente display block all'elemento
- l'ho fatto flottare a sinistra: siccome e' largo quasi quanto il contenitore, in realta' "flotta" poco, pero' "galleggia" nello spazio contenitore e gestisco meglio gli altri parametri
- centro il testo contenuto nell'elemento

Codice:

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


per completare l'effetto "bottone premuto", faccio in modo che quando sto 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

personalmente non amo molto i layout che mi obbligano ad ingabbiare troppo gli elementi, ma a volte e' interessante vedere come sia possibile ottenere gli stessi effetti a cui ci avevano usato le tabelle anche con i div Smile

ah! nel caso qualcuno desiderasse personalizzare pulsante per pulsante, e' sufficiente dare un id ad 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 ed utilizzabile nel caso vogliate usare una font particolare per i tasti, ad esempio

(*) nota: se facendo qualche prova ottenete risultati diversi (in meglio o in peggio o anche semplicemente lo stesso risultato ma con meno comandi), scrivetelo qua sotto, mi raccomando!


L'ultima modifica di rebelia il 21 Dic 2005 17:30, modificato 2 volte
Top
Profilo Invia messaggio privato HomePage
tas
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 03/10/05 08:59
Messaggi: 166
Residenza: Profondo nord

MessaggioInviato: 21 Dic 2005 17:12    Oggetto: Rispondi citando

Whistle
Top
Profilo Invia messaggio privato HomePage
rebelia
Dio maturo
Dio maturo


Registrato: 17/07/03 08:22
Messaggi: 7987

MessaggioInviato: 21 Dic 2005 17:24    Oggetto: Rispondi citando

tas ha scritto:
Whistle


piace? Mr. Green
Top
Profilo Invia messaggio privato HomePage
garak
Eroe
Eroe


Registrato: 09/06/05 14:17
Messaggi: 43
Residenza: Roma

MessaggioInviato: 26 Dic 2005 11:08    Oggetto: ma le immagini? Rispondi citando

Le immagini non si vedono mica tanto bene....
Top
Profilo Invia messaggio privato HomePage Yahoo
rebelia
Dio maturo
Dio maturo


Registrato: 17/07/03 08:22
Messaggi: 7987

MessaggioInviato: 26 Dic 2005 12:05    Oggetto: Re: ma le immagini? Rispondi citando

garak ha scritto:
Le immagini non si vedono mica tanto bene....


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 Smile
Top
Profilo Invia messaggio privato HomePage
{giovanni}
Ospite





MessaggioInviato: 23 Gen 2008 13:43    Oggetto: IE bug, a:hover non torna NON hover Rispondi

con questo metodo, senza il float degli elementi, ho notato che su IE 6 una volta passati sopra ad a, la gif non scompare togliendo il puntatore.
Top
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi