Bien en espérant ne pas me planter cette fois ci !

Bonjour,
Toute nouvelle alors j'espère être dans la bonne catégorie ! ma question concerne un problème sur les sprite. J'ai utilisé l'exemple 2 du tuto des sprites.
Tout fonctionne correctement, j'ai remplacé #bandeau par #fd_menu et menugauche par #menu-fr (n'ayant pas besoin de menudroite je l'ai supprimé), mon menu de navigation est enregistré sous nav_fr1.php
Comme dit précédemment tout fonctionne parfaitement.... sauf que lorsque j'intègre mon menu à ma page via <?php include("/nav_fr1.php"); ?> les fonctions hover, active,focus ne fonctionnent plus dès que je remplace le <a href="#" .....> par <a href="nom_de_ma_page.php">
Plus bas le code complet.... j'ai réuni le code sur une page pour plus de compréhension mais tout les styles sont réunis dans ma css.
J'imagine qu'il s'agit d'un problème d'appel de page ou .... d'ailleurs j'en sais rien ! ce que je sais c'est que je n'ai pas le choix, pour gérer plus facilement le site par la suite, je dois avoir un seul fichier menu. En espèrant avoir été claire ! Merci pour vos réponses


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>

<title>test navi sprite</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<!--[if lte IE 8]><script type="text/javascript" src="roundies.js"></script><![endif]-->

<!-- Javascript --> 
<style type="text/css"> 


/* SPRITE COMPLEXE : EXEMPLE 2 */


#fd_menu {

position:relative;
margin-top: 10px;
margin-bottom:0px;
margin-left:0px;
height: 42px;
background: #fff;
padding:0px;
/*soluc autres navigateurs*/
-moz-border-radius: 10px 10px 0 0;
-webkit-border-radius: 10px 10px 0 0;
border-radius: 10px 10px 0 0;
-webkit-border-top-left-radius: 10px; /* pour Chrome */
-webkit-border-top-right-radius: 10px; /* pour Chrome */ 
behavior:url(script/border-radius.htc);
}

#menu-fr { 
display:block;
position: relative;
min-width:850px;
bottom:0;
padding:0px;
top: 4px; 
left: 0px; 
}


#menu-fr span
{
display:none;
}

#menu-fr ul
{
list-style-type:none;
border:0;
margin:0;
padding:0;

}



#menu-fr li
{
margin:0;
padding:0;

}

#menu-fr li a
{
position:absolute;
left:0px;
display:block;
height:35px;

background:url("images/navi_fr.png") 0 0 no-repeat;
border:0;
margin:0;
}

#menu-fr #n1
{
width: 60px;
left: 4px;
background-position:0 0;
}

#menu-fr #n1:hover,#menu-fr #n1:active,#menu-fr #n1:focus
{
background-position:0 -35px;
}

#menu-fr #n2
{
width: 126px;
left:64px;
background-position:-60px 0;
}

#menu-fr #n2:hover,#menu-fr #n2:active,#menu-fr #n2:focus
{
background-position:-60px -35px;
}

#menu-fr #n3
{
width:126px;
left:190px;
background-position:-186px 0;
}

#menu-fr #n3:hover,#menu-fr #n3:active,#menu-fr #n3:focus
{
background-position:-186px -35px;
}

#menu-fr #n4
{
left:314px;
width:126px;
background-position:-310px 0;
}

#menu-fr #n4:hover,#menu-fr #n4:active,#menu-fr #n4:focus
{
background-position:-310px -35px;
}

#menu-fr #n5
{
width:126px;
left:439px;
background-position:-435px 0;
}

#menu-fr #n5:hover,#menu-fr #n5:active,#menu-fr #n5:focus
{
background-position:-435px -35px;
}

#menu-fr #n6
{
width:126px;
left:564px;
background-position:-560px 0;
}

#menu-fr #n6:hover,#menu-fr #n6:active,#menu-fr #n6:focus
{
background-position:-560px -35px;
}

#menu-fr #n7
{
left:690px;
width:126px;
background-position:-686px 0;
}

