Programación web, Drupal, Wordpress y ¡Mucho más!

Aprende a programar y diseñar una página web gracias a los trucos y tutoriales que ofrecemos en nuestro sitio.

viernes, 12 de octubre de 2012

Como hacer un menú con submenús en HTML y CSS


Confeccionar un menú con subpestañas con html y css es relativamente fácil.


Lo primero que debemos pensar es la distribución de nuestro menú, como irá estructurado tanto el diseño como las urls, una vez dibujado a papel nuestro "mapa", debemos empezar a pintarlo mediante html y css, para ello creamos un nuevo documento con extensión .css y pegamos lo siguiente:

ul#menu {
 background: #333;
 width: 940px;
 float:left;
 padding: 5px;
}
  
ul#menu li {
 color: #fff;
 float: left;
 list-style: none;
 margin: 0% 5%;
}
  
ul#menu li:hover{
 color: #aaa073;
 cursor:pointer;
}
  
ul#menu ul {
 display: none;
 position: absolute;
 top: 49px;
 background: #333;
 color: #fff;
 padding: 5px 0px 5px 5px;
 margin: 0;
 }
  
ul#menu ul li{
 float: left;
 color: #fff;
 width:100%;
 margin:2% 0%;
}
 
 
ul#menu ul li a{
 color: #fff;
}
  
ul#menu ul li a:hover{
 color: #aaa073;
 cursor:pointer;
}
  
ul#menu li:hover ul ul,ul#menu li:hover ul ul ul,ul#menu li.iehover ul ul,ul#menu li.iehover ul ul ul {
 display: none;
 cursor:pointer;
}
  
ul#menu li:hover ul,ul#menu ul li:hover ul,ul#menu ul ul li:hover ul,ul#menu li.iehover ul,ul#menu ul li.iehover ul,ul#menu ul ul li.iehover ul {
 display: block;
 cursor:pointer;
}

Ahora abrimos un archivo con extensión .html o .php y copiamos el menú que queremos insertar en nuestra página web, en mi caso como prueba de este ejercicio realicé el siguiente:
<ul id="menu">
 <li>PESTAÑA 1</li>
 <li>PESTAÑA 2</li>
 <li>PESTAÑA 3</li>
 <li>PESTAÑA 4
  <ul>
    <li>SUBMENÚ 1</li>
    <li>SUBMENÚ 2</li>
  </ul>
 </li>
 <li>PESTAÑA 5</li>
</ul>
El aspecto del menú tal y como está ahora mismo sería el siguiente, el diseño lógicamente es totalmente personalizable a gusto del usuario:


