CSS3 Animations

Nenhum produto encontrado nessa seleção.

Provavelmente você já ouviu ou leu sobre as CSS3 animations (animações em CSS) em algum local, mas, o simples fato de os navegadores mais antigos não suportarem este recurso, o afastou das maravilhas do novo mundo, e o pior, de tentar pelo menos aprender como elas funcionam. Seja por este, ou por outro, motivo qualquer, já está passando da hora de aprender como as CSS3 animations funcionam e como elas podem fazer o seu layout se destacar na imensidão de sites existentes na Internet da atualidade.

Atualmente, todos os navegadores mais novos (incluindo o Internet Explorer) suportam animações em CSS, por isso, talvez seja hora de olhar para frente e esquecer as pessoas que ainda utilizam navegadores antigos que não suportam este recurso.

Para saber se o seu navegador suporta animações em CSS3, basta olhar o exemplo abaixo; se conseguir visualizar uma ponta girando em um circulo que muda de cor, seu navegador as suporta.

Então? Vamos colocar a mão em códigos?

CSS3 Animations

Se você já trabalhou com animação gráfica, gifs animados, ou qualquer tipo de animação em outro aplicativo que não utilizasse CSS, vai estar em casa. O conceito das CSS3 animations é o mesmo da maioria dos aplicativos: criar pontos chave onde sua aplicação vai ser modificada do ponto anterior até o próximo ponto.

@keyframes

Os pontos chave são chamados de @keyframes e são medidos em porcentagem, ou com as palavras "from" (de) e "to" (até). Também é necessário que você de um nome qualquer para sua animação.

Veja um exemplo bem simples:

.elemento{
	animation: nome_animacao 4s 0s infinite linear normal;
	width:10px;
	height:200px;
	background: orange;
}
@keyframes nome_animacao {
	to{
		width: 100%;
	}
}

No trecho acima, tenho um elemento com classe "elemento" que tem a largura inicial de 10px. Em @keyframes, simplesmente disse que ele terá a largura final de 100%.

O efeito final fica assim:

Você define os @keyframes da seguinte maneira:

@keyframes nome_animacao {
	to{
		width: 100%;
	}
}

Ou:

@keyframes nome_animacao {
	from{ 
		width: 10px;
	}
	to{
		width: 100%;
	}
}

Ou ainda:

@keyframes nome_animacao {
	0% { 
		width: 10px;
	}
	100% {
		width: 100%;
	}
}

Também podem existir mais pontos, caso eles sejam necessários, veja:

@keyframes nome_animacao {
	0% { 
		width: 10px;
	}
	10%{
		width: 100%;
	}
	20% {
		width: 10%;
	}
	40% {
		width: 50%;
	}
	60% {
		width: 25%;
	}
	80% {
		width: 75%;
	}
	100% {
		width: 100%;
	}
}

Cada @keyframe será executado na sua devida ordem.

Você pode manipular vários atributos se desejar, veja:

@keyframes nome_animacao {
	to {
		width: 100%;
		background: blue;
		border-radius:50%;
	}
}

Propriedade animation em CSS3

Depois que você criou seus @keyframes, o próximo passo é adicionar a propriedade "animation" ao elemento que deseja que seja animado. Veja um exemplo:

.elemento{
	animation-name: nome_animacao;
	animation-duration: 2s;
	animation-delay: 1s;
	animation-iteration-count: infinite;
	animation-timing-function: linear;
	animation-direction: alternate;
	width:10px;
	height:200px;
	background: orange;
}

Veja o que cada linha significa:

  • animation-name – O nome da animação (nosso caso, nome_animacao);
  • animation-duration – Duração da animação (Exemplo: 1s, 0.3s, 300ms…);
  • animation-delay – O tempo de espera para a animação começar (Exemplo: 10s, 3000ms, 300ms…);
  • animation-iteration-count – Quantas vezes a animação será executada (1, 10, infinite, initial, inherit);
  • animation-timing-function – Especifica o método utilizado para calcular a velocidade da animação (linear, ease, ease-in, ease-out, cubic-bezier(n,n,n,n), initial, inherit).
  • animation-direction – Para qual lado a animação irá ser executada (normal, reverse, alternate, alternate-reverse, initial, inherit);
  • animation-fill-mode – Faz a animação ficar no local onde ela termina. (none, forwards, backwards, both, initial, inherit).

