Articles

Zoom de imágenes de fondo

La siguiente es una publicación invitada de Dylan Winn-Brown, que nos muestra una forma eficiente de lograr este efecto de diseño.

Mientras trabajaba en el sitio web de un cliente recientemente, me pidieron que replicara un efecto como este.

Contenedores con imágenes de fondo de zoom que dentro de su contenedor en el hover, revelando más información.

Este tipo de efecto se utiliza especialmente en situaciones de tipo cartera en las que el diseño pretende mostrar detalles visuales e informativos.

Hay muchos métodos posibles

Como nunca antes había creado un efecto como este, comencé a echar un vistazo a diferentes formas de hacer esto y me encontré con varios métodos diferentes.

Una opción era usar un complemento de jQuery. Este no era el efecto que buscaba, y ciertamente no era muy ligero.

Otra opción era colocar un <img> dentro del contenedor y manipularlo con CSS. Podría haber algunos beneficios potenciales aquí, como poder establecer el origen con srcset para que la imagen utilizada sea apropiada para el rendimiento y el dispositivo.

En mi situación, quería administrar el efecto por completo en CSS, así que fui por eso.

Funcionalidad básica

Para lograr un rendimiento óptimo, decidí usar la propiedad CSS transform para manejar la ampliación de la imagen. (Las animaciones CSS se benefician de la aceleración por hardware y, como resultado, aparecen más suaves que otros métodos de animación.)

En lugar de un <img>, utilicé un <div> adicional dentro del padre para actuar como la imagen. La estructura es:

<div class="parent"> <div class="child"></div></div>

Primero especificamos las dimensiones para el elemento padre. Luego, el hijo puede llenar el padre usando width: 100% y height: 100%;, así como establecer la imagen de fondo, asegurándose de que se escale para cubrir el área.

.parent { width: 400px; height: 300px;}.child { width: 100%; height: 100%; background-color: black; /* fallback color */ background-image: url("images/city.jpg"); background-position: center; background-size: cover;}

Luego agregamos efectos de desplazamiento a nuestro elemento padre que afectarán a nuestro elemento hijo. Un estilo de enfoque también es bueno para la accesibilidad:

.parent:hover .child,.parent:focus .child { transform: scale(1.2);}

Es posible que desee usar una herramienta para agregar prefijos para el mejor soporte posible del navegador.

Para terminar el efecto básico, podemos agregar algunas transiciones al estado normal de nuestro elemento hijo:

transition: all .5s;

Si desea agregar una superposición de color, puede hacer uso de pseudo elementos como ::before:

.child::before { content: ""; display: none; height: 100%; width: 100%; position: absolute; top: 0; left: 0; background-color: rgba(52, 73, 94, 0.75);}.parent:hover .child:before,.parent:focus .child:before { display: block;}

Ahora, cuando colocamos el cursor sobre el elemento padre, el elemento hijo debe mostrar una superposición de color.

Finalmente, veremos cómo agregar texto para mostrar en nuestra superposición. Podemos añadir un elemento a nuestro actual del niño elemento así:

<div class="parent"> <div class="child"> <span>Hello</span> </div></div>

podemos dar a nuestros <span> estilo:

span { color: white; /* Good thing we set a fallback color! */ font-family: sans-serif; padding: 25%; position: absolute;}

y podemos hacer que sea visible sólo cuando se pasa el ratón sobre la etiqueta .parent:

.parent:hover span,.parent:focus span { display: block;}

Demostración en vivo

Ver el zoom de imagen del lápiz en los sitios web de cartera flotante de Dylan (@dwinnbrown) en CodePen.

Soporte móvil

Si los contenedores son enlaces y los estados flotantes no revelan ninguna información esencial, puede dejarlo en paz.

Deja una respuesta

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