• +34 685 967 885
  • +34 695 898 191
  • antgarprats@gmail.com
  • Antonio García Prats

efecto hover html y css3

El efecto hover en HTML y CSS3

En el desarrollo web, la experiencia del usuario es un factor determinante en la efectividad y usabilidad de una interfaz. Dentro de las muchas herramientas que los desarrolladores tienen a su disposición para mejorar la interacción con un sitio web, el efecto hover es uno de los más utilizados. Se trata de una pseudo-clase en CSS3 que permite aplicar estilos a un elemento cuando el usuario pasa el cursor sobre él. Este mecanismo es clave para mejorar la usabilidad y la estética de un sitio web, proporcionando una retroalimentación visual clara a los usuarios.

¿Qué es el efecto hover en HTML y CSS3?. ¿Cómo funciona?

El efecto hover en HTML y CSS3 se basa en la pseudo-clase :hover, que permite cambiar los estilos de un elemento cuando el usuario coloca el cursor sobre él. Se aplica principalmente a elementos interactivos como botones, enlaces e imágenes, aunque también puede emplearse en otros elementos de la interfaz para enriquecer la experiencia del usuario.

Cuando un usuario pasa el cursor sobre un elemento con :hover, el navegador aplica los estilos definidos en la hoja de estilos, y una vez que el cursor se retira del elemento, estos estilos desaparecen o cambian nuevamente.

Implementación del efecto hover en HTML y CSS3

A continuación, se presentan algunos ejemplos prácticos para demostrar el uso del efecto hover en distintos elementos HTML.

1. Cambiar el color de un enlace al pasar el cursor

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ejemplo de Hover</title>
    <style>
        a {
            text-decoration: none;
            color: blue;
            font-size: 18px;
        }
        
        a:hover {
            color: red;
            text-decoration: underline;
        }
    </style>
</head>
<body>
    <a href="#">Pasa el cursor sobre mí</a>
</body>
</html>

2. Botón con efecto hover

<style>
    .boton {
        background-color: #008CBA;
        color: white;
        padding: 10px 20px;
        border: none;
        cursor: pointer;
        font-size: 16px;
        transition: background-color 0.3s ease-in-out;
    }
    
    .boton:hover {
        background-color: #005f73;
    }
</style>

<button class="boton">Pasa el cursor</button>

En este caso, el color de fondo del botón cambia suavemente cuando el usuario coloca el cursor sobre él, mejorando la retroalimentación visual.

3. Imágenes con efecto hover de escala

<style>
    .imagen {
        width: 300px;
        transition: transform 0.3s ease;
    }
    
    .imagen:hover {
        transform: scale(1.1);
    }
</style>

<img src="imagen.jpg" alt="Ejemplo" class="imagen">

Este código aumenta ligeramente el tamaño de la imagen cuando el usuario pasa el cursor sobre ella, generando un efecto de acercamiento atractivo.

Cuándo utilizar el efecto hover en una interfaz de usuario

El efecto hover es una herramienta poderosa, pero debe usarse con criterio para evitar una sobrecarga visual y garantizar una experiencia de usuario fluida. Algunas ocasiones donde es recomendable aplicarlo incluyen:

Botones y enlaces interactivos: Permite indicar de manera intuitiva que un elemento es clickeable.

Menús desplegables: Facilita la navegación sin necesidad de hacer clic.

Efectos visuales en imágenes: Mejora la presentación visual de portafolios y galerías.

Resaltado de tarjetas o elementos de una lista: Ayuda a focalizar la atención del usuario en elementos específicos.

