Desenvolvimento - CSS

Transformações 2D com as CSS3 - Propriedade Transform

Veja neste artigo como utilizar a propriedade transform das CSS3 para aplicar transformações em duas dimensões a objetos da página, obtendo resultados que antes só eram possíveis com o uso direto de imagens.

por Joel Rodrigues



Um recurso bastante interessante adicionado às CSS na versão 3, a propriedade “transform”, permite ao desenvolvedor front-end aplicar alguns efeitos visuais em elementos que antes só poderiam ser obtidos através do uso de imagens.

Imagine, por exemplo, o que poderia ser feito para rotacionar um retângulo (uma div, por exemplo), incluindo seu conteúdo. Seria necessário criar uma imagem, aplicar a rotação desejada e inseri-la como uma tag img ou como background da div, certo?

Com a propriedade transform, isso ficou bem mais simples e, para completar a boa notícia, todos os principais browsers da atualidade suportam este recurso (cada um utilizando seus prefixos). Os prefixos são os seguintes:

  • Internet Explorer 9: -ms-
  • Firefox: -moz-
  • Safari e Chrome: -webkit-
  • Opera: -o-

Diferentemente de outras propriedades simples, como a largura e a altura, a propriedade transform recebe como valor um ou vários métodos, os quais aplicam o efeito visual na prática. A seguir veremos a explicação de cada método, juntamente com um exemplo prático de utilização, facilitando a visualização do resultado. Porém, para todos os métodos, a estrutura HTML utilizada será a mesma (exibida na Listagem 1).

Listagem 1: Estrutura HTML utilizada nos exemplos

<html>
<head>
</head>
<body>
	<div id="div1">
		Conteudo da div.
	</div>
</body>
</html>

Neste artigo, veremos apenas os efeitos visuais em duas dimensões, porém existem métodos também para aplicar transformações 3D.

translate()

O método translate permite deslocar um elemento de sua posição atual até certa quantidade de unidades definidas para os eixos X e Y. Este método possui trÊs variantes:

  • translate(x, y): move o elemento nas duas dimensões.
  • translateX(x): move o elemento horizontalmente.
  • translateY(y): move o elemento verticalmente.

Como se pode imaginar, o translate funciona como a junção do translateX e translateY, então iremos utilizar apenas o primeiro no exemplo a seguir.

Listagem 2: Exemplo de uso do translate

div{
	width:100px;
	height:100px;
	background-color:green;
	transform: translate(50px,100px);
	-ms-transform: translate(50px,100px); /* IE 9 */
	-webkit-transform: translate(50px,100px); /* Safari e Chrome */
	-o-transform: translate(50px,100px); /* Opera */
	-moz-transform: translate(50px,100px); /* Firefox */
}

A aparência inicial, bem como o resultado dessa folha de estilos são exibidos na Figura 1.

Resultado da aplicação do translate

Figura 1: Resultado da aplicação do translate

Podemos notar que a div foi movida 50px para a direita e 100px para baixo.

rotate()

O método rotate, como se pode imaginar, permite rotacionar um objeto, de um ângulo informado como parâmetro. No exemplo a seguir, a div é rotacionada de 30 graus.

Listagem 3: Exemplo de uso do rotate

div{
	width:100px;
	height:100px;
	background-color:green;
transform: rotate(30deg);
-ms-transform: rotate(30deg); /* IE 9 */
-webkit-transform: rotate(30deg); /* Safari e Chrome */
-o-transform: rotate(30deg); /* Opera */
-moz-transform: rotate(30deg); /* Firefox */
}

Novamente o estado anterior e o resultado é exibido abaixo.

Resultado da aplicação do translate

Figura 2: Resultado da aplicação do translate

Caso desejássemos que a rotação se desse no sentido anti-horário, o valor do parâmetro deveria ser negativo.

scale()

O scale, por sua vez, altera a escala do elemento, ou seja, aumenta ou diminui suas dimensões. Para aumentar as dimensões (nos eixos X, Y ou ambos) deve-se informar valores positivos, já para reduzir as dimensões, os valores devem ser negativos.

Este método possui também três variantes, que são:

  • scale(x, y): redimensiona o objeto nas duas dimensões.
  • scaleX(x): redimensiona o objeto horizontalmente.
  • scaleY(y): redimensiona o objeto verticalmente.

Novamente, utilizaremos apenas o método composto (scale) para exemplificar esta funcionalidade.

Listagem 4: Exemplo de uso do scale

div{ width:100px; height:100px; background-color:green; transform: scale(2,2); -ms-transform: scale(2,2); /* IE 9 */ -webkit-transform: scale(2,2); /* Safari e Chrome */ -o-transform: scale(2,2); /* Opera */ -moz-transform: scale(2,2); /* Firefox */ }

O resultado é exibido na Figura 3. Note que devido ao redimensionamento do elemento, parte do conteúdo pode se perder ou não ficar visível.

Resultado da aplicação do scale

Figura 3: Resultado da aplicação do scale

skew()

O skew inclina o elemento de forma que suas laterais e bases formem um determinado ângulo com os eixos X e Y. Assim como o translate e o scale, o skew possui variantes:

  • skew(x,y): inclina o objeto nas duas dimensões.
  • skewX(x): inclina o objeto apenas horizontalmente.
  • skewY(y): inclina o objeto apenas verticalmente.

Utilizando o skew composto, veremos abaixo um exemplo de inclinação nos dois eixos.

Listagem 5: Exemplo de uso do skew

div{
	width:100px;
	height:100px;
	background-color:green;
	transform: skew(30deg,30deg);
	-ms-transform: skew(30deg,30deg); /* IE 9 */
	-webkit-transform: skew(30deg,30deg); /* Safari e Chrome */
	-o-transform: skew(30deg,30deg); /* Opera */
	-moz-transform: skew(30deg,30deg); /* Firefox */
}
Resultado da aplicação do skew

Figura 4: Resultado da aplicação do skew

Conclusão

Como vimos, a aplicação de alguns efeitos visuais 2D se tornou muito mais fácil com a chegada das CSS3. Sabendo ainda que os principais browsers já suportam estes efeitos, o webdesigner já pode começar a considerar o uso em seus projetos.

Grato pela atenção, finalizo por aqui este artigo.

Um abraço a todos e até a próxima publicação.

Joel Rodrigues

Joel Rodrigues - Técnico em Informática - IFRN Cursando Bacharelado em Ciências e Tecnologia - UFRN Programador .NET/C# e Delphi há quase 3 anos, já tendo trabalhado com Webservices, WPF, Windows Phone 7 e ASP.NET, possui ainda conhecimentos em HTML, CSS e Javascript (JQuery).