En este experimento exploraremos cómo utilizar múltiples capas (divs) y las potentes transformaciones 3D en CSS para emular el realismo de una puerta abriéndose. Aunque este tutorial nació originalmente en 2014, los conceptos de perspectiva y rotación en el eje Y siguen siendo fundamentales para crear interfaces interactivas modernas sin depender de JavaScript.
Aprovechando el selector :hover y las transiciones suaves, lograremos un efecto envolvente que revela contenido oculto tras nuestra "puerta virtual".
Construyendo nuestra puerta (Estructura HTML5)
Para que el efecto 3D funcione correctamente, necesitamos una jerarquía de contenedores que definan el espacio tridimensional. Utilizaremos nombres de clases descriptivos para mantener el código limpio y profesional.
<!-- Contenedor principal: define el escenario y la perspectiva -->
<section class="escenario">
<div class="marco-puerta">
<!-- El contenido que está detrás de la puerta -->
<div class="contenido-oculto">
<img src="batman-gangnam-style.gif" alt="Animación sorpresa tras la puerta" />
</div>
<!-- El objeto puerta con sus dos caras -->
<div class="puerta">
<div class="cara adelante"></div>
<div class="cara atras"></div>
</div>
</div>
</section>Es crucial que los elementoscontenido-oculto,adelanteyatrascompartan las mismas dimensiones y posición absoluta para que el solapamiento sea perfecto.
Creando el efecto 3D (CSS Modernizado)
La magia reside en la propiedad perspective. Sin ella, la rotación se vería plana (2D). Al añadir profundidad al contenedor padre, el navegador calcula la deformación visual necesaria para engañar al ojo humano.
1. Configurando el escenario
Definimos el fondo (la pared) y el punto de fuga para nuestra animación 3D:
.escenario {
background: url('wall.jpg') repeat;
perspective: 1000px; /* Mayor valor = perspectiva más suave */
display: flex;
justify-content: center;
align-items: center;
min-height: 400px;
}2. Animando la puerta
Usamos transform-style: preserve-3d para que los hijos de la puerta también existan en el espacio 3D, y transform-origin para que la puerta gire sobre su bisagra izquierda y no sobre su centro.
.puerta {
position: relative;
width: 200px;
height: 300px;
transform-style: preserve-3d;
transition: transform 1.2s cubic-bezier(0.4, 0, 0.2, 1);
transform-origin: left; /* La bisagra de la puerta */
cursor: pointer;
}
.marco-puerta:hover .puerta {
transform: rotateY(-130deg); /* Apertura hacia adentro */
}3. Gestionando las caras de la puerta
La propiedad backface-visibility: hidden es vital: evita que veamos la "espalda" de la cara delantera cuando la puerta gira, permitiendo que la cara trasera sea visible en su lugar.
.cara {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
background-size: cover;
}
.adelante {
background-image: url('door-front.jpg');
z-index: 2;
}
.atras {
background-image: url('door-back.jpg');
transform: rotateY(180deg); /* Gira la cara trasera para que mire al revés */
}¿Por qué usar este efecto en diseño web moderno?
Más allá de ser un experimento visual, este tipo de técnicas de CSS interactivo mejoran el engagement del usuario. Algunas aplicaciones prácticas incluyen:
- Gamificación: Revelar recompensas o "easter eggs" en landing pages.
- Tarjetas de Producto: Mostrar especificaciones técnicas al hacer hover sobre una imagen.
- Portafolios: Una forma creativa de presentar proyectos antiguos frente a los nuevos.
Consideraciones de Accesibilidad (A11y)
Aunque el efecto se dispara con :hover, es buena práctica permitir que usuarios que navegan con teclado también puedan activarlo. Podrías añadir un pequeño script para activar una clase .is-open mediante el evento focus en un botón envolvente.