98

CSS: Menu horizontal, desplegable y bonito

2 de Octubre de 2008 | Etiquetas: , | Categoría: CSS

He visto muchos menús desplegables por internet.. muy chulos, pero muy complicados para mi gusto, asi que voy a explicar como hacer un menu horizontal desplegable sencillito y funcional, tán solo con html y css.

Lo primero es la estructura, para ella usaré una lista, asi queda todo bien recogidito:

<ul id="menu-horizontal">
<li><a href="#" title="Texto">Texto</a></li>
<li><a href="#" title="Texto">Texto</a></li>
<li><a href="#" title="Texto">Texto</a>
<ul>
<li><a href="#" title="Texto">Texto</a></li>
<li><a href="#" title="Texto">Texto</a></li>
</ul>
</li>
<li><a href="#" title="Texto">Texto</a></li>
<li><a href="#" title="Texto">Texto</a></li>
</ul>

La cosa es así: el <ul> es el menú en sí, cada <li> es un botón del menú y el <ul> dentro del <li> es desplegable de ese botón. ¿Me se entiende? xD

Vale, ahora voy a aplicarle un poco de estilo para que quede el menu en horizontal, ya que por defecto las listas son verticales. Se consigue fácil, agregandole a los elementos de la lista el atributo de flotante:

ul#menu-horizontal li {
float: left;
display: inline;
position: relative;
}

Y ahora que es horizontal, voy a ocultar el submenú, ya que no quiero que aparezca aún, solo se tiene que mostrar cuando pase el ratón por encima del botón que tiene submenu. El css en cuestión:

ul#menu-horizontal ul {
display: none;
position: relative;
top: 24;
left:0;
margin:0;
padding:0;
background:#FFFFFF;
}

ul#menu-horizontal ul li {
display: block !important;
}

ul#menu-horizontal li:hover ul{
display: none;
}

ul#menu-horizontal li:hover ul{
display: block;
}

Y.. perfecto! Ya funciona nuestro menu desplegable y horizontal, pero nos queda un paso. Hacerlo bonito. Para ello aplicamos un poco de estilo por aquí..

#menu-horizontal {
width:500px;
margin:0 auto;
}

#menu-horizontal li {
margin:0 1px;
width:98px;
min-height:19px;
text-align:center;
background:#BBB;
list-style:none;
padding:2px 0;
}

/* y otro poquito por aquí.. */

#menu-horizontal li:hover {
background:#C5014F;
}

#menu-horizontal li a {
font:bold 11px Arial, Helvetica, sans-serif;
color:#FFF;
text-decoration:none;
}

#menu-horizontal li ul li{
float:none;
width:98px;
margin:1px 0;
}

Y.. apañao.

css menu horizontal

No es para decir: Uy que bruto que bonito que está, pero todo es empezar :P

Actualizado 29-01-2009: He modificado las propiedades de #menu-horizontal ul para que funcione correctamente en IE7 gracias a los comentarios de José Rico y Ring :D

Twittea esto Guardalo en Delicious Compartelo en Facebook

Articulos relacionados

Esta entrada se escribió el Jueves, Octubre 2nd, 2008 at 14:24 pm bajo la categoría CSS. Puedes suscribirte a los comentarios de esta entrada gracias al RSS feed. Puedes comentar, o realizar un trackback desde tu web.

