Menú horizontal con imagen al pasar el mouse

En este artículo vamos a programar desde 0 un menú horizontal que al hacer hover o pasar el ratón por encima del elemento del menú aparezca un imagen por encima que aparentemente no está visible empleando para ello jQuery.

menush

El contenido HTML del menú deberá ser tan simple como el siguiente  ejemplo (una lista de elementos):

<ul id="menu">
    <li><a href="#">Home</a></li>
    <li><a href="#">Services</a></li>
    <li><a href="#">Contact</a></li>
</ul>

Ahora añadiremos un poco de maquetación simple al menú en la hoja de estilos que utilices:

#menu {
    float:left;
    width:100%;
    height:40px;
    background-color:#003399;
    z-index:9999;
    margin-top:40px;
}

#menu li {
    float:left;
    list-style:none;
    height:40px;
    position:relative;
    text-align:center;
}

#menu li a {
    background-color: #003399;
    color: #FFFFFF;
    float: left;
    height: 30px;
    overflow: hidden;
    padding: 5px 10px;
    position: relative;
    text-align: center;
    text-decoration: none;
    z-index: 1;
}
#menu li a:hover {
    color:#003399;
    background-color: #999999;
    text-decoration:none;
}

#menu li img {
    bottom:0px;
    left:0px;
    position: absolute;
    z-index:0;
}

Y ahora faltaría hablar de la parte clave o más interesante del asunto. Realizar el efecto de que al pasar el ratón por encima de uno de los elementos del menú, aparezca una imagen que aparentemente está escondida.

En la cabecera de la página que estés utilizando deberás añadir la librería jQuery + el script que realiza la operación:

<script type="text/javascript" src="../jquery.js"></script>
<script type="text/javascript">
$(function() {
    $('#menu li').hover(function(){
        $(this).find('img').animate({bottom:'35px'},{queue:false,duration:500});
    }, function(){
        $(this).find('img').animate({bottom:'0px'},{queue:false,duration:500});
    });
    
    $.each($('#menu li'), function(i, l){
        if (i == 0)
               $(this).append('<img src="grey.jpg" />');
        else
            $(this).append('<img src="taza.png" />');
    });
});
</script>

En la primera parte del código tenemos la aplicación del efecto al hacer hover con el ratón, utilizando la función animate que con los parámetros que le hemos pasado lo que conseguimos es subir la imagen a 35px de su posición con una duración de medio segundo. Al sacar el ratón, se devuelve la imagen a su posición original. Fíjate en los estilos de las imágenes que están sutuadas a bottom:0px.

En la segunda parte del código estamos añadiendo algo de lógica al menú mediante un bucle. Es ampliable ya que en este caso tan solo estamos añadiendo a cada elemento del menú una imagen.  Estamos iterando todos los li del menú y para el primer elemento le estamos añadiendo una imagen asociada con el nombre «grey.jpg» y para el resto «taza.png».

Podrás ver el efecto en el ejemplo en funcionamiento

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(7 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

5 respuestas a “Menú horizontal con imagen al pasar el mouse”

  1. Jesús dice:

    Hola José Aguilar. Supongamos que en mi página web tengo capa cabecera, capa
    lado izquierdo, capa principal y capa pie.
    Lo que quiero que con tu ejemplo de menu
    http://www.jose-aguilar.com/blog/menu-desplegable-simple-con-jquery/ o bien con este mismo Menú horizontal con imagen al pasar el mouse
    al hacer clic en los enlaces mis páginas html se abran en la capa principal sin
    que se vean alteradas las capas cabecera, izquierda y pie.
    Lo tengo para que se abran en un IFRAME y funciona, <li><a href="fracturas.html"
    target="hud">Fracturas</a></li> y el iframe <iframe src= "archivos/contenido.html"
    name= "hud" id= "hud" width="1175" height="800"></iframe>
    ahora quisiera el mismo efecto pero en la capa principal sin iframe
    <div>="principal….
    Gracias de nuevo y Te deseo a ti y a los tuyos unos Felices días y un gran 2017

  2. Jesús dice:

    Hola José Aguilar. Supongamos que en mi página web tengo capa cabecera, capa
    lado izquierdo, capa principal y capa pie.
    Lo que quiero que con tu ejemplo de menu
    http://www.jose-aguilar.com/blog/menu-desplegable-simple-con-jquery/
    al hacer clic en los enlaces mis páginas html se abran en la capa principal sin
    que se vean alteradas las capas cabecera, izquierda y pie.
    Lo tengo para que se abran en un IFRAME y funciona, <li><a href="fracturas.html"
    target="hud">Fracturas</a></li> y el iframe <iframe src= "archivos/contenido.html"
    name= "hud" id= "hud" width="1175" height="800"></iframe>
    ahora quisiera el mismo efecto pero en la capa principal sin iframe
    <div>="principal….
    Gracias de nuevo y Te deseo a ti y a los tuyos unos Felices días y un gran 2017. He intentado introducir como txt pero me daba error 403. será que tienes protegido escribir direcciones reales?

  3. Jesús dice:

    Hola! Intento dejar comentario y me da error 403.

  4. Jesús dice:

    Hola! qué menús necesito para abrir los enlaces.

    link1
    link2
    linkn

    en otra capa al lado derecho y que las dos permanezcan en pantalla como haces tú en tu web.
    Gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre