Se connecter avec
S'enregistrer | Connectez-vous

[CSS] Pb de couleur dans un menu déroulant

Dernière réponse : dans Programmation

bonjour,

j'ai un pb avec mon menu mellant CSS et javascript. Je vous explique, je sais que mon menu a été piqué sur le net mais au moins il est tres utile. Sauf que je voudrais pouvoir avoir pour chaque barre de menu une couleur différente mais qui soit identique au sous- menu qui lui est propre. En gros le menu 1 sera de la meme couleur que les sous menu 1.1, 1.2... mais d'une couleur differente du menu 2.

je vous joins donc mes scripts en espérant que vous pourrez m'aider...
Mon code html:
  1. <head>
  2.  
  3. <link rel="stylesheet" type="text/css" href="style.css">
  4. <style type="text/css" media="screen">@import "css.css";</style>
  5. <script type="text/javascript">
  6. <!--
  7. window.onload=montre;
  8. function montre(id) {
  9. var d = document.getElementById(id);
  10. for (var i = 1; i<=10; i++) {
  11. if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
  12. }
  13. if (d) {d.style.display='block';}
  14. }
  15. //-->
  16. </script>
  17. </head>
  18.  
  19.  
  20.  
  21. <dl id="menu">
  22. <!--<div class="menu1">-->
  23. <dt onclick="javascript:montre('smenu1');"><a href="#">Menu1</a></dt>
  24.  
  25. <dd id="smenu1">
  26. <ul>
  27. <li><a href="#">menu 1.1</a></li>
  28. <li><a href="#">menu 1.2</a></li>
  29. </ul>
  30. </dd>
  31. <!--</div>-->
  32. <dt id="menu2" onclick="javascript:montre('smenu2');"><a href="#">Menu2</a></dt>
  33.  
  34. <dd id="smenu2">
  35. <ul>
  36. <li><a href="#">menu 2.1</a></li>
  37. </ul>
  38. </dd>
  39.  
  40. <dt id="menu3" onclick="javascript:montre('smenu3');"><a href="#">Menu3</a></dt>
  41.  
  42. <dd id="smenu3">
  43. <ul>
  44. <li><a href="#">menu 3.1</a></li>
  45. <li><a href="#">menu3.2</a></li>
  46. </ul>
  47. </dd>
  48.  
  49. <dt id="menu4" onclick="javascript:montre('smenu4');"><a href="#">Menu4</a></dt>
  50.  
  51. <dd id="smenu4">
  52. <ul>
  53. <li><a href="#">menu 4.1</a></li>
  54. <li><a href="#">menu4.2</a></li>
  55. </ul>
  56. </dd>
  57. </dl>


Mon code CSS:

  1. <style type="text/css" media="screen">
  2. <!--
  3. body {
  4. margin: 0;
  5. padding: 0;
  6. background: white;
  7. font: 80% verdana, arial, sans-serif;
  8. }
  9. dl, dt, dd, ul, li {
  10. margin: 0;
  11. padding: 0;
  12. list-style-type: none;
  13. }
  14. #menu {
  15. position: absolute; /* placement du menu, à modifier selon vos besoins */
  16. top: 150;
  17. left: 0;
  18. }
  19. #menu {
  20. width: 15em;
  21. }
  22. #menu dt {
  23. cursor: pointer;
  24. margin: 2px 0;;
  25. height: 20px;
  26. line-height: 20px;
  27. text-align: center;
  28. font-weight: bold;
  29. border: 1px solid gray;
  30. background: lightgreen;
  31. }
  32.  
  33. #menu dd {
  34. border: 1px solid gray;
  35. }
  36. /* menu 1*/
  37.  
  38. #smenu1 li {
  39. text-align: center;
  40. background: lightgreen;
  41. }
  42.  
  43. #smenu1 li a, #menu dt a{
  44. color: white;
  45. text-decoration: none;
  46. display: block;
  47. border: 0 none;
  48. height: 100%;
  49. }
  50. /*.menu1 dt a{
  51. text-align: center;
  52. background: orange;
  53. }*/
  54. /*menu 2*/
  55.  
  56. #smenu2 li {
  57. text-align: center;
  58. background: lightblue;
  59. }
  60.  
  61. #smenu2 li a{
  62. color: white;
  63. text-decoration: none;
  64. display: block;
  65. border: 0 none;
  66. height: 100%;
  67. }
  68. /*menu 3*/
  69.  
  70. #smenu3 li {
  71. text-align: center;
  72. background: red;
  73. }
  74. #smenu3 li a{
  75. color: white;
  76. text-decoration: none;
  77. display: block;
  78. border: 0 none;
  79. height: 100%;
  80. }
  81. /*menu 4*/
  82.  
  83. #smenu4 li {
  84. text-align: center;
  85. background: purple;
  86. }
  87. #smenu4 li a{
  88. color: white;
  89. text-decoration: none;
  90. display: block;
  91. border: 0 none;
  92. height: 100%;
  93. }
  94. /*menu 5*/
  95.  
  96. #smenu5 li {
  97. text-align: center;
  98. background: yellow;
  99. }
  100. #smenu5 li a{
  101. color: white;
  102. text-decoration: none;
  103. display: block;
  104. border: 0 none;
  105. height: 100%;
  106. }
  107. /*menu 6*/
  108.  
  109. #smenu6 li {
  110. text-align: center;
  111. background: lightpink;
  112. }
  113. #smenu6 li a{
  114. color: white;
  115. text-decoration: none;
  116. display: block;
  117. border: 0 none;
  118. height: 100%;
  119. }
  120.  
  121. #menu li a:hover, #menu dt a:hover {
  122. background: pink;
  123. }
  124.  
  125.  
  126. -->
  127. </style>


