Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/12/2010, 19:17
ggatuso
 
Fecha de Ingreso: diciembre-2010
Mensajes: 2
Antigüedad: 13 años, 4 meses
Puntos: 0
Problema en IE7 con menú desplegable

Hola a todos!!
Llevo unos días comiéndome la cabeza con un error en un menú desplegable de varios niveles. Es la primera vez que uso CSS y seguro que es una tontería que no doy visto, pero el caso es que después de mirarme medio Internet sigo sin dar con la solución (tampoco es que tenga muy claro cómo buscar el error...). Bueno, el problema es que en Firefox 3.6 todo va bien, pero en IE7, al seleccionar alguna de las opciones del primer nivel, me aparece el segundo nivel de opciones (como debe ser), pero también me aparecen el resto de submenús. Eso sí, éstos últimos aparecen vacíos. Yo lo que quiero es que sólo aparezcan las opciones del nivel inmediatamente inferior a la opción seleccionada. No sé si me he explicado bien.
Os dejo el código:

El html:
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <title>Ejemplo</title>
  4.     <link rel="stylesheet" type="text/css" href="Ejemplo.css"/>
  5. </head>
  6.  
  7.  
  8. <ul id="nav">
  9. <li>Renaissance
  10. <ul>
  11.   <li><a href="#">Brunelleschi</a></li>
  12.   <li><a href="#">Alberti</a></li>
  13.   <li><a href="#">Palladio</a></li>
  14.   <li><a href="#">Michelangelo</a></li>
  15.   <li><a href="#">Bramante</a></li>
  16. </ul></li>
  17. <li>Art Nouveau
  18. <ul>
  19.   <li><a href="#">Mackintosh</a></li>
  20.   <li><a href="#">Guimard</a></li>
  21.   <li><a href="#">Horta</a></li>
  22.   <li><a href="#">van de Velde</a></li>
  23. </ul></li>
  24. <li>Modern
  25. <ul>
  26.   <li><a href="#">Sullivan</a></li>
  27.   <li>Le Corbusier &gt;&gt;
  28.   <ul>
  29.      <li><a href="#">Otro nivel1</a></li>
  30.      <li>Otro nivel2 &gt;&gt;
  31.      <ul>
  32.         <li><a href="#">Otro nivel11</a></li>
  33.         <li><a href="#">Otro nivel12</a></li>
  34.         <li><a href="#">Otro nivel13</a></li>
  35.         <li><a href="#">Otro nivel14</a></li>
  36.         <li><a href="#">Otro nivel15</a></li>
  37.      </ul>
  38.      </li>
  39.      <li><a href="#">Otro nivel3</a></li>
  40.      <li><a href="#">Otro nivel4</a></li>
  41.      <li><a href="#">Otro nivel5</a></li>
  42.   </ul>
  43.   </li>
  44.   <li><a href="#">Mies</a></li>
  45.   <li><a href="#">Gropius</a></li>
  46.   <li><a href="#">Yamasaki</a></li>
  47. </ul></li>
  48. <li>Postmodern
  49. <ul>
  50.   <li><a href="#">Venturi</a></li>
  51.   <li><a href="#">Eisenman</a></li>
  52.   <li><a href="#">Stern</a></li>
  53.   <li><a href="#">Graves</a></li>
  54.   <li><a href="#">Gehry</a></li>
  55. </ul></li>
  56. <li>Digital
  57. <ul>
  58.   <li><a href="#">Xenakis</a></li>
  59.   <li><a href="#">Lynn</a></li>
  60.   <li><a href="#">Diller+Scofidio</a></li>
  61.   <li><a href="#">Zellner</a></li>
  62.   <li><a href="#">Hadid</a></li>
  63. </ul></li>
  64. </ul>
  65.  
  66. </body>
  67. </html>