Indicadores de interacción en formularios: Puede hacer más evidente que un campo está activo o que un botón está listo para ser presionado.

    Buenas prácticas al usar el efecto hover en HTML y CSS3

    Si bien el efecto hover es una excelente adición a la experiencia del usuario, es importante seguir ciertas mejores prácticas para optimizar su implementación:

    Evita el abuso del hover en dispositivos móviles: En pantallas táctiles, no existe el evento hover, por lo que los estilos no se activarán. Para estos casos, es recomendable complementar la interacción con eventos de click o focus.

    Usa transiciones suaves: Agregar efectos de transición (transition) mejora la fluidez visual y hace que los cambios sean menos bruscos.

    Asegura la accesibilidad: Asegúrate de que los cambios producidos por el hover no sean la única forma de transmitir información, ya que algunos usuarios pueden no usar un mouse.

    Mantén la coherencia visual: Usa efectos de hover de manera uniforme en todo el sitio web para evitar confusión en la interfaz.

    Un ejemplo práctico que ilustra este tema

    El efecto hover en CSS3 es una técnica esencial para mejorar la interactividad y la usabilidad en sitios web. Su implementación es sencilla y puede marcar la diferencia en la experiencia del usuario cuando se usa correctamente. Con una adecuada planificación y un diseño bien estructurado, el hover puede convertir una interfaz ordinaria en una experiencia más atractiva, intuitiva y funcional.

    Os comparto, a continuación, un ejemplo de un efecto hover práctico que os puede servir para incorporar a vuestro proyecto práctico:

    Código HTML

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Hover Card Examples 1</title>
    
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        
       <div class="container">
            <div class="card__container">
                <article class="card__article">
                    <img src="images/pic1.jpg" alt="" class="card__img">
    
                    <div class="card__data">
                        <span class="card__description">flores del camino</span>
                        <h2 class="card__title">Primera fotografía</h2>
                        <a href="#" class="card__button">Leer más</a>                                            
                    </div>
                </article>
          
                <article class="card__article">
                    <img src="images/pic2.jpg" alt="" class="card__img">
    
                    <div class="card__data">
                        <span class="card__description">flores del camino</span>
                        <h2 class="card__title">Segunda fotografía</h2>
                        <a href="#" class="card__button">Leer más</a>                                        
                    </div>
                </article>
          
                <article class="card__article">
                    <img src="images/pic3.jpg" alt="" class="card__img">
    
                    <div class="card__data">
                        <span class="card__description">flores del camino</span>
                        <h2 class="card__title">Tercera fotografía</h2>
                        <a href="#" class="card__button">Leer más</a>                                        
                    </div>
                </article>
            </div>
        </div>
    
    </body>
    </html>

    Código CSS3

    :root {
        --first-color: hsl(82, 60%, 28%);
        --title-color: hsl(0, 0%, 15%);
        --text-color: hsl (0, 0%, 35%);
        --body-color: hsl (0, 0%, 95%);
        --container-color: hsl(0, 0%, 100%);
    
        --h2-font-size: 1.25rem;
        --small-font-size: 0.813rem;
    }
    
    @media screen and (min-width: 1120px ) {
        :root {
            --h2-font-size: 1.5rem;
            --small-font-size: 0.875rem;
        }
    }
    
    * {
        box-sizing: border-box;
        padding: 0;
        margin: 0;
    }
    
    body {
        background-color: var(--body-color);
        color: var(--text-color);
    }
    
    img {
        display: block;
        max-width: 100%;
        height: auto;
    }
    
    .container {
        display: grid;
        place-items: center;
        margin-inline: 1.5rem;
        padding-block: 5rem;    
    }
    
    .card__container {
        display:grid;
        row-gap: 3.5rem;     
    }
    
    .card__article {
        position: relative;
        overflow: hidden;
    }
    
    .card__img {
        width: 328px;
        border-radius: 1.5rem;
    }
    
    .card__data {
        width: 280px;
        background-color: var(--container-color);
        padding: 1.5rem 2rem;
        box-shadow: 0 8px 24px hsla(0, 0%, 0%, .15);
        border-radius: 1rem;
        position: absolute;
        bottom: -9rem;
        left: 0;
        right: 0;
        margin-inline: auto;
        opacity: 0;
        transition: opacity 1s 1s;
    }
    
    .card__description {
        display: block;
        font-size: var(--small-font-size);
        margin-bottom: .25rem;
    }
    
    .card__title {
        font-size: var(--h2-font-size);
        font-weight: 600;
        color: var(--title-color);
        margin-bottom: .75rem;
    }
    
    .card__button {
        text-decoration: none;
        font-size: var(--small-font-size);
        font-weight: 500;
        color: var(--first-color);
    }
    
    .card__button {
        text-decoration: underline;
    }
    
    .card__article:hover .card__data {
        animation: show-data 1s forwards;
        opacity: 1;
        transition: opacity .3s;
    }
    
    .card__article:hover {
        animation: remove-overflow 2s forwards;    
    }
    
    .card__article:not(:hover) {
        animation: show-overflow 2s forwards;
    }
    
    .card__article:not(:hover) .card__data {
        animation: remove-data 2s forwards;
    }
    
    @keyframes show-data {
        50% {
            transform: translateY(-10rem);        
        }
    
        100% {
            transform: translateY(-7rem);
        }
    }
    
    @keyframes remove-overflow {
        to {
            overflow: initial;
        }
    }
    
    @keyframes remove-data {
        0% {
            transform: translateY(-7rem);
        }
        50% {
            transform: translateY(-10rem);
        }
        100% {
            transform: translateY(.5rem)
        }
    }
    
    @keyframes show-overflow {
        0% {
            overflow: initial;
            pointer-events: none;
        }
        50% {
            overflow: hidden;
        }
    }
    
    @media  screen and ( max-width: 340px ) {
        .container {
            margin-inline: 1rem;
        }
    
        .card__data {
            width: 250px;
            padding: 1rem;
        }
    }
    
    @media screen and ( min-width: 768px ) {
        .card__container {
            grid-template-columns: repeat(2, 1fr);
            column-gap: 1.5rem;
        }
    }
    
    @media screen and ( min-width: 1120px ) {
        .container {
            height: 100vh;
        }
    
        .card__container {
            grid-template-columns: repeat(3, 1fr);
        }
    
        .card__img {
            width: 348px;
        }
    
        .card__data {
            width: 316px;
            padding-inline: 2.5rem;
        }
    }

    El resultado de este código es el que se muestra en la siguiente imagen:

    Con este ejemplo, prestado desde el portal de Internet: Bedimcode, termino esta entrada de mi blog y os invito a seguir este estupendo canal de programación.

    Deja una respuesta

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