Encore merci pour votre aide...

Autres pages sur : css couleur menu deroulant

Lassé par la pub ? Créez un compte

j'ai oublié de vous dire qu'il va de soi que j'aimerai que cela fonctionne avec mozilla comme avec IE. J'ai aussi rencontré un pb avec mozilla quand le titre d'un menu est trop grand il passe a la ligne mais n'agrandi pas la case du menu il superpose le texte de la case precédente sur la case suivante tandis que IE fait bien l'aggrandissement de la case du menu. En espérant que vous saurez m'aider a résoudre mes problème....

Encore merci d'avance...

Mozilla, Firefox, SeaMonkey et tous les produits qui utilisent le moteur de rendu Gecko respectent plutôt bien les standards W3C.. En conséquence, ils ne "bidouillent" pas l'affichage des éléments.. D'où ton menu dont la largeur ne varie pas, alors que IE fait parfois un peu tout et n'importe quoi.. L'augmentation automatique de la largeur par le contenu n'est pas un concept exploité par les standards W3C et c'est normal, sinon il faudrait coller des 'max-width' un peu partout.. Contrairement, évidemment, aux dimensions automatiques en fonction du bloc conteneur, dont la fenêtre du navigateur elle-même..

Il en va de même avec les dimensions verticales : dès que la dimension est fixée, elle ne varie plus même si le contenu déborde.. C'est ainsi que Gecko affiche un bloc conteneur.. Pour que la hauteur d'un bloc varie avec le contenu, il faut soit ne pas déclarer de hauteur, soit utiliser le paramètre 'min-height'.. Attention, les paramètres 'max' / 'min' ne sont pas reconnus par IE !! Pour lui, les basiques 'width' et 'height' se comportent aussi comme des 'min'.. Il faut donc bidouiller la CSS un peu de cette manière (exemple) :
  1. #bloc { width: 150px; min-height: 30px; } // dimension "normale"
  2. * html #bloc { height: 30px; } // dimension spéciale IE correspondante

L'emploi de '* html' suivi du nom de l'élément ou de la classe d'éléments n'est reconnu par personne d'autre que IE.. Il existe aussi d'autres "hacks" pour IE, comme pour Gecko ou d'autres.. Ce sont les joies de la prog.. Des exemples ici : Quelques hacks CSS >> http://www.ultra-fluide.com/ressources/css/css-hacks.htm..

