Bară de navigare
21 Mar 2008Am observat că sunt destul de mulţi programatori în devenire ce nu ştiu (sau întâmpină greutăţi) să facă o bară de navigare cu fundal diferit la hover. Este o metodă ce o folosesc foarte des, fără să am probleme în diferite browsere.
PASUL I
Meniul propriu zis este realizat folosind o listă neordonată:
Primul pas este aşezarea orizontală a listei:
#slidingDemo li{
list-style:none;
float:left;
margin:0 10px;
}
Întrucât IE6 tratează un pic diferit float-urile şi marginile, adăugăm şi
* html #slidingDemo li {display:inline}
Este un hack ce este interpretat doar de IE6, neafectând funcţionarea în browserele adevărate.
PASUL II
Imaginea de fundal trebuie să fie mai lată decât textul şi este necesar să aibe două „stări” (normal şi hover), după care purcedem la stilizarea link-urilor.

#slidingDemo li a{
display:block;
background:url(buton.gif) no-repeat left top;
height:26px;
padding-left:10px;
color:#fff;
font:700 .88em/26px Arial, Helvetica, sans-serif;
text-decoration:none;
}
Un stil asemănător se aplică si la elementul SPAN din interiorul link-ului:
#slidingDemo li a span {
display:block;
background:url(buton.gif) no-repeat right top;
height:26px;
line-height:26px;
margin-right:-3px;
padding-right:10px
}
Dacă imaginea nu este transparentă, marginea negativă NU este necesară!
În momentul de faţă, rezultatul arată cam aşa (click).
PASUL III
După ce meniul arată corespunzător, este necesar să-i face şi un efect la hover. Cum am zis mai devreme, imaginea are două stări: una normală (default, folosită mai sus) şi una pentru hover, ce o vom folosi în continuare:
#slidingDemo li a:hover {background-position:left bottom}
#slidingDemo li a:hover span {background-position:right bottom}
PASUL III.1
Întrucât IE6 este un pic mai… special, are nevoie de o atenţie deosebită. Elementele de tip block au lăţime 100% şi se comportă ca atare. Pentru a rezolva acest bug, ne vom folosi de un alt bug: width (ca şi height) se comportă ca şi min-width. Soluţia fiind aşadar:
* html #slidingDemo li a,
* html #slidingDemo li a span {
width:1%;
white-space:nowrap;
cursor:pointer;
}
white-space:nowrap este folosit pentru a evita experienţe neplăcute.
O altă problemă este atunci când span are margine negativă, depăşind lăţimea elementului părinte (a). Soluţia cea mai la îndemână găsită a fost un z-index mărit şi o poziţionare relativă (pentru a permite funcţionarea z-index):
* html #slidingDemo li a span {
position: relative;
z-index: 2;
}
Rezultatul final aici (click).



nice…tnx
simplu si la obiect…super
Simpatic:D
Nice, de mult cautam asa ceva.
Si cum pastrezi backgroundul de hover pentru un item activ?
îi dai o clasă la link-ul activ, de ex. class=”s” iar în css adaugi:
#slidingDemo li a:hover, #slidingDemo li a.s {background-position:left bottom} #slidingDemo li a:hover span, #slidingDemo li a.s span {background-position:right bottom}Pregătesc un tutorial şi mai frumos (tot despre meniuri) dar cu puţin jQuery (sau orice altă librărie). Ţine aproape!
Gracias
Buna sunt Nanni mi-ai raspuns cu acest exemplu la o intrebare pe care am pus-o pe forumul php, am incercat sa copiez exemplul in calac si nu imi apare????? am internet explorer 6 de ce???
nanni, acum am vazut si eu intrebarea ta…pai cum observi..ionut foloseste 2 imagini..background:url(buton.gif) deci iei imaginile si le salvezi in folderul cu codul css …. sper ca team ajutat…foarte frumos tutorial.:)
PS : de adaugat la cele 2 hovere un cursor:pointer; Pare mai intregit (asta pentru IE)
[...] Practic însă, eşti nevoit, în unele cazuri să calci şi strâmb. De exmplu, butoanele sliding doors. Da, merge, e ok. Dar span-ul din interiorul linkului nu „spune” [...]