A transform
propriedade permite que você manipule visualmente um elemento inclinando, girando, transladando ou dimensionando:
.element ( width: 20px; height: 20px; transform: scale(20); )
Mesmo com uma altura e largura declaradas, este elemento agora será dimensionado para vinte vezes seu tamanho original:
Veja a explicação da transformação da caneta por CSS-Tricks (@ css-tricks) no CodePen.
Dar a esta função dois valores irá esticá-la horizontalmente pelo primeiro e verticalmente pelo segundo. No exemplo abaixo, o elemento agora terá o dobro da largura, mas metade da altura do elemento original:
.element ( transform: scale(2, .5); )
Ou você pode ser mais específico sem usar a função abreviada:
transform: scaleX(2); transform: scaleY(.5);
Mas scale()
é apenas uma das muitas funções de transformação disponíveis:
Valores
scale()
: Afeta o tamanho do elemento. Isto também se aplica aofont-size
,padding
,height
, ewidth
de um elemento, também. Também é uma função abreviada para as funçõesscaleX
escaleY
.skewX()
eskewY()
: Inclina um elemento para a esquerda ou direita, como transformar um retângulo em um paralelogramo.skew()
é uma abreviatura que combinaskewX()
eskewY
aceita ambos os valores.translate()
: Move um elemento para os lados ou para cima e para baixo.rotate()
: Gira o elemento no sentido horário a partir de sua posição atual.matrix()
: Uma função que provavelmente não se destina a ser escrita à mão, mas combina todas as transformações em uma.perspective()
: Não afeta o elemento em si, mas afeta as transformações 3D dos elementos descendentes, permitindo que todos tenham uma perspectiva de profundidade consistente.
Enviesamento
/* 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); )
As funções de transformação skewX
e skewY
inclinam um elemento de uma forma ou de outra. Lembre-se: não há propriedade abreviada para distorcer um elemento, então você precisará usar ambas as funções. No exemplo abaixo, podemos inclinar um quadrado de 100 px x 100 px para a esquerda e para a direita com skewX
:
Veja a explicação da transformação da caneta por CSS-Tricks (@ css-tricks) no CodePen.
Enquanto neste exemplo podemos inclinar um elemento verticalmente com skewY
:
Veja a explicação da transformação da caneta por CSS-Tricks (@ css-tricks) no CodePen.
Agora vamos usar skew()
para combinar os dois:
Veja a
propriedade abreviada Pen skew () por CSS-Tricks (@ css-tricks)
em CodePen.
Girar
.element ( transform: rotate(25deg); )
Isso gira um elemento no sentido horário de sua posição original, enquanto um valor negativo o faria girar na direção oposta. Aqui está um exemplo animado simples em que um quadrado continua girando 360 graus a cada três segundos:
Veja a explicação da transformação da caneta por CSS-Tricks (@ css-tricks) no CodePen.
Podemos também usar as rotateX
, rotateY
e rotateZ
funções, assim:
Veja a explicação da transformação da caneta por CSS-Tricks (@ css-tricks) no CodePen.
Traduzir
.element ( transform: translate(20px, 10px); )
Essa função de transformação move um elemento para os lados ou para cima e para baixo. Por que não usar apenas superior / esquerda / inferior / direita? Bem, às vezes é um pouco confuso. Eu pensaria nisso como layout / posicionamento (eles têm melhor suporte ao navegador de qualquer maneira) e isso como uma maneira de mover essas coisas como parte de uma transição ou animação.
Esses valores seriam qualquer valor de comprimento, como 10px ou 2,4em. Um valor moverá o elemento para a direita (valores negativos para a esquerda). Se um segundo valor for fornecido, esse segundo valor o moverá para baixo (valores negativos para cima). Ou você pode ser específico:
transform: translateX(value); transform: translateY(value);
É importante observar que um elemento usando transform
não fará com que outros elementos fluam em torno dele. Usando a translate
função abaixo e empurrando o quadrado verde para fora de sua posição original, notaremos como o texto ao redor permanecerá fixo no lugar, como se o quadrado fosse um elemento de bloco:
Veja a explicação da transformação da caneta por CSS-Tricks (@ css-tricks) no CodePen.
Também é importante notar que translate
será acelerado por hardware se você quiser animar essa propriedade, ao contrário position: absolute
.
Valores múltiplos
Com uma lista separada por espaços, você pode adicionar vários valores à transform
propriedade:
.element ( width: 20px; height: 20px; transform: scale(20) skew(-20deg); )
É importante notar que existe uma ordem em que essas transformações serão realizadas, no exemplo acima o `skew` será executado primeiro e depois o elemento será escalado.
Matriz
A matrix
função de transformação pode ser usada para combinar todas as transformações em uma. É um pouco como uma abreviação de transformação, só que não acredito que seja realmente feito para ser escrito à mão. Existem ferramentas como The Matrix Resolutions, que podem converter um grupo de transformações em uma única declaração de matriz. Talvez em algumas situações isso possa reduzir o tamanho do arquivo, embora micro otimizações hostis ao autor como essa provavelmente não valham seu tempo.
Para os curiosos, este:
rotate(45deg) translate(24px, 25px)
também pode ser representado como:
matrix(0.7071067811865475, 0.7071067811865476, -0.7071067811865476, 0.7071067811865475, -0.7071067811865497, 34.648232278140824)
Transformações 3D
A maioria das propriedades acima tem versões 3D deles.
translate3d(x, y, z) translateZ(z)
O terceiro valor em translate3d
ou o valor em translateZ
move o elemento em direção ao visualizador, afastando os valores negativos.
scale3d(sx, sy, sz) scaleZ(sz)
O terceiro valor em scale3d
ou o valor em scaleZ
afeta a escala ao longo do eixo z (por exemplo, a linha imaginária que sai diretamente da tela).
rotateX(value) rotateY(value) rotate3d(x, y, z)
rotateX
e rotateY
irá girar um elemento no espaço 3D em torno desses eixos. rotate3d
permite que você especifique um ponto no espaço 3D no qual girar o elemento.
matrix3d(… )
Uma maneira de descrever programaticamente uma transformação 3D em uma grade 4 × 4. Ninguém jamais escreverá uma dessas à mão.
perspective(value)
Este valor não afeta o elemento em si, mas afeta as transformações 3D dos elementos descendentes, permitindo que todos tenham uma perspectiva de profundidade consistente.
Mais Informações
- Documentos MDN sobre transformação e uso.
- Documentação de David DeSandro sobre transformações 3D
- Surfin 'Safari: transformações 3D
- Especificação W3C em transformações CSS3
- Introdução às transformações CSS 3D
Suporte para navegador
Transformações 2D
cromada | Safári | Raposa de fogo | Ópera | IE | Android | iOS |
---|---|---|---|---|---|---|
Nenhum | 3.1+ | 3,5+ | 10,5+ | 9+ | 4.1+ | Pelo menos 4 |
Transformações 3D
cromada | Safári | Raposa de fogo | Ópera | IE | Android | iOS |
---|---|---|---|---|---|---|
10+ | 4+ | 12+ | Nenhum | 10+ | 4.1+ | 5+ |
Prefixos de fornecedores
.element ( -webkit-transform: value; -moz-transform: value; -ms-transform: value; -o-transform: value; transform: value; )