#menu-fr #n7:hover,#menu-fr #n7:active,#menu-fr #n7:focus
{
background-position:-686px -35px;
}




</style>

</head>
<body bgcolor="#CCCCCC">
<div id="fd_menu">
<div id="menu-fr">
<ul>
<li><a href="#" id="n1" title="navi1"><span>navi1</span></a></li>
<li><a href="/fr/page2.php" id="n2" title="navi2"><span>navi2</span></a></li>
<li><a href="#" id="n3" title="navi3"><span>navi 3</span></a></li>
<li><a href="#" id="n4" title="navi4"><span>navi4</span></a></li>
<li><a href="#" id="n5" title="navi5"><span>navi5</span></a></li>
<li><a href="#" id="n6" title="navi6"><span>navi6</span></a></li>
<li><a href="#" id="n7" title="navi7"><span>navi7</span></a></li>
</ul>
</div> <!-- fin de menu-fr -->
</div> <!-- fin de fd_menu -->

</body>
</html>

Modifié par Florent V. (25 Oct 2010 - 19:07)
Hello,

Un peu de méthode pour commencer:
shobann a écrit :
#fd_menu et (...) #menu-fr

Adopte une convention de nommage claire. On utilise soit des traits d'union (-) soit des traits de soulignement (_) dans les noms d'identifiants et classes, mais pas l'un ou l'autre selon l'inspiration du moment. Même remarque pour l'ordre des mots: pourquoi "menu" à la fin dans le premier cas, et au début dans le second? (Ces remarques sont générales, dans le cas particulier de ton projet ça peut se justifier, mais bon. Des noms incohérents, c'est le meilleur moyen de s'arracher les cheveux parce qu'on a écrit id="machin_truc" dans le HTML et qu'on écrit #machin-truc dans le CSS.)

Autre remarque en passant: un attribut bgcolor dans le code HTML... Rappel: nous sommes en 2010, pas en 1999. Smiley cligne

Autre remarque qui va bien (et on passe au problème principal): cent balles que ton menu n'est pas accessible. Les textes de tes items sont dans des SPAN en display:none, du coup ils ne seront pas lus par un lecteur d'écran, pas affichés si ton image de fond ne se charge pas pour une raison ou une autre (connexion lente sur un smartphone 3G par exemple)...
Je t'invite à voir cette démonstration sur l'accessibilité des sprites: http://www.arespritesaccessible.net/

shobann a écrit :
Comme dit précédemment tout fonctionne parfaitement...

Même chose pour moi avec le code que tu donnes ci-dessus. Les styles au :hover et :focus sont bien interprétés. (Les styles au :active aussi même si c'est un peu inutile d'utiliser :active ici. La pseudo-classe :active est utile quand tu appliques un style différent de celui du survol ou du focus.)

shobann a écrit :
sauf que lorsque j'intègre mon menu à ma page via &lt;?php include(&quot;/nav_fr1.php&quot;); ?&gt; les fonctions hover, active,focus ne fonctionnent plus

Tu connais PHP? Tu sais ce qu'implique la fonction include? Tu as consulté le code HTML généré par tes scripts PHP (donc le code que reçoit le navigateur, pas celui de tes fichiers PHP et HTML source)? Une mauvaise utilisation de include peut effectivement poser problème.
Je t'invite donc à vérifier le code reçu par le navigateur (code HTML généré), pas ton code source sur le serveur.
Bonjour Florent,
Pour la plupart des codes (css et html) ce sont de simples cop/coll d'alsace création (tuto et astuces) que j'utilise car jusqu'a présent c'est le site le plus clair, dans ses explications, que j'ai trouvé.

Concernant (-) et (_) ma css est beaucoup plus longue, alors cela te semble sans doute idiot, mais pour moi c'est un moyen mémotechnique, tous mes fonds sont en _ le reste en -.

La pseudo-classe :active est utile quand tu appliques un style différent de celui du survol ou du focus.)
ce que je souhaite être le cas par la suite.... donc pourquoi le rajouter plus tard, lorsque je sais que mon menu va évoluer et que je peux le mettre de suite ?

