Estilização: Transições Suaves Usando Apenas CSS

Por , em 24/02/2012
Lido 4.223 vezes Comente

Pouco tempo atrás houve um boom de jQuery na internet. Pra quem não sabe, é uma biblioteca JavaScript que facilita muito a vida dos web designers, permitindo desenvolver soluções e estilizações sem problemas de compatibilidade entre navegadores.

Muitos sugeriam códigos para aplicar transições suaves de cor de fundo, links e divs, coisa facilmente alcançável com poucas linhas de CSS. A questão é que os navegadores ainda não estavam bem preparados para essas regras. Uma estilização que funcionava no Firefox poderia não mostrar nada no Opera, por exemplo.

Agora a coisa mudou; quase todos trabalham bem com CSS3 e muitas vezes não é preciso usar jQuery. Vamos ver um código simples para aplicar transições em elementos mais comuns, como links e divs com efeito hover. Sabendo como fazer, você pode estilizar outros elementos, como menus de navegação.

Código básico

O básico para criar as transições será o uso do transition, com ease. Essa propriedade é lidas sem problema pelos principais navegadores - exceto Internet Explorer, pelo menos por enquanto. Para essa compatibilidade, crie uma regra que atenda a todos: webkit, moz, o e a propriedade básica. Veja um exemplo de regras comentadas.

elemento {
-webkit-transition: 0.3s ease-in; // navegadores webkit, como Safari e Chrome
-moz-transition: 0.3s ease-in; // Firefox
-o-transition: 0.3s ease-in; // Opera
}

Como dá pra ver, é simples: propriedade transição, com 0.3 segundo de duração, e com uma "desaceleração" no início da transição. Ou seja, ela começa suavemente e termina mais depressa.

Aplicando em links

Fazer um link mudar de cor ou tamanho quando passamos o mouse é coisa simples. Qualquer curso elementar de HTML ensina isso. Pra quem não lembra, é isso:

a {
color: #ff0000 // ou seja, links vermelhos
}

a:hover {
color: #fff // ficarão brancos ao passar o mouse.
}

Exemplo desse link funcionando, passe o mouse aqui.

Agora, vamos usar o transition para suavizar a mudança de cor.

a {
color: #ff0000;
-webkit-transition: 0.3s ease-in;
-moz-transition: 0.3s ease-in;
-o-transition: 0.3s ease-in
}

a:hover {
color: #fff;
-webkit-transition: 0.3s ease-in;
-moz-transition: 0.3s ease-in; 
-o-transition: 0.3s ease-in
}

Agora, o link com as novas regras. Passe o mouse aqui.

Funciona para outras mudanças do link, como a cor de fundo (background-color). Veja o exemplo:

Passe o mouse

A lista de propriedades com valores que podem ser alterados por transition é grande. Quase tudo, incluindo cores, valores integrais como posicionamento e tamanho pode ser alterado. Uma exceção notável são as box-shadow.

A lista completa:

Propriedade O que muda
background-color Cor
background-image Só degradês
background-position Porcentagem, largura
border-bottom-color Cor
border-bottom-width Largura
border-color Cor
border-left-color Cor
border-left-width Largura
border-right-color Cor
border-right-width Largura
border-spacing Largura
border-top-color Cor
border-top-width Largura
border-width Largura
bottom Largura, porcentagem
color Cor
crop Retangular
font-size Largura, porcentagem
font-weight Número
grid-* Diversos
height Largura, porcentagem
left Largura, porcentagem
letter-spacing Largura
line-height Número, largura, porcentagem
margin-bottom Largura
margin-left Largura
margin-right Largura
max-height Largura, porcentagem
max-width Largura, porcentagem
min-height Largura, porcentagem
min-width Largura, porcentagem
opacity Number
outline-color Cor
outline-offset Integer
outline-width Largura
padding-left Largura
padding-right Largura
padding-top Largura
right Largura, porcentagem
text-indent Largura, porcentagem
text-shadow Sombra
top Largura, porcentagem
vertical-align Keywords, largura, porcentagem
visibility Visibilidade
width Largura, porcentagem
word-spacing Largura, porcentagem
z-index Integer
zoom Número

Transition em divs

Mais um exemplo, agora alterando a cor de fundo, largura e a cor do texto dentro da div com a classe "mudacor".

CSS para a div normal:

.mudacor {
background-color: #ff4b33; //cor de fundo da div
color: #fff; // cor do texto dentro da div
width:50%; //largura da div
height: 30px //altura da div
}
.mudacor:hover {
background-color: #fff;
color: #000;
width:70%; //largura da div
}
Conteúdo da div. Passe o mouse aqui

Estilo da div acima, mas com transition:

.mudacor {
background-color: #ff4b33; //cor de fundo da div
color: #fff; // cor do texto dentro da div
width:50%; //largura da div
height: 30px; //altura da div
-webkit-transition: 0.8s linear; 
-moz-transition: 0.8s linear; 
-o-transition: 0.8s linear
}
.mudacor:hover {
background-color: #fff;
color: #000;
width:70%; //largura da div
-webkit-transition: 0.3s linear; 
-moz-transition: 0.3s linear; 
-o-transition: 0.3s linear
}

E o resultado. Note que a alteração é mais lenta ao voltar ao normal, porque usei 0.8s na classe padrão, e 0.3 na classe com hover (ou seja: no "hover", a transformação é mais rápida).

Conteúdo da div

 

NOTA: se você está acessando esta página com o Internet Explorer, já deve ter notado que as regras não funcionaram. Você deveria considerar a possibilidade de trocar de navegador. Veja algumas razões porque eu detesto Internet Explorer.

Para saber mais, leia os links abaixo. Eles são boas referências para aprofundar o tema das transitions, mas os exemplos mostrados aqui com ease e linear já sejam suficientes para aplicar em algumas páginas.

 

Mais na categoria Design