Deux autres articles intéressants :
  • Will the browser apply the rule(s)? (les règles CSS qui seront exécutées ou pas, selon les navigateurs. Utile pour monter des "hacks" CSS) >> http://centricle.com/ref/css/filters/
  • Full CSS Property Compatibility Chart >> http://corecss.unk.edu/properties/full-chart.php

    Pour tes couleurs, préfère utiliser les indications RVB du type '#ffffff' pour le blanc ou '#000000' pour le noir.. N'importe quel éditeur Web ou d'images propose soit une palette de couleurs HTML pour les uns, soit la gestion des codes de couleurs HTML dans les palettes de couleurs pour les autres..

    EDIT : correction autour du code de couleur CSS.. Merci boubpopsyteam pour ton coup d'oeil ;) ..

    :jap: 

    merci beaucoup pour ton aide et j'avoue que cela fonctionne j'ai juste un petit soucis maitenant sur le fait que le surlignage au passage de la souris ne se fait pas sur la case mais sur la ligne d'ecriture des menus. Je ne sais pas si j'arriverai a resoudre se problème car pour le moment tout ce que j'ai testé ca ne va pas.

    Pour ce qui est des couleur ne t'inkiete pas j'ai bien mis des couleurs RVB c'etait des couleurs de test en attendant d'avoir les bonnes couleurs maintenant les couleurs sont bien en RVB.

    Par contre j'ai toujours ce problème pour que chaque menu soit d'une couleur différente mais de la meme couleur que son sous menu. Je n'ai toujours pas reussi a le résoudre. Si quelqu'un avait une idée?

    Je l'en remercie d'avance... :) 
    Expert Programmation

    bihoali a dit :
    merci beaucoup pour ton aide et j'avoue que cela fonctionne j'ai juste un petit soucis maitenant sur le fait que le surlignage au passage de la souris ne se fait pas sur la case mais sur la ligne d'ecriture des menus. Je ne sais pas si j'arriverai a resoudre se problème car pour le moment tout ce que j'ai testé ca ne va pas.
    utilise dans le css la fonction "display: block;"

    bihoali a dit :
    Par contre j'ai toujours ce problème pour que chaque menu soit d'une couleur différente mais de la meme couleur que son sous menu. Je n'ai toujours pas reussi a le résoudre. Si quelqu'un avait une idée?
    Tu ne peux pas utiliser un style particulier commun avec par exemple dans le xhtml un code "<span class="menu1">" pour ton premier menu/sous-menu, "<span class="menu2">" pour ton deuxième menu/sous-menu, "<span class="menu3">" pour ton troisième menu/sous-menu, etc... en précisant les couleurs de chaque ".menuX" dans la feuille css ?

    merci beaucoup marsien pour ce qui etait du span c t tout a fait ca. Par contre pour ce qui est du display: block; je ne sais pas trop ou le mettre car cela ne marche pas. Je precise que le problème est avec mozilla mais avec IE ca fonctionne bien.

    Quelqu'un aurait-il une idée sur la question car maintenant je me retrouve avec du blanc sur tout les menus sur la 2eme ligne de la case ou il n'y a pas de texte et la bonne couleur sur la ligne du texte du menu. :s avec Mozilla biensur.

    Merci d'avance pour votre aide... :) 

    Expert Programmation

    Un ex vaut souvent mieux qu'un long discours ; voilà une partie du code que j'utilise sur un de mes sites

    xhtml
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "<a href="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" target="_blank">http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd</a>">
    2. <html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>" xml:lang="fr" >
    3.  
    4. <head>
    5. <link href="new 4.css" rel="stylesheet" type="text/css" />
    6. </head>
    7.  
    8. <body>
    9. <div id="menu">
    10. <ul>
    11. <li><div id="selectionne">Accueil</div></li>
    12. <li><a href="presentation.php">Présentation du projet</a></li>
    13. <li><a href="formulaire.php">Vos besoins, nos services</a></li>
    14. <li><a href="contact.php">Nous contacter</a></li>
    15. </ul>
    16. </div>
    17. </body>


    css
    1. #menu {
    2. margin-top: 50px;
    3. }
    4.  
    5. #menu ul {
    6. list-style-type: none;
    7. margin: 0;
    8. padding: 0;
    9. }
    10.  
    11. #menu ul li a {
    12. display: block;
    13. width: 208px;
    14. margin: 5px;
    15. padding: 3px 0;
    16. background: #c8dfea;
    17. color: #0400d0;
    18. text-indent: 10px;
    19. border: 1px #0400d0 solid;
    20. text-decoration: none;
    21. }
    22.  
    23. #menu ul li a:hover {
    24. background: #f7eece;
    25. color: #a7641b;
    26. border: 1px #9c6f19 solid;
    27. }
    28.  
    29. #selectionne {
    30. display: block;
    31. width: 208px;
    32. margin: 5px;
    33. padding: 3px 0;
    34. background: #f7eece;
    35. color: #a7641b;
    36. text-indent: 10px;
    37. border: 1px #9c6f19 solid;
    38. text-decoration: none;
    39. }


    Tu remarqueras que le display:block; se trouve sur les liens du menu (#menu ul li a), ce qui permet de donner au lien un espace équivalent au cadre qui le contient. Ceci suppose que tu passe par une structuration hiérarchique (ul & li) pour tes menus et sous-menus...

    Edit : tu peux tester le code en le copiant, il marche :)  (pense juste à renommer le lien vers le css dans le head du xhtml ;)  )

    encore merci marsien c vrai que ton menu est très bien je l'ai testé... et je l'avais deja mis le display: block; comme toi avec mon ul,li et a mais je pense que le problème vient du "min-height: 30px;" qui agrandie la case pour que qu'un titre long de menu puisse y entrer sinon cela se supperpose sur la case suivante. je te redonne une partie de mon code pour que tu puisses le constater par toi même.

    html:
    1. <html>
    2. <head>
    3. <link rel="stylesheet" type="text/css" href="css.css">
    4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    5. </head>
    6. <body>
    7. <script type="text/javascript">
    8. <!--
    9. window.onload=montre;
    10. function montre(id) {
    11. var d = document.getElementById(id);
    12. for (var i = 1; i<=10; i++) {
    13. if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
    14. }
    15. if (d) {d.style.display='block';}
    16. }
    17. //-->
    18. </script>
    19. <dl id="menu">
    20. <span class="menu1">
    21. <dt onclick="javascript:montre('smenu1');"><a href="#">VIE MUNICIPALE</a></dt>
    22. <dd id="smenu1">
    23. <ul>
    24. <li><a href="equipe_municipale.php">L'équipe Municipale</a></li>
    25. <li><a href="#">Le conseil vous répond</a></li>
    26. <li><a href="#">L'agenda du Maire</a></li>
    27. <li><a href="#">Cérémonies Officielles</a></li>
    28. </ul>
    29. </dd>
    30. </span>
    31. </dl>
    32. </body>
    33. </html>

    Css:
    1. <style type="text/css" media="screen">
    2. <!--
    3. body {
    4. margin: 0;
    5. padding: 0;
    6. background: white;
    7. font: 80% verdana, arial, sans-serif;
    8. }
    9. dl, dt, dd, ul, li {
    10. margin: 0;
    11. padding: 0;
    12. list-style-type: none;
    13. }
    14. #menu {
    15. position: absolute; /* placement du menu, à modifier selon vos besoins */
    16. top: 150;
    17. left: 0;
    18. }
    19. #menu {
    20. width: 15em;
    21. }
    22. #menu dt {
    23. cursor: pointer;
    24. margin: 2px 0;
    25. min-height: 30px; /*hauteur de la case du menu*/
    26. line-height: 20px;
    27. text-align: center;
    28. font-weight: bold;
    29. border: 1px solid gray;
    30. }
    31. #menu dd {
    32. border: 1px solid gray;
    33. }
    34. /* menu 1*/
    35. #smenu1 ul li a ,.menu1 dt a {
    36. text-align: center;
    37. background: #7bb242; /*vert*/
    38. color: white;
    39. text-decoration: none;
    40. display: block;
    41. border: 0 none;
    42. height: 100%;
    43. }

    Je pense que tu comprendras mieux de quoi je parle. Et tu pourras ainsi constater ce qu'il se passe.

    Encore merci pour ton aide précieuse...
    Expert Programmation

    Tu peux simplement déplacer "min-height: 30px;" dans "#smenu1 ul li a ,.menu1 dt a"

    Pour IE, min-height n'a aucune signification... Il utilise en fait height comme un min-height.

    Tu devras peut-être rajouter une ligne spécifique à IE, telle que :
    1. *html #smenu1 ul li a ,.menu1 dt a {
    2. height: 30px;
    3. }
    Lassé par la pub ? Créez un compte