Durante los temas anteriores hemos visto diferentes funciones de transformaci贸n en el 谩mbito del 2D. Sin embargo, CSS tambi茅n incorpora varias funciones de transformaci贸n 3D, que de la misma forma se pueden utilizar con la propiedad transform.
Transformaciones 3D
Estas funciones, en la mayor铆a de los casos, no son m谩s que la incorporaci贸n del eje Z a las anteriores que ya hab铆amos visto, adem谩s de la adici贸n de una funci贸n de atajo 3D para poder utilizarlas todas de una sola vez.
Antes de comenzar a verlas, recordar siempre que el eje X es el eje horizontal, el eje Y es el eje vertical y el eje Z es el eje de profundidad. Varios conceptos que se deben tener claros antes de comenzar con el 3D en CSS:

Para utilizar transformaciones 3D es necesario conocer algunas propiedades derivadas de transformaciones, como por ejemplo, las siguientes:
| Propiedades | Formato | Significado |
|---|---|---|
transform-style |
flat | preserve-3d | Modifica el tratamiento 3D de los elementos hijos. |
transform-origin |
Cambia el punto de origen del elemento en una transformaci贸n. |
Por defecto, la propiedad transform-style est谩 establecida a flat, o lo que es lo mismo, trata los elementos como elementos 2D, por lo que no podemos usar 3D, salvo que lo indiquemos expresamente con el valor preserve-3d. De esta forma, todos los elementos hijos del elemento que tenga esa propiedad, se tratar谩n como elementos 3D:
<div class="container">
<div class="element"></div>
<div class="element"></div>
</div>
<style>
.container {
transform-style: preserve-3d;
transform: rotateX(2deg) rotateY(2deg) rotateZ(2deg);
perspective: 300px;
}
</style>
Observa que en este ejemplo, estamos aplicando al padre .container una propiedad transform-style: preserve-3d para dotar de 3D a los elementos hijos .element. Adem谩s, tambi茅n le aplicamos una rotaci贸n en todos los ejes (para que se aprecie mejor el 3D) y una perspective (lo veremos y explicaremos en el pr贸ximo tema).
En el caso de la propiedad transform-origin, que ya explicamos en el primer tema de transformaciones, observa que simplemente hemos a帽adido un tercer par谩metro para aplicar un punto de origen tambi茅n en el eje Z. Recuerda que en el caso del eje Z, no se pueden utilizar porcentajes, sino s贸lo cantidades, como tama帽os en p铆xels.
Funciones de translaci贸n 3D
Las funciones de transformaci贸n que completar铆an la colecci贸n de transformaciones 2D que vimos anteriormente son las siguientes:
| Funciones | Significado |
|---|---|
translateZ(z) |
Traslada el elemento una distancia de |
translate3d(x, y, z) |
Funci贸n de atajo 3D, donde podemos aplicar un |
Con la propiedad translateZ() podemos hacer translaciones de profundidad y con la propiedad translate3D() podemos utilizar un atajo con el que aplicar translaciones en los 3 ejes: x, y y z:
<div class="container">
<div class="element"></div>
</div>
<style>
.container {
width: 50px;
height: 50px;
transform-style: preserve-3d;
transform: rotateX(2deg) rotateY(2deg) rotateZ(2deg);
perspective: 300px;
}
.element {
width: 100%;
height: 100%;
background: red;
transform: translateX(40px); /* S贸lo eje X */
transform: translateY(25px); /* Solo eje Y */
transform: translateZ(55px); /* Solo eje Z */
transform: translate3d(40px, 25px, 55px); /* Equivale a los tres anteriores */
}
</style>
Tanto en translateX() como en translateY() se pueden utilizar valores de 100% es el tama帽o exacto correspondiente al eje del elemento.
Por ejemplo: translateX(100%) desplazar铆a el elemento en horizontal exactamente su tama帽o de ancho, mientras que translateY(200%) desplazar铆a el elemento el doble de su tama帽o de alto en vertical.
Ojo: Ten en cuenta que, al contrario que en x e y, el valor z de translate3d() y translateZ() no puede ser un valor de porcentaje
Funciones de rotaci贸n 3D
De la misma forma que hemos visto las funciones de translaci贸n 3D, tenemos las funciones de rotaci贸n 3D. Observa que en este caso, rotateZ() es una funci贸n que permite indicar la rotaci贸n sobre su propio eje, algo que pod铆amos hacer ya en el 谩mbito 2D.
Sin embargo, se a帽ade la propiedad rotate3d(), que nos permite indicar la cantidad de grados que queremos realizar en cada eje, de una forma muy flexible:
| Funciones | Significado |
|---|---|
rotateZ(zdeg) |
Aplica rotaci贸n 2D en |
rotate3d(x, y, z, deg) |
Funci贸n de atajo, que permite aplicar una rotaci贸n a uno o varios ejes. |
La funci贸n rotate3D() permite indicar un valor 0 o 1 para activar el eje correspondiente, seguido de un n煤mero de grados
.element {
transform: rotate3d(1, 0, 0, 50deg); /* Equivale a rotateX(50deg) */
transform: rotate3d(0, 1, 0, 25deg); /* Equivale a rotateY(25deg) */
transform: rotate3d(0, 0, 1, 5deg); /* Equivale a rotateZ(5deg) */
transform: rotate3d(1, 1, 0, 100deg); /* Equivale a rotateX(100deg) rotateY(100deg) */
}
Funciones de escalado 3D
De la misma forma que las anteriores que hemos visto, las funciones de escalado tambi茅n tienen su versi贸n 3D. Las funciones que a帽adimos a la lista son las siguientes:
| Funciones | Significado |
|---|---|
scaleZ(fz) |
Reescala el elemento a un nuevo tama帽o con factor |
scale3d(fx, fy, fz) |
Establece un escalado 3D, donde aplica los factores a cada eje. |
Al igual que en funciones anteriores, las equivalencias son las siguientes:
.element {
transform: scaleZ(2); /* Reescala al doble de su tama帽o el eje Z */
transform: scale3d(1, 0.5, 2); /* Equivale a scaleX(1) scaleY(0.5) scaleZ(2) */
}
Para que el escalado de Z sea evidente, quiz谩s ser铆a conveniente mirar primero el tema de perspectivas.
Otras funciones
Existen algunas otras funciones de transformaci贸n menos utilizadas, como puede ser la creaci贸n de perspectivas o el uso de matrices de tranformaci贸n, mucho m谩s potentes, pero tambi茅n mucho m谩s complejas:
| Funciones | Significado |
|---|---|
perspective(n) |
Ver tema de perspectivas |
matrix(n, n, ...) |
Establece una matriz de transformaci贸n 2D (6 valores) |
matrix3d(n, n, ...) |
Establece una matriz de transformaci贸n 3D (16 valores) |
Veamos un ejemplo con matrix() y otro con matrix3d():
.element {
width: 150px;
height: 150px;
background: red;
transform: matrix(1, 1, -1, 1, 75, 75);
}
En este caso, la funci贸n matrix(a, b, c, d, tx, ty) (6 par谩metros) actua de la siguiente forma:
aequivale ascaleX()bequivale askewY()cequivale askewX()dequivale ascaleY()txequivale atranslateX()tyequivale atranslateY()
Por otro lado, si utilizamos matrix3d() (16 par谩metros), tenemos una funci贸n de transformaci贸n mucho m谩s compleja. Veamos un ejemplo de aplicaci贸n:
.element {
width: 150px;
height: 150px;
background: red;
transform: matrix3d(1, 0, 1, 0, 0, 1, 0.5, 0, 0, 0, 1, 0, 50, 50, 0, 1);
}
Tienes m谩s informaci贸n sobre estas funciones de matrices en el art铆culo Understanding the CSS Transforms Matrix de los desarrolladores del navegador Opera.
No hay comentarios.:
Publicar un comentario
Nota: s贸lo los miembros de este blog pueden publicar comentarios.