Menu JS ne fonctionne pas sous IE7 si présence de Doctype

Menu JS ne fonctionne pas sous IE7 si présence de Doctype - HTML/CSS - Programmation

Marsh Posté le 25-05-2007 à 08:42:35    

Bonjour,
 
Le site web que je dois faire dans le cadre de mes études est pratiquement terminé, mais en testant la compatibilité avec les navigateurs j'ai découvert un problème embêtant. Le menu déroulant JS du site est "décalé" sous IE7 si j'inclus un DOCTYPE dans ma page.
(un aperçu du site est disponible ici, constatez vous même :/ : http://bro29.free.fr).
 
Par contre, si j'enlève le doctype (XHTML 1.0 transitional), tout fonctionne comme sous FF et IE6.
Savez vous d'où ca pourrait venir ?
 
Code JS :

Code :
  1. var menu_timer, menu_current;
  2. var no_timer = false;
  3. function ms(s)
  4. {
  5. clearTimeout(menu_timer);
  6. if (menu_current!=null && menu_current != s) _mh(menu_current);
  7. document.getElementById(s).style.visibility = "visible";
  8. menu_current = s;
  9. }
  10. function _mh(s)
  11. {
  12. var e = document.getElementById(s);
  13. e.style.visibility = "hidden"
  14. e.no_timer = false;
  15. menu_current = null;
  16. }
  17. function mh(s)
  18. {
  19. if (!document.getElementById(s).no_timer) menu_timer = setTimeout("_mh('"+s+"')",1000);
  20. }
  21. function drawMenu(ml)
  22. {
  23. for (i=0; i<labels.length; i++)
  24.  {
  25.   var l = labels[i];
  26.   if (l!=ml)
  27.    {
  28.     var s = 'onMouseOver="ms(\''+l+'\')" onMouseOut="mh(\''+l+'\')"';
  29.     if (window.editMode) s = '';
  30.     document.write('<td width="150"><img src="'+imgPrefix+l+'.gif" '+s+'/><br/><div class="submenu" id="'+l+'">');
  31.     for (j=0; j<menus[i].length; j++)
  32.      {
  33.       document.write('<div><a '+s+' href="'+htmlPrefix+l+'/'+menus[i][j][1]+'.html">'+menus[i][j][0]+'</a></div>');
  34.      }
  35.     document.write('</div></td>');
  36.    }
  37.   else document.write('<td width="150"><img src="'+imgPrefix+l+'.gif"/></td>');
  38.  }
  39. }


 
Code CSS :

Code :
  1. td.menuhome {width: 100%;
  2.    height: 31px;
  3.    vertical-align: top;
  4.    padding: 0px;}
  5. td.menu {width: 100%;
  6.   height: 30px;
  7.   vertical-align: top;
  8.   padding: 0px;}
  9. .submenu {position: absolute;
  10.    visibility: hidden;
  11.    padding: 0px;
  12.    margin: 0px;
  13.    width: 150px;}
  14. .submenu div {font-size: 11px;
  15.     font-weight: bold;
  16.     padding: 4px 0px 4px 10px;
  17.     border-top: 1px solid white;}
  18.    
  19. #accueil div {background-color: #658fbe;}
  20. #adminis div {background-color: #9287af;}
  21. #pedago div {background-color: #65ab5a;}
  22. #vielycee div {background-color: #d088af;}
  23. #contacts div {background-color: #9dc2d7;}


 
Merci d'avance pour votre aide :sweat:

Reply

Marsh Posté le 25-05-2007 à 08:42:35   

Reply

Marsh Posté le 25-05-2007 à 09:28:24    

Reply

Marsh Posté le 06-06-2007 à 11:48:53    

Oui je connais ça mais je ne m'explique pas pourquoi IE7 est le seul qui n'affiche pas correctement mon menu :/
J'ai testé : Safari, IE6, FF, Opéra.. tout marche.

Reply

Marsh Posté le 06-06-2007 à 18:20:06    

ça ressemble fort à un problème de positionnement absolu non défini mais interprêté par le navigateur. IE tenant compte du centrage pour interprété la position supposée de l'élément en l'absence d'un left:... ou right:...
 
En général il suffit de rajouter un left:0; pour règler le problème mais vu ton menu obsolète à base de montage en tableau sans position relative précisée je crains que cela pose problème genre tous tes sous-menus collés à droites.
 
Pour moi 2 options:
 
- ajouter un style="position:relative;" sur le td qui contient le menu (m'étonnerais que ça marche il me semble déjà avoir observé le cas foireux)
 
- ajouter un style="text-align:left;" sur le même td pour essayer de récupérer sur IE7 (mais ton montage restera du bricolage):
 

Code :
  1. .menuhome td {text-align:left;}

Reply

Marsh Posté le 06-06-2007 à 19:41:24    

:o chapeau bas, le menu marche maintenant, merci beaucoup :jap:
Pourquoi penses tu que ce menu est obsolète ? (je précise qu'il n'est pas de moi, je ne maîtrise pas trop le js encore..)

Message cité 1 fois
Message édité par san_ le 06-06-2007 à 19:42:03
Reply

Marsh Posté le 06-06-2007 à 23:23:34    

san_ a écrit :

Pourquoi penses tu que ce menu est obsolète ? (je précise qu'il n'est pas de moi, je ne maîtrise pas trop le js encore..)


Je ne maîtrise pas le javascript des masses non plus ;)
 
C'est 2 choses qui m'ont fait dire ça, plus dans la conception générale du menu que dans la programmation elle-même:
 
- l'utilisation d'une mise en page à l'aide de tableau ou de div superflus
- la construction complète du menu en javascript qui va à l'encontre des règles d'accessibilité et d'un référencement efficace

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed