manzelle_bidule a écrit :
alors que le javascript comme je sais pas comment ça marche, bah je copie bêtement et après je sais pas comment le modifier
A priori, tu n'aurais pas besoin de modifier la partie javascript, mais uniquement la CSS qui lui est associée.
Le script est indépendant du nombre de liens, de leur id, classes ou autres particularités. La seule modification éventuellement nécessaire aurait lieu si tu changes l'id du menu (
<ul id="menu">), puisque celle-ci est utilisée par le script. Il suffit alors de modifier
getElementById('menu') en conséquence.
Une remarque, d'ailleurs: en fonction de tes critères de précision au pixel près, le problème rencontré ci-dessous dans IE avec la solution full CSS peut-être justement une raison d'opter pour la solution javascript+CSS.
manzelle_bidule a écrit :
En fait c'est quand j'essai d'indiquer un background par défaut (donc j'enlève le right : 5000px et je met right : 0px à la place)... Le background ce met, sauf qu'après les autres backgrounds n'apparaissent pas quand on survol les liens, sauf quand on survol le dernier (aller savoir pourquoi ! )
C'est normal (j'aurais dû le préciser ci-dessus) : les backgrounds successifs sont empilés les uns sur les autres dans l'ordre du code HTML. Le dernier
<span> est sur le dessus de la pile.
Pour que les autres
<span> puissent apparaître, il faut, au
:hover, leur donner une valeur de
z-index supérieure à 0. Ce qui donne :
ul {
position: relative;
width: 250px;
}
a {
text-decoration: none;
}
a span {
position: absolute;
right: 0;
top: 0;
width: 150px;
height: 150px;
background: url(images_test/150_150.png) no-repeat left top;
}
a:hover {
text-decoration: underline;
}
a:hover span {
z-index: 1;
}
a#item1:hover span {
background-image: url(images_test/150_150_blue.png);
}
a#item2:hover span {
background-image: url(images_test/150_150_green.png);
}
a#item3:hover span {
background-image: url(images_test/150_150_orange.png);
}
a#item4:hover span {
background-image: url(images_test/150_150_purple.png);
}
a#item5:hover span {
background-image: url(images_test/150_150_red.png);
}
Avec comme HTML:
<ul>
<li><a href="#" id="item1">lorem ipsum<span></span></a></li>
<li><a href="#" id="item2">lorem ipsum<span></span></a></li>
<li><a href="#" id="item3">lorem ipsum<span></span></a></li>
<li><a href="#" id="item4">lorem ipsum<span></span></a></li>
<li><a href="#" id="item5">lorem ipsum<span></span></a></li>
</ul>
Détail amusant: IE5.x - 6.0 windows ne peut pas modifier l'ordre d'empilement au :hover comme attendu (le bug est corrigé dans IE7).
Il faut donc procéder autrement avec lui, en lui réservant le code CSS nécessaire par une feuille de style en commentaires conditionnels (voir la FAQ du forum et
cet article pour plus de détails.
Grosso modo, pour IE, ce sont les liens eux-mêmes qui vont être réempilés au survol. Ce qui va également nécessiter leur déplacement vertical.
La CSS additionnelle pour IE, à lier
après la CSS "normale", sera du type:
a:hover {
position: relative;
z-index: 1;
}
a#item2:hover span {
top: -1.1em;
}
a#item3:hover span {
top: -2.2em;
}
a#item4:hover span {
top: -3.3em;
}
a#item5:hover span {
top: -4.4em;
}
Le déplacement des liens est indiqué ici en
em, grossièrement, sur la base d'une hauteur de ligne par défaut. En fonction de la présentation exacte de ton menu, il sera nécessaire d'ajuster ces valeurs en sachant qu'il y aura de légères différences de résultat d'un pixel en plus ou en moins selon les configurations utilisateurs : la conversion em->px entraîne un arrondi variable.
Pour éviter ces différences et obtenir l'effet au pixel près pour tous les utilisateurs, il faut gérer les hauteurs de liens et leurs déplacement directement en px.
Enfin, dernier détail: IE7 ne doit pas recevoir cette CSS corrective. Attention donc à bien utiliser la condition
if lte IE 6.
Modifié par Laurent Denis (23 Jul 2006 - 06:24)