28 comentarios:

  1. como lo pongo al centro de mi pagina

    ResponderEliminar
  2. Sustituye:

    ul#menu {
    background: #333;
    width: 940px;
    float:left;
    padding: 5px;
    }

    Por:

    ul#menu {
    background: #333;
    width: 940px;
    margin:auto;
    padding: 5px;
    overflow:hidden;
    }

    ResponderEliminar
  3. Hola
    Gracias por el ejemplo, muy bueno.
    Tengo un problema, y es que cuando lo centro con las modificaciones que le indicaste al usuario jonathan0931, efectivamente se centra, pero los submenus de la pestaña 4 no se pueden seleccionar.
    gracias.


    Ezequiel

    ResponderEliminar
  4. Hola Ezequiel, entonces az lo siguiente:

    Engloba el menu entre un div, es decir:


    ....


    al div xx dale un text-align:center; y al div menú dejalo sin float ni margin 0 auto ni nada que afecte a su alineación.

    ResponderEliminar
  5. Hola estoy muy liado y necesito tu aydua. Cuando dices abrir un archivo con extension .css y otro con extension html... a que te refieres con eso? como los abro? donde tengo ke poner cada cosa? Por favor llevo semanas intentando poner submenus pero no me salen :( gracias

    ResponderEliminar
  6. Hola Jose Manuel.

    Tranquilo, si eres nuevo en este mundo no te desesperes, nadie nace sabiendo...

    Descargate este archivo:

    http://www.studiosweb.es/blog/demos/menu-html-con-submenus/menu-html-con-submenus.zip

    Es el menú ya hecho. Es un archivo que dentro de el esta echo los elementos del menu y los estilos que lo componen.

    Para abrir el archivo te recomiendo que descarges el programa Notepad++.

    Cualquier duda comentame

    ResponderEliminar
  7. Buenas, esta muy interesante tu aporte, solo una pregunta como hago para que me redirecciones a otro página? gracias

    ResponderEliminar
  8. Debes poner algo así:

    1- abres el

    2 - pones el link con un <a href

    3- cierras el

    ResponderEliminar
  9. Perfecto, entendido.
    Ahora cómo organizo lo siguiente ...
    Web con cabecera, pié, menú a la izquierda y sección de contenido a la derecha.
    Lo creo sin problemas con un div contenedor y 4 divs más dentro.
    Mi duda surge cuando al pinchar en una opción del menú voy a otro html que quiero que tenga todo igual menos la sección del contenido.
    ¿Debo repetir todo en el nuevo html? Sería poco práctico.
    Debe haber otras formas. Seguro.
    ¡ Gracias !

    ResponderEliminar
  10. Hola jolugaju.

    Si lo que deseas es hacer es eso, entonces es hora de que empieces a estudiar PHP.

    Un saludo.

    ResponderEliminar
  11. estrick mercenario26 de marzo de 2014, 22:46

    Hay un error en :

    ul#menu ul {
    display: none;
    position: absolute;
    top: 49px;
    background: #333;
    color: #fff;
    padding: 5px 0px 5px 5px;
    margin: 0;
    }

    Hay que quitar "top: 49px;" ya que si lo dejas tal cual el submenu se mueve 49px hacia arriba, si se quita el submenu sale donde deberia.



    Saludos

    ResponderEliminar
    Respuestas
    1. xvr si era un error; xq era dificil darle al submenu este se escondia rapido y eso no es conveniente(ux)

      Eliminar
    2. xvr si era un error; xq era dificil darle al submenu este se escondia rapido y eso no es conveniente(ux)

      Eliminar
  12. Hola Estricks.

    Gracias por comentar.

    No es que haya un error, simplemente yo he querido ponerle una separación mediante un top, también se podría realizar mediante margin o padding del ul respecto al menú.

    Un saludo.

    ResponderEliminar
  13. Ricardo Marron Cristiani28 de mayo de 2014, 21:05

    HOLA UNA PREGUNTA COMO HAGO PARA QUE APARESCAN MAS "PESTAÑAS" SIN QUE SE VAYAN HACIENDO HACIA ABAJO... QUIERO TODAS EN UNA SOLA LINEA
    ESPERO TU PRONTA RESPUESTA :-D

    ResponderEliminar
  14. Hola ricardo.

    Con la demo que puedes descargar en esta página si abres el index.html veras etiquetas llamadas "li", cada una de estas etiquetas es una pestaña y dentro de ellas no tiene que haber ninguna etiqueta "ul".

    Si tienes dudas dímelo que te haría un archivo y te lo mandaría por correo.

    Un saludo

    ResponderEliminar
  15. Como hago para que las entradas queden en ese Menu??

    ResponderEliminar
  16. Hola Carlos.

    ¿Podrías explicarme que deseas hacer?. No entiendo a que te refieres con entradas.

    Un saludo.

    ResponderEliminar
  17. Alberto me podrías ayudar? Yo hice un Menú en CSS parecido al tuyo pero en Columnas (Tabla). No quiero dañarlo ni empezarlo de nuevo pero podría en uno de mis Botones colocar un SubMenú dejando esta talba?

    ResponderEliminar
  18. Hola Victor

    ¿Podrías pasarme la url para poder verlo?

    Un saludo.

    ResponderEliminar
  19. Me andubo perfecto, pero tengo un problema.


    Quiero que las opciones de menú que contengan un submenu, al clickearlas, el submenu quede fijo y no se vaya, para poder clickear en algunas de las opciones del submenu. Y que al volver a clickear en la pestaña de menu, el sub se esconda nuevamente.

    ResponderEliminar
  20. Estimado. Que tengo que hacer para que al presionar el link quede mostrando el menu y al bajar para presionar alguno no desaparesca.

    ResponderEliminar
  21. Hola, para ello necesitas la funcionalidad Toogle, aquí te lo explica muy bien:

    http://api.jquery.com/toggle/

    ResponderEliminar
  22. Gracias Nicolás por colaborar. No obstante Isaac, tendrás el código que te pasa Nicolás, ya que muchas cosas a ti no te sirven.

    Un saludo.

    ResponderEliminar
  23. hola necesito hacer un menu con sus submenues pero vertical como puedo hacerlo?

    ResponderEliminar
  24. hola necesito hacer un menu con sus submenues pero vertical como puedo hacerlo?

    ResponderEliminar
  25. no puedo darle una dirección a los botones
    ejemplo
    -li- -a href="mision.html" - pestaña 1 -a- -li- y le doy click encima y no me deja pasar a la pagina q pasa?
    me toco colocar - por q no me deja colocar lo q realmente va

    ResponderEliminar
  26. Amigos al aumentar 4 submenu se me desaparecen, osea solo puedo seleccionar hasta el 2do submeno al querer dar en el 3er submenu se me desaparece todo el submenu como hago para poder tener mas subnues?

    ResponderEliminar