É claro que você não precisa especificar tudo isso da maneira descrita, também existe um atalho na seguinte ordem:

  1. animation-name
  2. animation-duration
  3. animation-timing-function
  4. animation-delay
  5. animation-iteration-count
  6. animation-direction.

Ou o mesmo que:

.elemento{
	animation: nome_animacao 4s 1s infinite linear normal;
}

Prefixos dos navegadores

Por se tratar de algo muito recente, é necessário que você adicione os prefixos dos navegadores para garantir que as animações funcionem em todos os locais possíveis. Estes são:

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

O que deixaria nosso código da seguinte maneira para as animações:

.elemento {
	-webkit-animation: nome_animacao 4s 1s infinite linear normal;
	-moz-animation: nome_animacao 4s 1s infinite linear normal;
	-ms-animation: nome_animacao 4s 1s infinite linear normal;
	-o-animation: nome_animacao 4s 1s infinite linear normal;
	animation: nome_animacao 4s 1s infinite linear normal;
}

E no caso dos @keyframes:

@-webkit-keyframes nome_animacao { /* seus pontos chave */ }
@-moz-keyframes nome_animacao { /* seus pontos chave */ }
@-ms-keyframes nome_animacao { /* seus pontos chave */ }
@-o-keyframes nome_animacao { /* seus pontos chave */ }
@keyframes nome_animacao { /* seus pontos chave */ }

Sobre a velocidade da animação

Como descrevi a respeito de animation-timing-function, a velocidade é medida utilizando algumas funções que já vem programadas por padrão, porém, existe um método para ser bem detalhista a respeito da velocidade: a função cubic-bezier(n,n,n,n), que utiliza Curva de Bézier para atingir seu objetivo.

Se você (assim como eu) não entende nada sobre a tal Curva de Bézier, pode utilizar o site Ceaser para atingir este objetivo.

Veja um exemplo de timming diferenciado:

O CSS do exemplo acima, que é o único completo (com prefixos) desse tutorial, ficou assim:

.elemento{
	-webkit-animation: nome_animacao 3s 1s infinite cubic-bezier(0.600, -0.280, 0.735, 0.045) alternate;
	-moz-animation: nome_animacao 3s 1s infinite cubic-bezier(0.600, -0.280, 0.735, 0.045) alternate;
	-ms-animation: nome_animacao 3s 1s infinite cubic-bezier(0.600, -0.280, 0.735, 0.045) alternate;
	-o-animation: nome_animacao 3s 1s infinite cubic-bezier(0.600, -0.280, 0.735, 0.045) alternate;
	animation: nome_animacao 3s 1s infinite cubic-bezier(0.600, -0.280, 0.735, 0.045) alternate;
	width:100px;
	height:100px;
	background: orange;
	position: absolute;
	top:0;
	left:10%;
}
@-webkit-keyframes nome_animacao {
	to {
		left: 90%;
	}
}
@-moz-keyframes nome_animacao {
	to {
		left: 90%;
	}
}
@-ms-keyframes nome_animacao {
	to {
		left: 90%;
	}
}
@-o-keyframes nome_animacao {
	to {
		left: 90%;
	}
}
@keyframes nome_animacao {
	to {
		left: 90%;
	}
}

Como você pode perceber, o CSS fica imenso, mas nada que um Express Prefixr não resolva por você.

Concluindo

Como descrevi no início do artigo, você deve verificar se a sua aplicação deve ser suportada em navegadores mais antigos, que não suportam animações em CSS; se sim, terá que viver sem as animações do CSS3, ou procurar criá-las com Javascript (ou o que tiver à sua disposição); se não, mergulhe com vontade nas animações que descrevi acima.

Em caso de pânico, dúvidas ou criticas, basta comentar abaixo.