Menú vertical desplegable con CSS
Crear un menú vertical desplegable sin necesidad de utilizar JavaScript es posible. Empleando CSS y HTML para crear las listas es suficiente.
En este artículo vamos a ver como crear un menú sencillo, vertical y desplegable creando la plantilla HTML y el código CSS necesario.
En el ejemplo que vamos a ilustrar presentamos unos estilos muy simples que pueden ser modificados muy fácilmente a través de la hoja de estilos CSS.
El menú vertical desplegable está pensado para situarlo en alguna de las columnas (izquierda o derecha) de tu página Web, así que deberás posicionarte en esa parte del código de tu página para añadir una lista anidada con ul y li dentro de un contenedor con id=»menu». En el caso del ejemplo en funcionamiento tenemos lo siguiente:
<div id="menu">
<ul>
<li class="has-sub"><a title="" href="https://www.jose-aguilar.com/tienda/es/3-prestashop">Prestashop</a>
<ul>
<li class="has-sub"><a title="" href="#">Módulos</a>
<ul>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/3-backoffice">Administración</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/4-busqueda-y-filtros">Búsqueda y filtros</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/12-publicidad-y-marketing">Publicidad y Marketing</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/8-front-office">Front Office</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/7-exportacion-e-importacion">Importación y Exportación</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/10-formas-de-pago">Formas de pago</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/5-precios-descuentos-y-ofertas">Precio y Descuentos</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/14-seo">SEO</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/6-envios-y-logistica">Transporte y Logística</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/13-redes-sociales">Redes Sociales</a></li>
<li><a title="" href="https://www.jose-aguilar.com/modulos-prestashop/es/15-modulos-gratis">GRATIS</a></li>
</ul>
</li>
<li><a title="" href="#">Themes</a></li>
</ul>
</li>
<li class="has-sub"><a title="" href="https://www.jose-aguilar.com/blog/secciones/wordpress/">WordPress</a>
<li class="has-sub"><a title="" href="https://www.jose-aguilar.com/blog/secciones/joomla/">Joomla</a>
</ul>
</div>
El código anterior no es más que la lista de los elementos del menú con varios niveles. La clave del asunto está en la hoja de estilos que presentamos a continuación:
#menu {
padding: 0;
margin: 0;
border: 0;
}
#menu ul, li {
list-style: none;
margin: 0;
padding: 0;
}
#menu ul {
position: relative;
z-index: 597;
float: left;
}
#menu ul li {
float: left;
min-height: 1px;
line-height: 1em;
vertical-align: middle;
}
#menu ul li.hover,
#menu ul li:hover {
position: relative;
z-index: 599;
cursor: default;
}
#menu ul ul {
visibility: hidden;
position: absolute;
top: 100%;
left: 0;
z-index: 598;
width: 100%;
}
#menu ul ul li {
float: none;
}
#menu ul li:hover > ul {
visibility: visible;
}
#menu ul ul {
top: 0;
left: 100%;
}
#menu ul li {
float: none;
}
#menu {
width: 255px;
}
#menu span, #menu a {
display: inline-block;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
text-decoration: none;
}
#menu:after, #menu ul:after {
content: '';
display: block;
clear: both;
}
#menu ul, #menu li {
width: 100%;
}
#menu li {
background: #dddddd;
}
#menu li:hover {
background: #f6f6f6;
}
#menu a {
color: #666666;
line-height: 160%;
padding: 11px 28px 11px 28px;
width: 253px;
}
#menu ul ul li {
background: #f6f6f6;
}
#menu ul ul li:hover {
background: #dddddd;
}
#menu ul ul li:hover a {
color: #666666;
}
#menu ul ul li ul li {
background: #dddddd;
}
#menu ul ul li ul li:hover {
background: #b7b7b7;
}
#menu .has-sub {
position: relative;
}
#menu .has-sub:after, #menu .has-sub > ul > .has-sub:hover:after {
content: '';
display: block;
width: 10px;
height: 9px;
position: absolute;
right: 5px;
top: 50%;
margin-top: -5px;
}
#menu .fa-angle-right {
float: right;
}
Obteniendo como resultado:
Esta entrada ha sido actualizada el 05/11/2018.
Como puedo hacer que los submenú se muestren al mismo nivel, es decir que todos comiencen hasta arriba como en el primer item del menú, que no sea como escalón
Hola Jesús,
Para conseguir lo que necesitas tendrás que jugar con la posición absoluta de los niveles ajustando el atributo left de la hoja de estilos según tu conveniencia.
Saludos
Excelente, funciono de maravilla
muy útil e ideal para proyectos que no puede usar muchos recursos.
Hola, ¿qué cambios habría que hacer en tu código para que las subcategorías se mostrasen debajo de su categoría padre y no a la derecha de la categoria padre? Es decir, al poner el ratón sobre «prestashop», se mostraría «modulos» y «themes» debajo de prestashop con una pequeña sangría y «wordpress», «joomla» y «proyectos» quedaría debajo de «modulos» y «themes» sin la sangria. Lógicamente solo habrá un nivel de subcategoría, no habría otro desplegable al poner el raton sobre «modulos» o «themes».
Muchas gracias
Hola buenos días,
Para tu caso será mejor que te guies de un tutorial para hacer un menú horizontal. Como por ejemplo este:
https://www.jose-aguilar.com/blog/menu-horizontal-css-query/
Saludos
Eres lo mejor de vida!!!!
Buenas, esta muy entendible tu ejemplo y aun más para uno de novato, mi duda es como podría hacer para que en mi primer subcategoria apareciera una lista doble, ya que mi primer subcategoria tiene 26 elementos y para verlos todos se tiene que desplazar la ventana hacia abajo, en vez de eso me gustaria que aparecieran dos listas de 13, ojalá me pudieras orientar, saludos.
Hola buenas tardes,
Yo creo que para tu caso deberás hacer dos listas dentro del desplegable. Una en cada columna.
Saludos
Gracias José, lo mejor que encotré relacionado en la web
EXCELENTE TUTORIAL! justo lo que necesitaba
Hola que tal el ejemplo no funciona para internet explorer 10, saludos
Muchisimas gracias, habia intentado hacerlo con la misma ideologia que el horizontal pero tenia conflictos despues de la primera subcategoria, excelente colaboracion, gracias
Buenos días, esto es justo lo que andaba buscando pero tengo un problema. No soy ningún experto ni mucho menos en CSS y necesito trasladar esto al bloque de categorias de prestashop, ¿podrías indicarme cómo hacerlo? Es que no encuentro ningún módulo con estas características para instalar. Muchas gracias.
P.D. Mi versión de PS en 1.5.6
Hola buenas tardes,
Posiblemente te pueda servir lo siguiente:
http://www.jose-aguilar.com/modulos-prestashop/80-vertical-megamenu-con-categorias.html
Y después lo maquetas a tu gusto.
Saludos,
Impresionante es justo lo que anda buscando gracias !!! Jose.
buenos días, soy un aprendiz, y este ejemplo me sirvió mucho, pero tengo un problema yo tengo una galería de fotos que quiero mostrar junto al menú pero no se puede, el menú sale debajo de la galería, o encima, mas no en linea como yo lo quiero.
mi pagina es http://www.logisticarecreacionyeventos.com
nesecito que me ayudes con este invonveniente, gracias.
* { margin: 0; outline: none; }
body { background-color: }
.c { clear: both; }
#wrapper { margin: auto; padding: 0 40px 60px 40px; width:100px;}
h2 { padding: 20px 0 10px 0; font-size: 24px; line-height: 40px; font-weight: normal; color: #adc276; text-shadow: 0 1px 3px #222222; }
#menu {
padding: -10;
margin: -10;
border: 0;
}
#menu ul, li {
list-style: none;
margin: 5;
padding: 1;
}
#menu ul {
position: relative;
z-index: 597;
float: left;
}
#menu ul li {
float: left;
min-height: 1px;
line-height: 1em;
vertical-align: middle;
}
#menu ul li.hover,
#menu ul li:hover {
position: relative;
z-index: 599;
cursor: default;
}
#menu ul ul {
visibility: hidden;
position: absolute;
top: 100%;
left: 0;
z-index: 598;
width: 100%;
}
#menu ul ul li {
float: none;
}
#menu ul li:hover > ul {
visibility: visible;
}
#menu ul ul {
top: -115;
left: 95%;
}
#menu ul li {
float: none;
}
#menu {
width: 180px;
}
#menu span, #menu a {
display: inline-block;
font-family: Arial black, Helvetica, sans-serif;
font-size: 14px;
text-decoration: none;
}
#menu:after, #menu ul:after {
content: »;
display: block;
clear: both;
}
#menu ul, #menu li {
width: 100%;
}
#menu li {
background: #99FFEE;
}
#menu li:hover {
background: #FFFFEE;
}
#menu a {
color: #111111;
line-height: 160%;
padding: 11px 28px 11px 28px;
width: 144px;
}
#menu ul ul li {
background: #99FFEE;
}
#menu ul ul li:hover {
background: #FFFF88;
}
#menu ul ul li:hover a {
color: #111111;
}
#menu ul ul li ul li {
background: #99FFEE;
}
#menu ul ul li ul li:hover {
background: #FFBBFF;
}
#menu .has-sub {
position: relative;
}
#menu .has-sub:after, #menu .has-sub > ul > .has-sub:hover:after {
content: »;
display: block;
width: 10px;
height: 9px;
position: absolute;
right: 5px;
top: 50%;
margin-top: -5px;
background-image: url(right.png);
}
#menu .has-sub > ul > .has-sub:after, #menu .has-sub:hover:after {
background-image: url(right.png);
}
effectsDemo2 = ‘rain,stairs,fade’;
var demoSlider_2 = Sliderman.slider({container: ‘SliderName_2’, width: 700, height: 500, effects: effectsDemo2,
display: {
autoplay: 4000,
loading: {background: ‘#000000’, opacity: 0.7, image: ‘img/loading.gif’},
buttons: {hide: true, opacity: 1, prev: {className: ‘SliderNamePrev_2’, label: »}, next: {className: ‘SliderNameNext_2’, label: »}},
description: {hide: true, background: ‘#000000’, opacity: 0.7, height: 50, position: ‘bottom’},
navigation: {container: ‘SliderNameNavigation_2’, label: »}
}
});
Talleres Corporativo y consultorias
Eventos Empresariales
Alquiler de Material Rcreativo
Potro Mecanico
Inflable Resbaladero
Inflable Multy PlayGround
Inflable Saltarin Castillo
Mini Inflable Saltarin
Paquetes Recreativos
Paquetes Recreativos Basicos
Paquetes Recreativos Especiales
Chiquy Baby
La Mision del Pirata
Paquete de Princesas
Mini Feria Inflable
Fiesta Vaquera
Paquetes Recreativos Personalizados
Sonido y Luces
Personajes Infantiles
Decoracion
Contactenos
Me parece que ya lo has podido arreglar ya que lo veo en linea
EXCELENTE EL MEJOR QUE PUDE CONSEGUIR Y RESOLVI CON ESTE, GRACIAS POR COMPARTIR