O CSS3 nos trouxe maior flexibilidade para customizar de forma avançada o visual e os diferentes estados de um elemento, permitindo diferentes tipos de transformações e transições. Nesse artigo, vamos conhecer as propriedades Transform e Transition do CSS3.
CSS3 Transform
A propriedade CSS3 Transform nos permite alterações lineares em elementos HTML, incluindo rotação, inclinações e alteração da escala.
Temos dois tipos de transformações no CSS3, a 2D e 3D. Nesse artigo, irei me ater de forma mais consistente as transformações 2D, mas teremos uma pincelada sobre transformações 3D também.
Existem duas propriedades principais nas transformações CSS 2D: transform, que define as alterações que serão feitas no elemento; transform-origin, que define a posição de origem do elemento, ou eixo de rotação.
Para todos os exemplos da propriedade Transform que veremos a seguir, usaremos o seguinte código HTML:
<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul>
Transform – Scale
Com a propriedade scale podemos alterar o tamanho dos elementos, aumentando ou reduzindo proporcionalmente em relação ao tamanho original. Vamos a um exemplo:
li { width: 100px; height: 100px; line-height: 100px; text-align: center; background-color: #900; float: left; margin: 10px; list-style: none; font-weight: bold; color: #fff; cursor: pointer; -webkit-transform:scale(0.7); -moz-transform:scale(0.7); -o-transform:scale(0.7); transform:scale(0.7); } li:hover { -webkit-transform:scale(1.2); -moz-transform:scale(1.2); -o-transform:scale(1.2); transform:scale(1.2); }
No código acima, definimos para cada <li> um tamanho de 100x100px, e uma escala de 0.7 (equivalente a 70% do tamanho). Quando passamos o cursor do mouse sobre o <li> (li:hover), a escala do elemento aumenta para 1.2 (equivalente a 120% do tamanho). Veja o funcionamento do código nessa página de exemplo.
Podemos ver um uso mais aprimorado dessa propriedade no site www.zurb.com/playground/osx-dock, onde temos o uso do scale para reproduzir o efeito do menu Dock.
Transform – Rotate
Utilizando a propriedade rotate podemos girar elementos a partir de um ângulo fornecido e sob um eixo específico (transform-origin). Vamos a um exemplo:
li { width: 100px; height: 100px; line-height: 100px; text-align: center; background-color: #900; float: left; margin: 10px; list-style: none; font-weight: bold; color: #fff; cursor: pointer; -webkit-transform:scale(0.7); -moz-transform:scale(0.7); -o-transform:scale(0.7); transform:scale(0.7); } li:hover { background-color: #600; -webkit-transform:scale(1.2) rotate(10deg); -moz-transform:scale(1.2) rotate(10deg); -o-transform:scale(1.2) rotate(10deg); transform:scale(1.2) rotate(10deg); }
No código acima foi feito uma variação do exemplo anterior (scale). Agora, quando passamos o cursor do mouse sobre o <li> (li:hover), além de aumentar a escala do elemento, temos uma rotação de 10 graus no mesmo. Veja o funcionamento do código nessa página de exemplo.
Podemos ver essa propriedade em uso no site www.3site.eu/examples/gallery/, onde a imagem recebe efeitos de scale e rotate quando acontece o estado hover do mouse.
Transform – Translate
Com a propriedade translate podemos mover um elemento no seu eixo X e Y, sem afetar os outros elementos ao redor. Vamos a um exemplo:
li { width: 100px; height: 100px; line-height: 100px; text-align: center; background-color: #900; float: left; margin: 10px; list-style: none; font-weight: bold; color: #fff; cursor: pointer; -webkit-transform:scale(0.7); -moz-transform:scale(0.7); -o-transform:scale(0.7); transform:scale(0.7); } li:hover { background-color: #600; -webkit-transform:scale(1.2) rotate(10deg) translate(5px, 20px); -moz-transform:scale(1.2) rotate(10deg) translate(5px, 20px); -o-transform:scale(1.2) rotate(10deg) translate(5px, 20px); transform:scale(1.2) rotate(10deg) translate(5px, 20px); }
No código acima foi feito uma variação do exemplo anterior (rotate). Agora, quando passamos o cursor do mouse sobre o <li> (li:hover), além de aumentar a escala e efetuar uma pequena rotação, temos deslocamento do elemento em 5px na horizontal e 20px na vertical. Veja o funcionamento do código nessa página de exemplo.
Podemos ver essa propriedade em uso no site www.zurb.com/playground/sliding-vinyl, onde o efeitotranslate é aplicado aos discos de vinil quando acontece o estado hover do mouse.
Transform – Skew
Ao aplicar a propriedade skew a um elemento, você poderá alterar os ângulos para conseguir um efeito de inclinação. Vamos a um exemplo:
li { width: 100px; height: 100px; line-height: 100px; text-align: center; background-color: #900; float: left; margin: 10px; list-style: none; font-weight: bold; color: #fff; cursor: pointer; -webkit-transform:scale(0.7); -moz-transform:scale(0.7); -o-transform:scale(0.7); transform:scale(0.7); } li:hover { background-color: #600; -webkit-transform:scale(1.2) translate(5px, 20px) skew(5deg, 15deg); -moz-transform:scale(1.2) translate(5px, 20px) skew(5deg, 15deg); -o-transform:scale(1.2) translate(5px, 20px) skew(5deg, 15deg); transform:scale(1.2) translate(5px, 20px) skew(5deg, 15deg); }
No código acima foi feito uma variação do exemplo anterior (translate). Agora, quando passamos o cursor do mouse sobre o <li> (li:hover), além de aumentar a escala e efetuar um deslocamento, temos uma inclinação dos ângulos e 5 e 15 graus. Veja o funcionamento do código nessa página de exemplo.
Podemos ver essa propriedade muito bem trabalhada no site www.paulrhayes.com/experiments/cube/multiCubes.html, onde o efeito skew foi aplicado a vários elementos para formar os cubos.
CSS3 Transform 3D
Transformações 3D são semelhantes a transformações 2D. As propriedades básicas são translate3d,scale3d, rotateX, rotateY e rotateZ. translate3d e scale3d possuem três argumentos, para os eixos X, Y e Z. Vamos a um exemplo utilizando rotação:
3D
div { width: 100px; height: 100px; line-height: 100px; text-align: center; background-color: #900; margin: 50px; font-weight: bold; color: #fff; cursor: pointer; -webkit-transition:all 2s ease-in-out; -moz-transition:all 2s ease-in-out; -o-transition:all 2s ease-in-out; transition:all 2s ease-in-out; -webkit-perspective: 800px; -moz-perspective: 800px; -o-perspective: 800px; perspective: 800px; -webkit-perspective-origin: 50% 100px; -moz-perspective-origin: 50% 100px; -o-perspective-origin: 50% 100px; perspective-origin: 50% 100px; } div:hover { -webkit-transform:rotateX(180deg) rotateY(180deg) rotateZ(180deg); -moz-transform:rotateX(180deg) rotateY(180deg) rotateZ(180deg); -o-transform:rotateX(180deg) rotateY(180deg) rotateZ(180deg); transform:rotateX(180deg) rotateY(180deg) rotateZ(180deg); }
No exemplo acima, estamos utilizando rotação de 180 graus nos eixos X, Y e Z. Você pode ver o funcionamento desse código na página de exemplo. Podemos ver um exemplo mais incrementado no site www.paulrhayes.com/experiments/cube-3d/touch.html, que mostra o exemplo de um cubo que pode ser rotacionado através da interação do usuário.
CSS3 Transition
A propriedade transition nos permite fazer a transição entre diferentes estados de um elemento. A sintaxe da propriedade transition é a seguinte:
transition: [ <transition-property> || <transition-duration> || <transition-timing-function> || <transition-delay> ]
Dessa forma, indicamos [1] qual propriedade sofrerá a transição, [2] o tempo de duração da transição em segundos, [3] a forma de progressão da transição (os valores possíveis são linear, ease, ease-in,ease-out, ease-in-out e bezier-cubic) e [4] o tempo de atraso em segundos até o início da transição. Vamos a um exemplo prático:
Transition
div { width: 200px; height: 200px; line-height: 200px; text-align: center; margin: 100px; font-weight: bold; color: #fff; font-size: 20px; cursor: pointer; background: #51E500; -webkit-transition: all 1s ease-in 0.6s; -moz-transition: all 1s ease-in 0.6s; -o-transition: all 1s ease-in 0.6s; transition: all 1s ease-in 0.6s; } div:hover { background: #D35529; -webkit-border-radius: 100px; -moz-border-radius: 100px; border-radius: 100px; -webkit-transform:scale(1.2) rotate(10deg); -moz-transform:scale(1.2) rotate(10deg); -o-transform:scale(1.2) rotate(10deg); transform:scale(1.2) rotate(10deg); }
No exemplo acima, o estado hover do cursor faz alterações na cor de fundo, bordas arredondadas, escala e rotação. Com a propriedade transition, ocorre a transição suave entre esses estados do elemento. Veja esse código em funcionamento nessa página de exemplo.
O valor all permite que a transição seja feita nas diferentes propriedades. Poderiamos fazer com que a transição acontecesse apenas em uma propriedade, como no exemplo abaixo:
transition: background 1s ease-in 0.6s;
No site 2011.newadventuresconf.com podemos ver um exemplo do uso da propriedade transition aplicado aos retângulos coloridos do layout.
Gostou das dicas? Então comente, deixe sua opinião ou sugestão 😉
Excelente! Me ajudou muito. Suas explicações são boas!
Só para complementar, utilizei uma estrutura de colunas, ex: column1, column2, e assim por diante… Ao invés de e (porque eles não são muito bons para design responsivo, até onde sei); portanto se você passa por algo parecido, fica a dica.
Ali no invés quis dizer a tag “ul” _ “li”.
Muito bom. Parabéns no artigo vemos como é feito e aonde já foi aplicado. Legal mesmo