Este es un menú desplegable muy simple que usa algunas técnicas de CSS3 que lo hacen llamativo en algunos navegadores pero al que podemos modificar un poco para que funcione bien en cualquier navegador.
El HTML no tiene muchos misterios; en un DIV con una clase a la que llamamos drop-menu, colocamos un SPAN que es lo que nos servirá para desplegar y contraer el menú que está en una lista ordenada:
<div class="drop-menu">
<span class="plus">+</span>Seleccione una opción del menú
<ul class="sub-menu">
<li><a href="URL1"><img src="URL_imagen1"/>Texto enlace 1</a></li>
<li><a href="URL2"><img src="URL_imagen2"/>Texto enlace 2</a></li>
<li><a href="URL3"><img src="URL_imagen2"/>Texto enlace 3</a></li>
</ul>
</div>
Como siempre, la clave está en el CSS y allí hay muchas variantes. Este sería el necesario para realizar el ejemplo:
.drop-menu {
background-color: #242F3A;
border: 1px solid #343F4A;
cursor: pointer;
display: block;
font-family: Tahoma;
font-size: 20px;
height: 25px;
letter-spacing: -1px;
margin: 0 auto;
max-height: 25px;
padding: 10px;
position: relative;
text-align: left;
width: 300px;
z-index: 1000;
}
.plus {
display: inline-block;
font-family: Georgia;
font-size: 22px;
font-weight: bold;
margin-right: 10px;
-moz-transition: .3s ease-in-out;
-o-transition: .3s ease-in-out;
-webkit-transition: .3s ease-in-out;
}
.drop-menu:hover {}
.drop-menu:hover .sub-menu {
display: inline-block;
}
.drop-menu:hover .plus {
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
}
.sub-menu {
background-color: #242F3A;
background:image: -moz-linear-gradient(100% 100% 90deg, #000000, #242F3A);
background-image: -webkit-gradient(linear, left bottom, left top, from(#000000), to(#242F3A));
filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#FF242F3A', EndColorStr='#FF000000');
border: 1px solid #343F4A;
display: none;
border-top: none;
margin-left: -11px !important;
margin-top: 5px;
padding: 10px;
width: 300px;
}
.sub-menu li {
display: block;
font-size: 20px;
height: 22px;
list-style-type: none;
padding: 8px 0;
}
.sub-menu li img {
margin-right: 10px;
vertical-align: top;
}
.sub-menu li:hover {}
.sub-menu a {
color: #DDD;
font-size: 20px;
font-family: Tahoma
}
.sub-menu a:hover {
color: #ABC;
}
31 comentarios:
Muy interesante el menú JMiur, gracias por compartirlo ;)
Abrazo.
Hola Pepiche :D Si, es bueno, muy sencillito.
Un encanto: delicado y sencillo :)
Buen comienzo de lunes.
Buenísimo el truco, con un aspecto genial, en cuanto pueda lo aplicaré a mi blog. Pero tengo una duda JMiur, supongo que para ti será algo muy sencillo ;)
Con el HTML tengo algo de práctica, pero respecto al lenguaje CSS soy un completo ignorante. He probado a ponerlo pero he tenido unos cuantos fallos. A causa de ello me ha surgido una duda bastante tonta: ¿Dónde pongo el código CSS? ¿Detrás del HTML? ¿Delante? ¿Dentro? Estoy hecho un lío en ese punto, el resto creo que lo entiendo. Muchas gracias de antemano :D
Me gusta porque ahorra espacio para las suscripciones :)
Bilo, bell'isimo... :P
Cendrero:
En Blogger pedes ponerlo dentro de <b:skin> </b:skin> y sino, simplemente dentro de etiquetas:
<style>
....... aquí las definiciones y propiedades
</style>
En ambos casos, antes de </head>
Buen lunes martes miércoles y todo el resto, Graciela :D
Gem@:
Es interesante, bastante sencillo de compatibilizar con cualquier otro.
Muchísimas gracias por la aclaración JMiur, qué ignorancia la mía :( Ya lo he probado en un blog de pruebas y me funciona a la perfección, todo en orden. De nuevo te doy las gracias por el truco.
The element type "img" must be terminated by the matching end-tag "". :S
Dónde está el error si lo copié y pequé tal cuál? :S
Fíjate que la etiqueta IMG tenga la barra inclinada de cierre.
podrias decirme como lo hago para ke salgan los sub menus en vertical?.
o para que pongo varios menus .. y ke los submenus desplazen al menu debajo, para que no se oculte.
No entiendo la pregunta, muestrame un ejemplo.
Hola JMiur, vengo de nuevo para una duda sobre la personalización del objeto.
Me gustaría cambiar la imagen que se gira al desplegar el menú (el signo "+" que gira y se convierte en una "x") por otra (por ejemplo, un icono de suscripción de RSS). ¿Se puede hacer eso? ¿Cómo? Muchísimas gracias, esta es mi última duda y no volveré a molestar :S
Es lo definido en el SPAN de clase plus. Puede cambairse cualquier cosa pero los detalles dependerán de los diseños personales de cada uno, no hay una respuesta general.
Se ve bastante bien...
He estado pensando... y te pregunto si no sería posible utilizar el efecto slide de Prototype + Scriptaculous para lograr algo similar...
Asi como tenemos el efecto de expandir y contraer partes de un post...
Si cambiamos el onclick por onmouseover o por onfocus... y jugando con algo de css y maquetacion... ¿no se podría lograr algo por el estilo? :)
Todo es posible. Por ejemplo, los enlaces de la sidebar de este blog, en la parte de Autopromo, funcionan con el efecto toggle de Scriptaculous.
hola jmiur, eres una grande en esto,, quisiera hacerte una consulta, cómo logro hacer el efecto como tu sidebar de autopromo. tienes algún tutorial de eso,, mil gracias,, saludos j.jeanpiere
Efectos deslizantes hay muchso. Depende de lo que uses en tu sitio:
con jQuery
con Scriptaculous
sin librerías
más simples
Ahh bueno... entonces haré pruebitas a ver que cosa bonita sale.. jaja :)
Muy bueno el blog y excelente el desplegable. Una duda ¿es posible que no funcione con IE6?
¿En Internet Explorer 6? Vaya uno a saber; tampoco creo que tenga la menor importancia si funciona o no funciona en un navegador que hace rato que pasó a la historia.
hola, tengo un foro y este menú me ha venido a las mil maravillas, pero tengo un problemilla. Levo buscando un menu como este 2 semanas, y ya lo he encontrado, pero el problema de éste esque ocupa una línea entera, y yo necesitaría un menú y al lado otro. Hay alguna forma de modificar este menú para que solo ocupe el cacho del mismo y asi poder poner varios seguidos en la misma linea? Muchas gracias y enhorabuena por haber creado un grab blog.
Este en particular no ocupa todo el ancho sin oel ancho definido que en este caso es width: 300px;.
Como utiliza clases, pueden agregarse varios en una misma página y para que uno esté al aldo del otro, bastaría por ejemplo, agregarle la propeidad flaot al contenedor:
.drop-menu {
.......
float:left;
}
bueno
Tengo una pregunta ¿Como hago para que el submenu salga hacía arriba en vez de hacía abajo? Gracias de antemano.
Tal vez, agregando
.sub-menu {
.......
position: relative;
top:valorpx;
}
donde el valor de top es un número negativo que dependerá de la altura que tenga ese submenú.
Una pregunta JMiur, primero que nada muchas gracias por compartir tu menu, esta muy practico y lindo, ya lo adapte a lo que ocupo (las medidas y todo) pero tengo un detalle ... en IE simplemente no se ve .. yo lo estaba haciendo en chrome, pero queria revisar (porque ya me habia pasado), si no se habia desacomodado algo y zas, que no se ven :L
No ´se cuál es tu ejemplo.
El menú de esta entrada se ve normal en IE.
Hay veces que me pregunto "¿Qué era de mi vida en ese tiempo?" cada vez que veo un post interesante que fue publicado varios años atrás.
Se agradece, me será útil para una que otra idea.
Gracias JMiur, salu2!
how i can make the first one clickeable?
You have to use JavaScript.
¿Quiere dejar un comentario?
recuerde que los comentarios están siendo moderados y serán publicados a la brevedad ...
Nota: sólo los miembros de este blog pueden publicar comentarios.
Si le gusta ir a lo seguro utilice este botón para abrir los comentarios en una ventana modal en esta misma pagina.
Si añora tiempos idos, use este enlace para agregar un comentario al viejo estilo ...