Mon menu est accessible sur tous les navigateurs testés.......ce n'est pas une image de fond mais une image fond + texte (maintenant désolée mais mon pauvre cerveau n'a pas étudié le cas du smatphone 3g)


Ce que je connais de php et la fonction include se résume à ce que j'ai (a priori) cru comprendre sur ce site....... d'où ma demande d'aide en premier lieu ici !
Pour tester mon site j'utilise easy php 5.3.3

Si je pars du principe que
1. ma page en ligne ou via easy php s'affiche correctement et que l'apparence de mon menu fonctionne lorsque mes liens ne sont pas définis <a href="#" id....>
2. mon menu seul en ligne ou via easy php 5.3.3 s'affiche correctement et fonctionne lorsque les liens sont en <a href="#" id.....>
Mais que le menu ne fonctionne plus une fois les liens définis par un nom de page (je ne parle que du focus et autre billevésée) .......Je ne peux qu'en déduire que l'erreur vient des liens ou de la façon dont ils sont apellé !
shobann a écrit :
ce que je souhaite être le cas par la suite.... donc pourquoi le rajouter plus tard, lorsque je sais que mon menu va évoluer et que je peux le mettre de suite ?

Bah disons que pour l'instant tu le mets au mauvais endroit. Smiley smile
Tu peux à la rigueur écrire:
#menu a {
  ...
}
#menu a:hover, #menu a:focus {
  ...
}
#menu a:active {
  /* Styles au clic à prévoir */
}


shobann a écrit :
Mon menu est accessible sur tous les navigateurs testés.......ce n'est pas une image de fond mais une image fond + texte (maintenant désolée mais mon pauvre cerveau n'a pas étudié le cas du smatphone 3g)

C'est effectivement une image de fond, plus un texte masqué en CSS avec display:none.
En conséquence:
- Avec une lecteur d'écran (logiciel utilisé par des aveugles et malvoyants essentiellement), le texte ne sera pas lu car les éléments en display:none sont considérés comme "absents" (bien qu'ils soient dans ton code HTML).
- Si pour une raison ou une autre (choix de l'utilisateur ou souci technique au moment de la requête ou en amont sur ton serveur) l'image ne se charge pas, ton texte en display:none reste caché. Ce n'est pas un cas extrêmement courant, mais ça arrive, donc c'est pas plus mal de prévoir le coup. Smiley smile
Sans trop modifier ton code HTML et CSS, tu peux remplacer le display:none par un positionnement absolu et placer les SPAN en dehors du champ de vision (par exemple avec un position:absolute;left:-5000px;). Ça corrige le premier problème mais pas le deuxième... mais c'est déjà ça.

shobann a écrit :
Si je pars du principe que
1. ma page en ligne ou via easy php s'affiche correctement et que l'apparence de mon menu fonctionne lorsque mes liens ne sont pas définis &lt;a href=&quot;#&quot; id....&gt;
2. mon menu seul en ligne ou via easy php 5.3.3 s'affiche correctement et fonctionne lorsque les liens sont en &lt;a href=&quot;#&quot; id.....&gt;
Mais que le menu ne fonctionne plus une fois les liens définis par un nom de page (je ne parle que du focus et autre billevésée) .......Je ne peux qu'en déduire que l'erreur vient des liens ou de la façon dont ils sont apellé !

Donc tu as un code HTML généré correct, avec des liens <a href="#">. (J'insiste sur cette notion de code HTML généré, elle est essentiel si tu travailles en PHP ou avec tout autre langage côté serveur! Le navigateur ne reçoit pas ton code PHP, il reçoit une page HTML complète avec TOUS les contenus que tu inclus.) Et donc la seule chose que tu changes c'est le contenu des attributs href? Le reste ne bouge pas, même code HTML généré, même structure, pas de liens en plus ou en moins?

Si oui je veux bien voir les deux pages concernées, car ça m'intrigue. Smiley smile