Y el css:
Código CSS:
Ver original
  1. * {
  2.    margin: 0px;
  3.    padding: 0px;
  4.    outline: 0;
  5. }
  6.  
  7. body{
  8.    width: 100%;
  9.    font-family: Verdana, Arial, Helvetica, sans-serif;
  10. }
  11.  
  12. ul {
  13.    text-align: center;
  14. }
  15.  
  16. #nav {
  17.    list-style:none;
  18.    font-size: 0.7em;
  19. }
  20.  
  21. #nav li {
  22.    position:relative; /* Las coordenadas de los <ul> inferiores seran*/
  23.                       /* relativas al <li> que los contiene */
  24.    color: #f90;
  25.    font-weight: bold;
  26.    width: 10em;
  27. }
  28.  
  29. #nav > li { /* Solo para los <li> del primer nivel */
  30.    float: left;
  31.    color: white;  
  32.    padding: 1.5em 0;
  33.    background: black;
  34.    border-right: 1em solid green;
  35.    border-left: 1em solid green;
  36.    border-bottom:1px solid blue;
  37. }
  38.  
  39. #nav li a { /*Para todos los enlaces de la lista*/
  40.    text-decoration: none;
  41.    color: #f90;
  42.    font-weight: bold;
  43. }
  44.  
  45. #nav > li:hover { /*Para los <li> activos del primer nivel*/
  46.    color: black;
  47.    background: red;
  48. }
  49.  
  50. #nav > li li:hover { /*Para el resto de los <li> activos*/
  51.    color: #480;
  52.    background: #29497b;
  53. }
  54.  
  55. #nav > li li { /*Para los <li> del segundo nivel o inferiores*/
  56.    background: yellow;
  57.    border: 1px solid red;
  58.    left: -1px;
  59.    padding: 1em 0;
  60. }
  61.  
  62. #nav ul {
  63.    position:absolute; /* Esta posicion es relativa al <li> que contiene a este <ul> */
  64.    display:none; /*No mostrar hasta que se pase el raton por encima del <li>*/
  65.    list-style:none;
  66. }
  67.  
  68. #nav li:hover > ul {
  69.    display:block; /*Mostrar todo el bloque de <li>'s cuando se pasa el raton*/
  70.                   /*por encima del <li> padre*/
  71.    z-index: 6000; /*Los submenus tienen que estar por encima de cualquier elemento*/  
  72. }
  73.  
  74. #nav > li:hover > ul {
  75. left:-1em;
  76. top: 100%;
  77. }
  78.  
  79. #nav ul ul {
  80.    left: 100%;
  81.    margin-left: 1px;
  82.    top: -1px;
  83. }
  84.  
  85. #nav > li > ul { /* Solo para los <ul> inmediatamente debajo de los <li> de*/
  86.                  /* primer nivel*/
  87.    display:none;
  88.    list-style:none;
  89.    margin-left: 1em;
  90. }


Pongo una imagen para que se vea bien el error:



Como habríais comprobado, los tamaños y todo eso aún no lo depuré (px's donde debería haber em's, em's donde debería haber %'s, etc) porque primero me gustaría que funcionase.
Pues nada, a ver si álguien me puede decir cuál es el fallo.
Gracias de antemano!!


Edito:
Ya sabía que era una tontería. Simplemente tenía que cambiar
Código CSS:
Ver original
  1. #nav ul {
  2.    position:absolute; /* Esta posicion es relativa al <li> que contiene a este <ul> */
  3.    display:none; /*No mostrar hasta que se pase el raton por encima del <li>*/
  4.    list-style:none;
  5. }
  6.  
  7. #nav li:hover > ul {
  8.    display:block; /*Mostrar todo el bloque de <li>'s cuando se pasa el raton*/
  9.                   /*por encima del <li> padre*/
  10.    z-index: 6000; /*Los submenus tienen que estar por encima de cualquier elemento*/  
  11. }
por
Código CSS:
Ver original
  1. #nav ul {
  2.    display:none; /*No mostrar hasta que se pase el raton por encima del <li>*/
  3.    list-style:none;
  4. }
  5.  
  6. #nav li:hover > ul {
  7.    position:absolute; /* Esta posicion es relativa al <li> que contiene a este <ul> */
  8.    display:block; /*Mostrar todo el bloque de <li>'s cuando se pasa el raton*/
  9.                   /*por encima del <li> padre*/
  10.    z-index: 6000; /*Los submenus tienen que estar por encima de cualquier elemento*/  
  11. }
Ahora ya funciona tanto en IE7 como en Firefox 3.6

Última edición por ggatuso; 28/12/2010 a las 10:00