Efecto Hover 3D de capas solo con CSS

Efecto Hover 3D de capas solo con CSS

6 de abril 2020

En esta entrada vamos a ver cómo crear un efecto hover en 3D con capas utilizando solo HTML y CSS. Para ello vamos a simular que al pasar el ratón por encima descomponemos el diseño de una página web en diferentes profundidades, separando las capas que lo componen y rotándolas unos grados.

Lo primero que vamos a hacer es crear un div que contendrá las imágenes y al que aplicaremos una clase llamada, en un alarde de originalidad, capas. En su interior ubicaremos todas las imágenes que formarán el efecto hover. A cada una le aplicaremos una clase diferente para poder identificarlas individualmente y aplicarles los estilos correspondientes.

<div class="capas">
  <img src="https://www.tualojamiento.com/images/web-capa-0.png" class="capa0">
  <img src="https://www.tualojamiento.com/images/web-capa-1.png" class="capa1">
  <img src="https://www.tualojamiento.com/images/web-capa-2.png" class="capa2">
  <img src="https://www.tualojamiento.com/images/web-capa-3.png" class="capa3">
  <img src="https://www.tualojamiento.com/images/web-capa-4.png" class="capa4">
  <img src="https://www.tualojamiento.com/images/web-capa-5.png" class="capa5">
</div>

Después pasaremos a definir los estilos de la composición. Primero asignaremos al div contenedor un position: relative, su ancho máximo con max-width: 650px y margin: auto para centrar la capa. En segundo lugar le diremos a todas las imágenes de su interior que tengan position: absolute para que todas ellas se superpongan en profundidad unas encima de otras y se adapten a la capa contenedora con max-width: 100%. Es en este punto donde activaremos las animaciones con transition: all ease 1250ms, que a continuación definiremos de manera individual en cada imagen.

Como nos interesa que las animaciones se reproduzcan al pasar el ratón, usaremos la pseudo-clase :hover sobre el div contenedor y aplicaremos las propiedades una a una a cada capa de imagen. Usaremos transform para poder especificar que modificaremos las perspectiva, rotación y traslación de cada elemento para ajustarlo a nuestra necesidades.

Este sería todo el CSS comentado anteriormente, puedes copiarlo para hacer tus propios experimentos, verás que cambiando los parámetros de transformación puedes hacer diversos tipos de animaciones.

.capas {
  position: relative;
  max-width: 650px;
  margin: auto;
}
.capas img {
  position: absolute;
  max-width: 100%;
  transition: all ease 1250ms;
}
.capas:hover .capa0 {
  transform: perspective(2000px) rotateX(0deg) rotateY(30deg) rotateZ(0deg) translateX(-30px) translateY(0px) translateZ(0px);
}
.capas:hover .capa1 {
  transform: perspective(2000px) rotateX(0deg) rotateY(30deg) rotateZ(0deg) translateX(-30px) translateY(0px) translateZ(40px);
  opacity: .6;
}
.capas:hover .capa2 {
  transform: perspective(2000px) rotateX(0deg) rotateY(30deg) rotateZ(0deg) translateX(-30px) translateY(0px) translateZ(80px);
}
.capas:hover .capa3 {
  transform: perspective(2000px) rotateX(0deg) rotateY(30deg) rotateZ(0deg) translateX(-30px) translateY(0px) translateZ(120px);
}
.capas:hover .capa4 {
  transform: perspective(2000px) rotateX(0deg) rotateY(30deg) rotateZ(0deg) translateX(-30px) translateY(0px) translateZ(160px);
}
.capas:hover .capa5 {
  transform: perspective(2000px) rotateX(0deg) rotateY(30deg) rotateZ(0deg) translateX(-30px) translateY(0px) translateZ(200px);
}

Este es el resultado final en acción con el que puedes interactuar incluso hacer cambios en tiempo real si pulsas las pestañas HTML o CSS.

See the Pen
Efecto Hover 3D de capas con CSS
by Jesús Tovar (@jesustovar)
on CodePen.


Si estáis acostumbrados a utilizar Sass en vuestros proyectos, aquí tenéis una versión del código para este preprocesador.


// Mixin
=transform($transZ)
  transform: perspective(2000px) rotateX(0deg) rotateY(30deg) rotateZ(0deg) translateX(-30px) translateY(0px) translateZ($transZ)

// Estilos
body
  background-color: #cccccc

  h1
    text-align: center

  .capas 
    position: relative
    max-width: 650px
    margin: 0 auto
    img 
      position: absolute
      max-width: 100%
      transition: all ease 1250ms
      transform-style: preserve-3d
    &:hover 
      img.capa0
        +transform(0px)
      img.capa1 
        +transform(40px)
        opacity: .6
      img.capa2 
        +transform(80px)
      img.capa3 
        +transform(120px)
      img.capa4 
        +transform(160px)
      img.capa5 
        +transform(200px)

Publicado por Jesús Tovar

Categorías: CSS, Diseño, HTML

Etiquetas: , , , ,

Deja una respuesta

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

Este sitio web utiliza cookies, si continúas navegando estás dando tu consentimiento. Consulta nuestra política de cookies y de privacidad.

ACEPTAR
Aviso de cookies