98 Responses to “CSS: Menu horizontal, desplegable y bonito”

  1. 1
    AzRi3L Says:

    y por que el ejemplo tiene que ser fucsia feo?? si si, “te se” entiende xD

  2. 2
    nnatali Says:

    feo dice.. es el color de moda.. tiriririi

  3. 3
    Naty Says:

    Hola gracias por el ejm, era justo lo q estaba buscando…. =)

  4. 4
    nnatali Says:

    Hola Naty! Me alegra que te sirviese, un saludo y espero volver a leerte ^^.

  5. 5
    chapoy Says:

    Esta muy padre tu ejemplo y sobre todo muy sencilo, pero desgraciadamente solo jala en firefox y no en explorer

  6. 6
    nnatali Says:

    ui.. ¿no funciona en explorer? a mi me funcionaba perfectamente, esta tarde busco un pc y reviso el código a ver que ha pasado.

  7. 7
    Favio Says:

    Eaaaaaaaaaaaaaaaaaaaaaa felicidades, esta super facil y super editable, gracias e pasado muchas horas buscando algo ais, no cabe duda, ustedes chicas son mas practicas…….ujuuuuuu
    felicidades sigue asi y un dia si llegara a comerte el mundo….bueno como en varias vidas…
    saludos

  8. 8
    nnatali Says:

    Hola Favio! Gracias por tu comentario, me alegra que te sirviera :)

    Saludos!

  9. 9
    claudia amira Says:

    hola nataly esta muy bonito pero no se donde pegar los codigos

    gracias por el lindo trabajo

  10. 10
    nnatali Says:

    Hola claudia!
    Es muy sencillo, el código html (los elementos <ul> y <li>) va en el cuerpo del documento, entre las etiquetas <body> y </body>, y el css puedes ponerlo bien en una hoja aparte (con extension .css) o en la cabecera del documento (el <head>) entre las etiquetas que indican que es css, usease estas:
    <style type=”text/css”> aqui va el css </style>
    Si no te aclaras dime en que parte te pierdes y te intento explicar mejor :) un saludo!

  11. 11
    cssdeña Says:

    Hola nnatali ! Enhorabuena por el trabajo , hace tiempo que estaba buscando algo asi sin necesidad de utilizar JavaScript

    Te comento, los selectores de css que utilizas no me funcionan ¿sabes por qué? Que cosa más rara no?

    lo dicho gracias y sigue así !

  12. 12
    nnatali Says:

    Hola cssdeña! Gracias a ti x visitar el blog :)
    no te aplica el css a #menu-horizontal?
    puede ser por la ruta que le hayas puesto o que le hayas aplicado estilo a los ul en general más adelante, algo así debe ser.. ¿los nombres los tienes correctamente? prueba a cambiar el guion medio x el bajo..

    Un saludo!

  13. 13
    velsagroup Says:

    Excelente trabajo, sencillo y practico.

  14. 14
    nnatali Says:

    Gracias velsagroup, me alegro de que te sirviera :)

  15. 15
    Ring Says:

    Muchas gracias por el trabajo. Me funciona correctamente en todos los navegadores (Opera, Firefox y Chrome) pero no en IE7. En IE el submenu, me sale desplazado a la izquierda respecto al menu, y al desplazarse sobre las opciones del submenu, este desaparece y no puedes seleccionar ninguna opción ¿Tienes idea que puede ser?
    Un saludo.

  16. 16
    nnatali Says:

    Hola Ring! Pues a voz de pronto no se me ocurre pero si quieres, indica el enlace donde has implementado el menu y te digo a que se debe :)

  17. 17
    Ring Says:

    Gracias por tu rápida respuesta.
    Desgraciadamante no tengo el menú accesible desde Internet, por lo que no se como hacer para que lo veas. De todas formas gracias por tu interes.
    Saludos,

  18. 18
    nnatali Says:

    Ring, no te preocupes, si quieres puedes enviarme lo que tengas hecho a mi email, o en este enlace puedes ver mi ejemplo en funcionamiento, para contrastarlo con el tuyo: Ejemplo de menu desplegable, horizontal y bonito.
    Ya verás cómo lo solucionamos, un saludo!

  19. 19
    Ring Says:

    nnatali, reitero las gracias y te pido disculpas por todo el trabajo que te estoy dando.
    Me ocurre lo mismo con tu ejemplo. Esta tarde te envio por correo, aunque solo sea por curiosidad, una captura de la pantalla para que veas cual es el problema. La pregunta es ¿Que versión de IE estás utilizando tu? ¿Que versión de Windows? Yo estoy usando Windows Vista e Internet Explorer 7.0.6001.18000. Repito, en el resto de exploradores va perfecto.
    Un abrazo

  20. 20
    nnatali Says:

    Hola Ring! No te preocupes, yo encantada de poder ayudar.
    Pues no tengo ninguna versión de IE para poder comprobarlo ya que trabajo con Mac Os, pero en estos días me instalaré una maquina virtual con windows y haré unas pruebas con IE a ver xq puede ser.. de todas formas espero tu email, un saludo!!

  21. 21
    José Rico Says:

    Si que te ha quedao apañao, sí.

  22. 22
    José Rico Says:

    Bueno, es verdad que no funciona bien en explorer porque por defecto firefox aplica otro margen por defecto al url
    Me he estado preguntado porqué has puesto el -40 en el margen y ahí está el error. Para que funcione bien en todos los navegadores hay que colocar el ul sin margin ni padding o, simplemente, no dejar el que traen de casa (ya que este es distinto)

    ul#menu-horizontal ul {
    display: none;
    position:relative;
    top: 24;
    left:0;
    margin:0;
    /*margin-left:-40px;*/
    padding:0px;
    }

    Espero que ahora os funcione. Saludos.

  23. 23
    nnatali Says:

    Hola José Rico!

    Muchas gracias por tu solución, no lo puedo probar en IE xo seguro que funciona genial. Solo una cosa.. ¿Por qué pusiste position:relative;? ¿No se vé bien en explorer? Me funciona mejor con position:absolute; ya que así no aparece el desplegable dentro del botón padre (x el fondo de color más que nada).

    Por cierto, le he hechado un vistazo a tu blog y me parece muy interesante, ya lo tengo en mis rss, alegra encontrar bloggers alicantinos :) un saludo!

  24. 24
    Ring Says:

    ¡Ahora Si!
    Gracias José Rico. Hay que añadirle background:#FFFFFF, para que la unión entre los submenús no sea de color fucsia, y solo queda al final de la última opción del submenú un trocito fucsia que no se quita. Pero por lo demás funciona perfectamente.
    Asi es como queda bien en IE7

    ul#menu-horizontal ul {
    display: none;
    position: relative;
    top: 24;
    left:0;
    margin:0;
    /*margin-left:-40px;*/
    padding:0px;
    background:#FFFFFF
    }

    Un saludo muy grande a todos.

  25. 25
    nnatali Says:

    Perfecto! Ahora lo actualizo en la entrada.
    Muchas gracias a los dos, sois unos máquinas :D

  26. 26
    Xandler Says:

    eiiii natalii!! muchisimas gracias!! me ha ido de perlas! :p

    Un saludo enorme!!!

  27. 27
    nnatali Says:

    Xandler me alegro que te sirviera :D
    Gracias a ti por pasarte, saluditos!!

  28. 28
    David Says:

    Hola, estoy haciendo el menú para mi página web, pero no consigo hacer que funcione… pongo el mismo menú que pones arriba y no consigo hacer que se ponga en horizontal.. ¿Qué puede fallar?
    Gracias.

  29. 29
    nnatali Says:

    Hola David!
    ¿No consigues que funcione el desplegable o sólo que se ponga en horizontal?
    Para poner un listado en horizontal lo que hago es añadirle un float a los elementos li
    ul li { float: left; }
    Eso debería de funcionarte ¿Cómo te aparece a ti? Un saludo!

  30. 30
    Ana Says:

    Hola, me ha venido muy bien el ejemplo, mil gracias. Pero necesito saber como hago un 3º subnivel dentro del subnivel que tienes creado.
    Gracias.

  31. 31
    nnatali Says:

    Hola Ana!
    Puedes añadir un sub-submenu metiendo otro <ul> dentro del <li> del submenú en sí y según te aparezca, juega con el css.
    Si no te consigues aclarar avisame y le hecho un vistazo, un saludo!

  32. 32
    david Says:

    Hola llevo todo el dia buscando un menu desplegable que no necesite javascript y este me ha gustado mucho por su sencillez pero en firefox va genial pero en el explorer 6 no me va habria que añadir un javascript para que funcione??? un saludo.

  33. 33
    nnatali Says:

    Hola david! No hace falta javascript para que funcione en IE6 sólo un poco de dedicación para solucionarlo con css.. xD
    Lo tengo en mi lista de cosas pendientes, espero no tardar mucho en solucionarlo :) Un saludo!

  34. 34
    david Says:

    graciass. es que no me entra en la cabeza que no salga en ie6 sin javascript y en el resto si por el tema de los hover

  35. 35
    nnatali Says:

    el problema esq ie6 es un niño autista.. xD

  36. 36
    Sergio Says:

    Hola nnatali, gracias, me ha servido de mucho. Me gustaria que me aclararas si, puedes, ¿cómo puedo hacer que cuando se desplegue el desplegable no se me corran para abajo los demas divs, vamos que se superponga el desplegable a lo que haya abajo.

    Yo también soy de Alicante, en concreto de Aspe. Y gracias de nuevo.

  37. 37
    nnatali Says:

    Hola Sergio, que alegría encontrarme más alicantinos por aquí!
    Sobre tu problema, ¿tienes una dirección para verlo en funcionamiento? sé lo que me dices pero en el ejemplo que tengo no me ocurre así que a primeras no sé decirte por qué es, supongo que será jugar con los position:relative y absolute.. prueba con ello, y si no das mándame el código y le hecho un vistazo :)

  38. 38
    Sergio Says:

    Gracias por responder, lo que he hecho ha sido poner un div que los contenga, y estos dos en absolute y jugar con el z-index. Saludos.

  39. 39
    nnatali Says:

    genial, me alegro que lo solucionaras :) un saludo!!

  40. 40
    LOvelyMoi Says:

    HOla!!!

    Mil gracias , excelente el ejemlo , justo lo q buscaba.

    Sigue aportando…. vales mil. Me ayudas un buen justo lo q
    este mundo egoista frio y desinteresado necesita. :P

    God bless YOu Soooo Much!!!!!!!!!

  41. 41
    nnatali Says:

    Hola LOvelyMoi!
    Mil gracias a ti por tu comentario! Me hace mucha ilusión que a la gente le guste / sirva lo que posteo :)
    Un saludo y espero leerte más por aqui!

  42. 42
    Faex09 Says:

    nnatali me ha impresionado tu manera de hacer diseño web…me gustaria contactarme contigo para charlar sobre el tema…soy de Perú mis correos son agurtoeras@gmail – roervi@hotmail.com

    saludos

  43. 43
    nnatali Says:

    Hola Faex09!
    Claro, me puedes comentar cualquier cosa sobre web, si quieres a través del blog o en mi email.
    Saludos desde España!

  44. 44
    Claudia Says:

    Muchisimas Gracias, me fue muy útil tu ejemplo

    Está super sencillo y fácil de entender

  45. 45
    nnatali Says:

    Hola Claudia, me alegro de que te fuera útil :)
    Gracias a ti por tu comentario!

  46. 46
    Claudia Says:

    Tengo un problema:( no me funciona en ie7 y ya probe todas las opciones anteriores aqui explicadas a ese problema

  47. 47
    nnatali Says:

    Hola Claudia! ¿Que no te funciona? En ie7 debería funcionar bien, he mirado un ejemplo que tengo y si que se expande pero aparece desplazado a la izquierda, trasteándolo un poquito se arregla :P

  48. 48
    Claudia Says:

    Muchas gracias nnatali :) ya quedó, soy nueva en esto disculpa

  49. 49
    nnatali Says:

    No te preocupes, no hay nada que disculpar ^^
    Espero leerte de nuevo por aquí, un saludo! :)

  50. 50
    jordi Says:

    Hola, es curioso pero es el unico tutorial que he encontrando que da explicaciones de por qué se hace de ese modo.

    He leido los comentarios donde dicen que en internet explorer no funciona, y tienen razon, a mi tampoco men funciona, pero buscando por la red, según he podido leer solo funciona con javascript, aunque no lo tengo muy claro. ¿Tienes idea de como hacer que funcione en IE7?

    Por cierto, te agrego a mi feed! :P

  51. 51
    nnatali Says:

    Hola jordi!
    ¿No te funciona en IE7? Ui pues ahí si que funcionaba, es en IE6 donde no muestra el desplegable.
    El problema en IE6 es que sólo reconoce el :hover sobre los links y en el ejemplo los tengo sobre los li, he hecho algunas pruebas con ello esta mañana, incluso usando los comentarios para código solo si es IE6 pero parece que estoy muy dormida aún que no lo he conseguido lograr. A ver si una tarde me pongo en serio y lo saco :P
    Dime si no te funciona en IE7 y lo miramos, vale? Un saludo, y gracias x agregarme! ^^

  52. 52
    maria anie Says:

    Hola buenas he intentado realizar tu menu horizontal y he tenido problemas con IE7 podrias indicarme o proporcionarme el codigo para que dicho menu horizontal funcione correctamente, como se podria hacer para que se desplegara en formato horizontal?¿?, muchas gracias y un saludo

  53. 53
    nnatali Says:

    Hola maria anie!
    Dime ¿que problema tienes en ie7? ¿No se despliega? El código es el que aparece en el artículo.
    Un saludo!

  54. 54
    Héctor Says:

    Hola, estoy intentando hacer un menu desplegable como el el que nos pones en el ejemplo, en el blog que se llama nuevawebcomillas, lo unico que he probao con otros menus, pongo el codigo en el html de la plantilla, luego el menu lo añado poniendo un elemento en html /javascritp y me funciona durante un dia, luego no se si es que elo codigo cambia pero ya no sale comomenu desplegable, lo que queria preguntarte sobre tu menu es, ¿donde pongo cada codigo en la plantilla html? ¿y el codigo del menu?

    Espero que puedas ayudarme muhas gracias.

  55. 55
    nnatali Says:

    Hola Héctor!
    El código de aqui arriba debes ponerlo de la siguiente forma:
    - La estructura html entre las etiquetas < body> y < /body>
    - Los estilos en css en la cabecera de la página, entre las etiquetas < head> y < /head> y a su vez entre las etiquetas que indican que es css, que son estas: < style type="text/css"> y < /style>

    Si no te aclaras, avisa y seguimos mirando porque no te funciona :)

    Saludos!!

  56. 56
    Héctor Says:

    lo siento pero sigue sin salerme el menu, yo lo quiero poner en un blog de blogger, soy un algo nuevo en estas cosas, y no me sale, necesito saber donde va pegada cada cosa en la plantilla y luego que elementos de pagina tengo que añadir para que salga el menu.

  57. 57
    nnatali Says:

    ui eso es otra cosa! yo te hablaba de ponerlo en una web, trasteando el código, pero si dices que es para un blog de blogger ya me quedo un poco corta en cuanto a ideas, pues no sé muy bien cómo trabajar ahí.
    ¿Puedes editar el código html? ¿Admite plugins?

  58. 58
    uoko Says:

    que mal, tu menu esta muy lindo pero,es imposible ponerlo en un blog intente pgando el codigo y no me salio nunca!, :( bueno para la proxima… besos

  59. 59
    nnatali Says:

    Hola uoko! ¿En un blog tipo blogger? ¿O en un blog que has creado tu con wordpress? Tienes acceso al código?
    No es imposible, si quieres le hechamos un vistazo :) saludos!

  60. 60
    Nestor Says:

    Hola, ante todo gracias por el blog, aunque tengo mis dificultades para que se muestre, aqui te envío el código, gracias por la ayuda.

    Texto

    ul#menu-horizontal li {
    float: left;
    display: inline;
    position: relative;
    }

    ul#menu-horizontal ul {
    display: none;
    position: absolute relative;
    top: 24;
    left:0;
    margin-left:-40px;
    margin:0;
    padding:0;
    background:#FFFFFF;
    }

    ul#menu-horizontal ul li {
    display: block !important;
    }

    ul#menu-horizontal li:hover ul,
    ul#menu-horizontal li.iehover ul {
    display: none;
    }

    ul#menu-horizontal li:hover ul,
    ul#menu-horizontal li.iehover ul{
    display: block;
    }

    #menu-horizontal {
    width:500px;
    margin:0 auto;
    }

    #menu-horizontal li {
    margin:0 1px;
    width:98px;
    min-height:19px;
    text-align:center;
    background:#BBB;
    list-style:none;
    padding:2px 0;
    }

    /* y otro poquito por aquí.. */

    #menu-horizontal li:hover {
    background:#C5014F;
    }

    #menu-horizontal li a {
    font:bold 11px Arial, Helvetica, sans-serif;
    color:#FFF;
    text-decoration:none;
    }

    #menu-horizontal li ul li{
    float:none;
    width:98px;
    margin:1px 0;
    }

    Texto
    Texto
    Texto

    Texto
    Texto

    Texto
    Texto

  61. 61
    Dani Says:

    hola…amigos a ver si pueden ayudar, ya tengo un menu horizontal desplegable, ahora tengo un problema, debe ser con el estilo CCS, la cuestion es que en el mozilla firefox se ve perfecto, pero en el IE.6, todos los se estan poniendo unos debajo del otro…Ufff, ya he probado en darle en el CCS…

    display:inline;

    pero nada, si alguien sabe porque ocurre esto, please que me escriba, saludos y gracias de antemano…Danis

  62. 62
    nnatali Says:

    Hola Nestor! ¿Qué problema tienes para que se muestre? ¿No se muestra en linea o no se despliega?
    Vamos a ver si conseguimos solucionarlo :) Un saludo!

  63. 63
    nnatali Says:

    Hola Dani!
    Te cuento que el IE6 me trae loca, no he conseguido hacer que funcione el desplegable sólo con css (y dudo que lo consiga ya), aunque tu me cuentas que lo que no puedes hacer es que se vean en horizontal los botones, no?
    Para eso tienes que ponerle a los botones (<li>) el float:left, para que floten a la izquierda y no aparezcan uno debajo de otro.
    De todas formas, si no puedes solucionarlo y quieres poner el enlace al ejemplo online le hecho un vistazo a ver que le ocurre.
    Un saludo y ánimo!! :)

  64. 64
    Jesus Lopez Says:

    Hola a todos: Parece que tenemos problemas con los menus y al que me incluyo ahora aunque mi problema esta localizado pero no encuentro la forma de solucionarlo. Os pasare el código y os explico el problema de mi menú a ver si me podeis ayudar ademas esto os puede ser util a todos porque solo tiene ese fallo q es visual y lo demas esta perfecto.

    El menu que he creado necesitaba que tuviese el mismo tamaño que el submenu por eso le puse en ( ul#navmenu-h a ) esto: width: 104px; como vereis. Si lo probais esta perfecto salvo un pequeño defecto que cuando vais por work –> Websites –> graygs una vez , si volveis a work se visualiza websites (esta OK) pero aparece el 3º submenu donde esta graygs, aparece solo el color del bloque sin las letras y no deberia aparecer hasta que pasas el ratón a websites y no queda muy estetico.

    Documento sin título

    /* Root = Horizontal, Secondary = Vertical */
    ul#navmenu-h {
    margin: 0; padding: 0; list-style: none; position: relative;
    }

    ul#navmenu-h li {
    /* en IE float y position lo pone en horiz y no en vertical y ancho */
    float: left;
    position: relative;
    display: inline;
    z-index: 1;
    }

    ul#navmenu-h ul {
    width: 119px; /* Tamaño Submenú */
    margin-left: 0;
    list-style: none;
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    visibility: visible;
    }

    ul#navmenu-h ul:after /*From IE 7 lack of compliance*/{
    clear: both;
    display: block;
    font: 1px/0px serif;
    content: “.”;
    height: 0;
    visibility: hidden;
    }

    ul#navmenu-h ul li {
    width: 119px; /*160px; width: 98%; display: block; */
    float: left; /*For IE 7 lack of compliance*/
    display: block !important;
    display: inline; /*For IE*/
    }

    /* Root Menu */
    ul#navmenu-h a {

    border: 1px solid #FFF;
    border-right-color: #CCC;
    border-bottom-color: #CCC;
    padding: 0 6px;
    float: none !important; /*For Opera*/
    float: left; /*For IE*/
    display: block;
    background: #8b0000;
    color: #ffffff;
    font: bold 10px/22px Verdana, Arial, Helvetica, sans-serif;
    text-decoration: none;
    height: auto !important;
    height: 1%; /*For IE*/

    width: 104px; /* si añado esto para = tamaño q submenu aparece el error*/
    /*
    Ori
    border: 1px solid #FFF;
    border-right-color: #CCC;
    border-bottom-color: #CCC;
    padding: 0 6px;
    float: none !important; /*For Opera* /
    float: left; /*For IE* /
    display: block;
    background: #EEE;
    color: #666;
    font: bold 10px/22px Verdana, Arial, Helvetica, sans-serif;
    text-decoration: none;
    height: auto !important;
    height: 1%; /*For IE* /

    MIO
    border-top: 1px solid #FFF;
    border-right: 1px solid #FFF;
    padding: 6px;
    float: left;
    display: block;
    background: #8b0000;
    color: #ffffff;
    font: bold 11px Arial, sans-serif;
    text-decoration: none;
    height: 1%;
    width: 104px; /*width: 104px; yo*/

    }

    /* Root Menu Hover Persistence */
    ul#navmenu-h a:hover,
    ul#navmenu-h li:hover a,
    ul#navmenu-h li.iehover a {
    background: #a52a2a;
    color: #f5f5cc;
    }

    /* 2nd Menu */
    ul#navmenu-h li:hover li a,
    ul#navmenu-h li.iehover li a {
    float: none;
    background: #a52a2a;
    }

    /* 2nd Menu Hover Persistence */
    ul#navmenu-h li:hover li a:hover,
    ul#navmenu-h li:hover li:hover a,
    ul#navmenu-h li.iehover li a:hover,
    ul#navmenu-h li.iehover li.iehover a {
    background: #b22222;
    }

    /* 3rd Menu */
    ul#navmenu-h li:hover li:hover li a,
    ul#navmenu-h li.iehover li.iehover li a {
    background: #b22222;
    }

    /* 3rd Menu Hover Persistence */
    ul#navmenu-h li:hover li:hover li a:hover,
    ul#navmenu-h li:hover li:hover li:hover a,
    ul#navmenu-h li.iehover li.iehover li a:hover,
    ul#navmenu-h li.iehover li.iehover li.iehover a {
    background: #D51B1B;
    }

    /* 4th Menu */
    ul#navmenu-h li:hover li:hover li:hover li a,
    ul#navmenu-h li.iehover li.iehover li.iehover li a {
    background: #D51B1B;
    }

    /* 4th Menu Hover */
    ul#navmenu-h li:hover li:hover li:hover li a:hover,
    ul#navmenu-h li.iehover li.iehover li.iehover li a:hover {
    background: #daa520;
    }

    ul#navmenu-h ul ul,
    ul#navmenu-h ul ul ul {
    display: none;
    position: absolute;
    top: 0;
    left: 119px;
    }

    /* Do Not Move – Must Come Before display:block for Gecko */
    ul#navmenu-h li:hover ul ul,
    ul#navmenu-h li:hover ul ul ul,
    ul#navmenu-h li.iehover ul ul,
    ul#navmenu-h li.iehover ul ul ul {
    display: none;
    }

    ul#navmenu-h li:hover ul,
    ul#navmenu-h ul li:hover ul,
    ul#navmenu-h ul ul li:hover ul,
    ul#navmenu-h li.iehover ul,
    ul#navmenu-h ul li.iehover ul,
    ul#navmenu-h ul ul li.iehover ul {
    display: block;
    }

    navHover = function() {
    var lis = document.getElementById(“navmenu-h”).getElementsByTagName(“LI”);
    for (var i=0; i lis[i].onmouseover=function() {
    this.className+=” iehover”;
    }
    lis[i].onmouseout=function() {
    this.className=this.className.replace(new RegExp(” iehover\\b”), “”);
    }
    }
    }
    if (window.attachEvent) window.attachEvent(“onload”, navHover);

  65. 65
    duSellen Says:

    hola!

    gracias!!

    por el ejemplo,,de seguro me servira mucho

    ( =

    Saludos!!

    beuna vibra!!

  66. 66
    Adrian Says:

    hola, estoy haciendo un menu desplegable horizontal, pero en IE6 que es donde lo necesito no se despliega, hay alguna solucion con javascript que me permita desplegarlo sin problema

  67. 67
    Adrian Says:

    ok, ya resolvi les muestro un codigo para todos los navegadores, bueno no estoy seguro pero para la mayoria, un poko complicado pero funciona ok

    ——————————-codigo html—————————–

    —————————————css—————————–
    * { margin: 0px;
    padding: 0px; outline: 0;
    }
    html, body { width: 100%;}

    body { background: #366;
    font-family: Verdana, Arial, Helvetica, sans-serif;
    }
    #menu { text-align: center;
    font-size: 0.7em;
    width: 820px;
    margin: 20px auto;
    }
    #menu ul { list-style-type: none;}
    #menu ul li.nivel1 { float: left;
    width: 162px;
    margin-right: 2px;
    }
    #menu ul li a {display: block;
    text-decoration: none;
    color: #fff;
    background-color: #399;
    border: solid 1px #fff;
    padding: 8px;
    position: relative;
    }
    #menu ul li:hover {position: relative;
    }
    #menu ul li a:hover, #menu ul li:hover a.nivel1 {background-color: #6CC;
    color: #000;
    position: relative;
    }
    #menu ul li a.nivel1 {display: block!important;display: none;
    position: relative;
    }
    #menu ul li ul {display: none;
    }
    #menu ul li a:hover ul, #menu ul li:hover ul {display: block;
    position: absolute;left: 0px;
    }
    #menu ul li ul li a {width: 160px;
    padding: 6px 0px 8px 0px;
    border-top-color: #000;
    }
    #menu ul li ul li a:hover {border-top-color: #000;
    position: relative;
    }
    table.falsa {border-collapse:collapse;
    border:0px;
    float: left;
    position: relative;
    } /* CSS Document */

    Espero que les sirva a todos los que tenemos problemas con el IE6 y menores

  68. 68
    Adrian Says:

    bueno lamento que el codigo html no salga ya que es vital para la pagina, pero bueno si lo quieren me pueden escrivir adriansc9101@gmail.com :) bueno bye

  69. 69
    CarLiLlooo Says:

    No consigo hacerlo funcionar.
    No sé cuando hay que poner lo de ’style” y eso.
    engo un Blog en Blogger, y puedo añadir plugings de HTML/Javascript, por ejemplo, y trastear el código fuente.
    Si me pudieses ayudar…
    ¿Dónde puedo contactar contigo?

  70. 70
    john Says:

    HOla, estoy haciendo una pagina, la cual funciona bien sobre firefox pero en ie6 no logro que se vea bien, puse unos iconos y una barra que estan muy arriba.

  71. 71
    nnatali Says:

    CarLiLlooo el css va entre las etiquetas <style type=”text/css”> y </style>. La verdad que no sé muy bien como funcionan las plantillas de Blogger, pero si quieres mandame un email y lo miramos.

    Jhon el problema lo tienes con el menú o con otro elemento de tu página? Si tienes un enlace indicalo a si lo miramos online.

    Saludos!!

  72. 72
    CarLiLlooo Says:

    Buenas de nuevo, nnatali

    El problema lo arreglé. Yo ponía esas etiquetas pero para todo.
    Te explico: copiaba todos los códigos seguidos, menos el primero que es el plugin, y sólo ponía lo de ’style’ una vez al principio y otra al final.
    He ido poniendo eso para cada trocito del código y ya va bien.

    Pero tengo un problema. Cuando pongo el ratón encima del menú, se me despliegan los ’submenus’ correspondientes, pero echados un poco a la izquierda. Sé que hay que tocar en los valores de ‘px’, pero no sé cual corresponde al de los ’submenus’.

    Y otra pregunta, ¿cómo puedo hacer que quepa todo en un renglón en los ’submenus’? Ejemplo:

    Apartado Apartado
    Subapartado Subapartado del menu
    del menu

    Quiero ponerlo como en el segundo caso.

    Gracias nnatali

  73. 73
    nnatali Says:

    CarLiLlooo pasame el enlace a tu ejemplo y te digo a que elemento exactamente tienes que añadirle más px :)

  74. 74
    CarLiLlooo Says:

    http://www.blogmalaguista.blogspot.com

  75. 75
    nnatali Says:

    Oki, para modificar el ancho de los li del submenu, así no se te baja de renglón basta con cambiar / añadir el width a este elemento:

    ul#menu-horizontal li ul li {
    width:120px;
    }

    Luego sobre lo de que se desplaza para el lado, debes poner el margin:0 y el position:relativa para el elemento ul#menu-horizontal ul:

    ul#menu-horizontal ul {
    display: none;
    position: relative;
    top: 24;
    left:0;
    margin:0;
    padding:0;
    }

    Ya me cuentas!

  76. 76
    CarLiLlooo Says:

    Perfect !! Ya va perfecto, le voy a cambiar el color de los ’submenus’ y listo.

    Muchas gracias nnatali

    Daros una vuelta cuando querais por mi blog:

    http://www.blogmalaguista.blogspot.com

  77. 77
    nnatali Says:

    Genial! Me iré pasando aunque no soy muy futbolera yo.. xD

  78. 78
    CarLiLlooo Says:

    Por cierto, nnatali, es que ha ampliado al máximo la plantilla, y automáticamente la plantilla me ha dejado un espacio para el menú.
    Yo lo que quiero es que esté como lo tenía antes, que se vea debajo el fondo de las entradas, no el del propio blog.
    No sé si me entiendes xd

  79. 79
    nnatali Says:

    te entiendo te entiendo, pues eso es cosa de la plantilla, ponle este estilo a tu archivo .css:
    #content-wrapper {
    background-color:#EEF6FE;
    }
    ya me dices si se te arregló :) saludos!

  80. 80
    CarLiLlooo Says:

    No lo había pensado así…
    Estaba intentando meter lo que es el fondo de las entradas debajo del menú. No caí que en vez de hacer eso, podía ponerle el mismo color de fondo al menú.
    Lo único que como ya había un trocito del archivo que era,

    #content-wrapper {

    lo que hice fu añadir lo del color dentro de ese trocito.

    Gracias de nuevo nnatali!!

  81. 81
    nnatali Says:

    No hay de qué! Y ya sabes donde estoy por si tienes otra duda :)
    Un saludo!

  82. 82
    CarLiLlooo Says:

    Hola nnatali, soy yo, el tío más pesado del mundo jaja

    Mira, que es que al ampliar el ancho de la plantilla, se me ha quedado el menú, en medio. Y el problema es que al ampliar las casillas del menú, se me pone en dos renglones.
    Creo que es porque está predeterminado para estar en la posición central de la plantilla.
    ¿Dónde tengo que tocar el código para que pueda ampliar cada una de las casillas y que ocupe el renglón entero?

  83. 83
    CarLiLlooo Says:

    Mejor dejalo, lo pongo encima sólo del espacio de las entradas, que no queda tan mal y no debo tocar nada más.

  84. 84
    nnatali Says:

    Hola CarLiLlooo no te preocupes, ya le estoy cogiendo cariño al blog y todo jaja
    Para que no se vaya a la derecha debes añadir esto:

    #menu-horizontal {
    padding:0;
    }

    Ya que el menú te pilla padding-left heredado de otro elemento y por eso te lo desplaza, un saludo!

  85. 85
    julio Says:

    Mucho codigo y complicaciones inutiles, cuando se puede hacer con una simple tabla y tienes las opciones de imagenes de fondo, adornos, etc.

  86. 86
    Alex68 Says:

    Saludos mi pregunta es se puede aser el CSS fuera de todo el codigo, ose un archivo aparte nadamas hay que llamarlo

  87. 87
    nnatali Says:

    Hola Alex68, si, en eso no hay problema simplemente crea un archivo .css con los estilos y luego llámalos desde la cabacera de tu documento .html, saludos!

  88. 88
    G-or-G Says:

    hola, estupendo menú, voy a usarlo, pero tengo una duda. Cómo hago para que el enlace esté en la casilla completa de la en vez de en sólo el texto de la casilla. Porque el fondo cambia cuando pones el cursor en la , pero si no estás sobre el texto no parece que haya enlace y eso puede ser un poco confuso. ¿puedes ayudarme?

    un saludo

  89. 89
    nnatali Says:

    Hola G-or-G!
    Pues para hacer eso deberiamos especificar el ancho y alto igual que el color de fondo al elemento a, al enlace, lo malo esq desgraciadamente no todos los navegadores lo interpretan bien.. :(

  90. 90
    leeloo Says:

    Hola,
    me va de maravilla el codigo para lo que tenía en mente, pero necesito que los submenus también sean hoizontales y salgan por debajo de la primera linea dew menús. ¿me podeis ayudar? ya no se que mas probar

  91. 91
    nnatali Says:

    Para conseguir que los submenus sean horizontales, asignándole un float:left a los >li> que lo forman debería bastar :) Un saludo!

  92. 92
    clicla Says:

    Hola,
    estoy empezando con css y aunque pueda parecer ridicula, mi pregunta es: es lo mismo ul#menu que .menu?? un saludo

  93. 93
    nnatali Says:

    Hola clicla!
    No sería igual, con #menu llamamos a un elemento con id=”menu” y con .menu a un elemento con class=”menu”.
    La diferencia de poner una u otra cosa es que las clases se pueden aplicar a varios elementos y los id son únicos.
    Espero no haberte liado más xD Saludos!

  94. 94
    Jose Says:

    Hola nnataki, tengo una dudilla, como podrías darle un color diferente al submenú cuando pase el cursor por encima???

  95. 95
    nnatali Says:

    Hola Jose!
    Cambia el valor de background aplicado a #menu-horizontal li:hover y listo :)

  96. 96
    Jose Says:

    Gracias nnatali por la respuesta pero creo que leyendo mi pregunta no la expliqué bien, cuando pasas el cursor por encima de ese menú pongamos que el menú es negro y al pasar el cursor aparece gris, pero cuando se despliega el submenú, en vez de gris quiero que sea amarillo por ejemplo… creo que ahora si que me explico. Gracias nuevamente por la respuesta y por la página, es genial.

  97. 97
    TonchitoZ Says:

    Hola nnatali!!!

    Primeramente queria felicitarte por este hermoso código, la verdad me gustó mucho porque pude hacer lo que quería, algo útil, funcional, senvillo y sin nada de efectos java (ya que de java tengo 0 conocimiento casi jeje)

    Segundo noté que en el menú al deslizarse las pestañas (si es que tenes texto o continua tu web) te deslizaba todo para abajo :S (vease en el ejemplo de http://www.blogmalaguista.blogspot.com que posteó nuestro amigo CarLiLlooo) entonces como ello no me complasia me tomé el atrevimiento de modificar un poco el código.

    ¿Que fué lo que hice para solucionar esto? Simple, agregue un qeu el mismo contenia los menús y luego en el css apliqué esto:

    #menu {height:19px; position:relative;}

    Luego de esto se me solucionó mi problema. Te agradezco enormemente por este hermoso code nuevamente y a José Rico e Ring también ya que ellos han colaborado (K)

    Si desean ver un ejemplo de como quedaría el menú el mismo se encuentra en el panel de usuario de mi web.

    http://tonchi.byethost31.com/

    Gracias y espero les sea útil de algo mi code.

    TE GANASTES UN FAN!!!!!!

  98. 98
    nnatali Says:

    Hola Jose! Para cambiar solo el fondo del submenu, tienes que aplicarlo a este elemento: #menu-horizontal li ul li:hover.

    Hola TonchitoZ muchas gracias por tu comentario y por compartirlo con nosotros! :)

    Saludos!

Leave a Reply