duduromeroa.com

#HTML, #CSS, #3D

Inicio > WebCode > CSS 3D

Estilos CSS con perspectiva


CSS 3D, estilos, DOM, interactividad, www.duduromeroa.com

Por Eduardo J. Romero Andrade
| Guayaquil

Contacto duduromeroa@gmail.com


#disenoWeb #CSS 3D #Perspectiva

Aclaraciones
Contenido para quienes ya comprenden y practican HTML, CSS y JS. Adjunto bibliografía al final de esta página.


En casi todos los ejercicios expongo código y comentarios. Puedes revisarlo en: (click derecho en esta página desde mouse > Inspect Element > sources ).



Efecto de profundidad mediante CSS

La sintaxis CSS define una simulación de perspectiva desde la propiedad de perspective y un valor en px que representa la distancia desde el observador hacia un fondo ficticio (valor Z). Su relación es inversa: a más valor de perspectiva, mínima transformación; a menos perspectiva, más transformación.

Los elementos que serán afectados por esas propiedades serán los elementos hijos de un padre y casi siempre se complementa con la propiedad CSS transform.

Explico los fundamentos para eso en las siguientes tres imágenes. Atención: para los valores 3D de la propiedad 'transform:propiedad3d()' (la d en minúscula) recomiendo estudiar este vínculo .

--A) El elemento padre tiene la regla CSS 'perspective: 0px;' y 'perspective-origin: 50% 50%;'. Este último centra la diagonal en el centro del elemento hijo.

Mientras que el elemento hijo contiene la regla 'transform: propiedad3d(0px, 0px, 0px...);'. Es decir, el padre define la perspectiva y el hijo el tipo de transformación 3D (junto con sus valores numéricos y ángulos) dentro de esa perspectiva:

En HTML

<div class="padre">
  <div class="hijo">DUDU</div>
</div>

Por ahora los valores se definirán en cero. Adjunto un gráfico para explicación:

En CSS


Estilo CSS para perspectiva. Imagen de duduromeroa.com. 2023
Estilo CSS para perspectiva. Imagen de duduromeroa.com. 2023

Existen cuatro valores 3d (la d en minúscula) posibles para la propiedad transform:...();. Esta sección no los repasará uno a uno pero en la web existen cientos de recursos para entenderlo a profundidad. Adjunto un vínculo para una introducción.

  • Valores de CSS transform:propiedad3D(); en valores numéricos positivos o negativos:
  • ...matrix3d:
    a1, b1, c1, d1,
    a2, b2, c2, d2,
    a3, b3, c3, d3,
    a4, b4, c4, d4;
  • ...translate3d:movX, movY, movZ;
  • ...rotate3d:rotX, rotY, rotZ, valorNumericoTipoRotacion (ver ejemplos abajo);
    • ...rotate3d:rotX, rotY, rotZ, 0deg;
    • ...rotate3d:rotX, rotY, rotZ, 0turn;
    • ...rotate3d:rotX, rotY, rotZ, 0rad;
  • ...scale3d(X, Y, Z);

--B) Se define la perspectiva en el elemento padre. Eso le indicará al navegador la distancia máxima entre el observador a partir del elemento hijo y un ficticio fondo (hacia atrás).

En CSS


Estilo CSS para perspectiva. Imagen de duduromeroa.com. 2023
Estilo CSS para perspectiva. Imagen de duduromeroa.com. 2023

--C) Ya en el elemento hijo definimos la propiedad 'transform:...();' junto con alguno de los valores 3d. En este caso, ...'translate3d();' cuyo valor Zpx moverá el elemento hijo según un valor numérico (negativo o positivo).

En CSS


Estilo CSS para perspectiva. Imagen de duduromeroa.com. 2023
Estilo CSS para perspectiva. Imagen de duduromeroa.com. 2023

ATENCIÓN: Múltiples reglas transform:...();
Si es necesario agregar más de una regla CSS transform:...();, entonces deben ser agregadas desde una sola propiedad transform. Es decir:


En CSS

/* CORRECTO (SIN SEPARACIÓN DE COMAS) */
.hijo {
transform: translate3d(10px, 0px, -100px) 
    rotate3d(1, 1, 1, 45deg) 
    skew(10deg);
}

/* INCORRECTO */
.hijo {
transform: translate3d(0px, 0px, 0px);
transform: rotate3d(0, 0, 0, 0deg);
}


El resultado de lo anterior se muestra en lo siguiente:

DUDU



Y un resultado animado con reglas de transform:..(); y perspective:...; sería:

CLICK