La transform
propiedad le permite manipular visualmente un elemento inclinándolo, rotando, traduciendo o escalando:
.element ( width: 20px; height: 20px; transform: scale(20); )
Incluso con una altura y un ancho declarados, este elemento ahora se escalará a veinte veces su tamaño original:
Vea la explicación de Pen Transform por CSS-Tricks (@ css-tricks) en CodePen.
Dar a esta función dos valores la estirará horizontalmente el primero y verticalmente el segundo. En el siguiente ejemplo, el elemento ahora tendrá el doble de ancho pero la mitad de alto que el elemento original:
.element ( transform: scale(2, .5); )
O puede ser más específico sin usar la función de taquigrafía:
transform: scaleX(2); transform: scaleY(.5);
Pero scale()
es solo una de las muchas funciones de transformación que están disponibles:
Valores
scale()
: Afecta el tamaño del elemento. Esto también se aplica a lafont-size
,padding
,height
, ywidth
de un elemento, también. También es una función abreviada para las funcionesscaleX
yscaleY
.skewX()
yskewY()
: inclina un elemento hacia la izquierda o hacia la derecha, como convertir un rectángulo en un paralelogramo.skew()
es una taquigrafía que combinaskewX()
yskewY
acepta ambos valores.translate()
: Mueve un elemento hacia los lados o hacia arriba y hacia abajo.rotate()
: Gira el elemento en sentido horario desde su posición actual.matrix()
: Una función que probablemente no esté pensada para escribirse a mano, pero que combina todas las transformaciones en una.perspective()
: No afecta al elemento en sí, pero afecta las transformaciones de las transformaciones 3D de los elementos descendientes, lo que les permite a todos tener una perspectiva de profundidad consistente.
Sesgar
/* Skew points along the x-axis */ .element ( transform: skewX(25deg); ) /* Skew point along the y-axis */ .element ( transform: skewY(25deg); ) /* Skew points along the x- and y-axis */ .element ( transform: skew(25deg, 25deg); )
Las funciones de transformación skewX
y skewY
inclinan un elemento de una forma u otra. Recuerde: no existe una propiedad abreviada para sesgar un elemento, por lo que deberá usar ambas funciones. En el siguiente ejemplo, podemos sesgar un cuadrado de 100 px x 100 px hacia la izquierda y hacia la derecha con skewX
:
Vea la explicación de Pen Transform por CSS-Tricks (@ css-tricks) en CodePen.
Mientras que en este ejemplo podemos sesgar un elemento verticalmente con skewY
:
Vea la explicación de Pen Transform por CSS-Tricks (@ css-tricks) en CodePen.
Ahora usemos skew()
para combinar los dos:
Consulte la
propiedad abreviada Pen skew () de CSS-Tricks (@ css-tricks)
en CodePen.
Girar
.element ( transform: rotate(25deg); )
Esto hace girar un elemento en el sentido de las agujas del reloj desde su posición original, mientras que un valor negativo lo haría girar en la dirección opuesta. Aquí hay un ejemplo animado simple donde un cuadrado continúa girando 360 grados cada tres segundos:
Vea la explicación de Pen Transform por CSS-Tricks (@ css-tricks) en CodePen.
También podemos utilizar los rotateX
, rotateY
y rotateZ
funciones, así:
Vea la explicación de Pen Transform por CSS-Tricks (@ css-tricks) en CodePen.
Traducir
.element ( transform: translate(20px, 10px); )
Esta función de transformación mueve un elemento hacia los lados o hacia arriba y hacia abajo. ¿Por qué no usar arriba / izquierda / abajo / derecha? Bueno, a veces es un poco confuso. Pensaría en ellos como diseño / posicionamiento (de todos modos, tienen un mejor soporte de navegador) y esto como una forma de mover esas cosas como parte de una transición o animación.
Estos valores serían cualquier valor de longitud, como 10px o 2.4em. Un valor moverá el elemento a la derecha (valores negativos a la izquierda). Si se proporciona un segundo valor, ese segundo valor lo moverá hacia abajo (valores negativos hacia arriba). O puede ser específico:
transform: translateX(value); transform: translateY(value);
Es importante tener en cuenta que el uso de un elemento transform
no hará que otros elementos fluyan a su alrededor. Al usar la translate
función a continuación y empujar el cuadrado verde fuera de su posición original, notaremos cómo el texto circundante permanecerá fijo en su lugar, como si el cuadrado fuera un elemento de bloque:
Vea la explicación de Pen Transform por CSS-Tricks (@ css-tricks) en CodePen.
También vale la pena señalar que translate
se acelerará por hardware si desea animar esa propiedad, a diferencia de position: absolute
.
Varios valores
Con una lista separada por espacios, puede agregar varios valores a la transform
propiedad:
.element ( width: 20px; height: 20px; transform: scale(20) skew(-20deg); )
Vale la pena señalar que hay un orden en el que se llevarán a cabo estas transformaciones, en el ejemplo anterior, se realizará "sesgo" primero y luego se escalará el elemento.
Matriz
La matrix
función de transformación se puede utilizar para combinar todas las transformaciones en una. Es un poco como transformar la taquigrafía, solo que no creo que realmente esté destinado a escribirse a mano. Existen herramientas como The Matrix Resolutions, que pueden convertir un grupo de transformaciones en una única declaración de matriz. Quizás, en algunas situaciones, esto pueda reducir el tamaño del archivo, aunque las microoptimizaciones hostiles al autor como esa probablemente no valgan la pena.
Para los curiosos, esto:
rotate(45deg) translate(24px, 25px)
también se puede representar como:
matrix(0.7071067811865475, 0.7071067811865476, -0.7071067811865476, 0.7071067811865475, -0.7071067811865497, 34.648232278140824)
Transformaciones 3D
La mayoría de las propiedades anteriores tienen versiones 3D de ellas.
translate3d(x, y, z) translateZ(z)
El tercer valor en translate3d
o el valor en translateZ
mueve el elemento hacia el espectador, los valores negativos lo alejan.
scale3d(sx, sy, sz) scaleZ(sz)
El tercer valor en scale3d
o el valor en scaleZ
afecta la escala a lo largo del eje z (por ejemplo, la línea imaginaria que sale directamente de la pantalla).
rotateX(value) rotateY(value) rotate3d(x, y, z)
rotateX
y rotateY
rotará un elemento en el espacio 3D alrededor de esos ejes. rotate3d
le permite especificar un punto en el espacio 3D en el que rotar el elemento.
matrix3d(… )
Una forma de describir mediante programación una transformación 3D en una cuadrícula de 4 × 4. Nadie escribirá a mano uno de estos, nunca.
perspective(value)
Este valor no afecta al elemento en sí, pero afecta las transformaciones de las transformaciones 3D de los elementos descendientes, lo que les permite tener una perspectiva de profundidad consistente.
Más información
- MDN Docs sobre transformación y uso.
- Documentación de David DeSandro sobre transformaciones 3D
- Surfin 'Safari: transformaciones 3D
- Especificaciones de W3C sobre transformaciones CSS3
- Introducción a las transformaciones CSS 3D
Soporte del navegador
Transformaciones 2D
Cromo | Safari | Firefox | Ópera | ES DECIR | Androide | iOS |
---|---|---|---|---|---|---|
Alguna | 3.1+ | 3.5+ | 10,5+ | 9+ | 4.1+ | Al menos 4 |
Transformaciones 3D
Cromo | Safari | Firefox | Ópera | ES DECIR | Androide | iOS |
---|---|---|---|---|---|---|
10+ | 4+ | 12+ | ninguno | 10+ | 4.1+ | 5+ |
Prefijos de proveedores
.element ( -webkit-transform: value; -moz-transform: value; -ms-transform: value; -o-transform: value; transform: value; )