02 Capítulo 2 · Lección 13

TranslateZ y Scale3D

Redactado por
Author Sebastian V.
Fecha de publicación

17/07/2024

Tiempo de lectura

7 min

Tema

CSS Transform

La ilusión de la profundidad

Hay una razón por la que los juegos de video, el cine y la realidad virtual son tan inmersivos: tienen profundidad. Los elementos más cercanos son más grandes y más nítidos. Los elementos lejanos son más pequeños y difusos. Nuestro cerebro interpreta esas diferencias de escala y posición como distancia real en el espacio.

CSS puede replicar esa ilusión de profundidad para crear interfaces con capas que se sienten tridimensionales. Las herramientas para lograrlo son translateZ() y scale3d().

translateZ: acercar y alejar elementos

Si translateX mueve en horizontal y translateY en vertical, translateZ mueve un elemento a lo largo del eje de profundidad: hacia ti o hacia el fondo.

  • translateZ(100px): Acerca el elemento hacia el espectador. Si hay una perspective activa, se verá más grande.
  • translateZ(-100px): Aleja el elemento. Se verá más pequeño y distante.

Un truco muy popular para crear botones que "salen" en 3D es combinar translateZ con perspective para que el elemento parezca flotar hacia el usuario al hacer hover, mucho más convincente que un simple translateY plano.

scale3d(): escalado tridimensional

La función scale3d(x, y, z) es la versión tridimensional de scale(). Los primeros dos valores (x, y) controlan el escalado en los ejes que ya conoces. El tercer valor (z) escala el elemento a lo largo del eje de profundidad.

En la práctica, escalar en Z es menos común porque no tiene un efecto visual directo en un elemento 2D plano. Pero cuando tienes objetos 3D con volumen real (como el cubo de la lección anterior), scale3d sí tiene un impacto visible en sus proporciones volumétricas.

Paralaje de capas: el efecto de profundidad más popular

Una aplicación fascinante de translateZ es crear escenas con múltiples capas a diferentes profundidades. Cuando el usuario mueve el ratón, cada capa se mueve a velocidades diferentes (las más cercanas se mueven más rápido, las lejanas más lento), creando una ilusión de paralaje tridimensional que se ve absolutamente premium.

Consejo profesional

translateZ() y scale() producen efectos similares en apariencia (ambos hacen que el elemento parezca más grande o pequeño), pero son fundamentalmente diferentes: translateZ mueve el elemento en el espacio 3D de verdad, lo que significa que interactúa correctamente con la perspectiva y con otros elementos 3D. scale() es solo una escala visual plana.

Profundidad con múltiples capas

> _
<div class="escena-profundidad">
  <div class="capas">
    <div class="capa capa-3">Fondo</div>
    <div class="capa capa-2">Medio</div>
    <div class="capa capa-1">Primer plano</div>
  </div>
</div>
> _
Fondo
Medio
Primer plano

Tres capas a distintas profundidades (translateZ) con la escena inclinada para apreciar la profundidad. Pasa el ratón para ver cómo cambia la perspectiva.

Errores comunes

01
Usar translateZ sin perspective en el padre translateZ sin perspectiva no produce ningún cambio visual. La perspectiva es lo que convierte el movimiento en el eje Z en un efecto de acercamiento/alejamiento visible.
02
Confundir scale() con translateZ() scale(1.2) hace que el elemento se vea 20% más grande sin cambiar su posición real. translateZ(60px) lo acerca 60px en el espacio 3D, lo que con perspectiva activa también lo hace parecer más grande pero de forma física diferente.

Paralaje de capas

Construye una escena con al menos tres divs a distintas profundidades (translateZ). Detecta el movimiento del ratón con JavaScript y ajusta la rotación del contenedor para crear un efecto de paralaje interactivo.

01 Crea una escena 3D con perspective y preserve-3d
02 Añade tres divs hermanos con distintos translateZ (100px, 0px, -100px)
03 Inclina la escena con rotateX(15deg) para ver la profundidad
04 Experimenta con scale3d(1.2, 1.2, 1.2) para ver el escalado tridimensional