Propriedade animation-duration: Quanto tempo dura a animação?
Defina a duração total da animação.
Depois de definir o "roteiro" da sua animação com @keyframes e "chamar" essa animação para um elemento com animation-name, o próximo passo crucial é dizer ao navegador por quanto tempo um ciclo completo dessa animação deve durar. É para isso que serve a propriedade animation-duration.
A animation-duration é como o "cronômetro" de cada repetição da sua animação. Ela define o tempo que o navegador levará para ir do 0% ao 100% (ou from a to) dos seus @keyframes. Sem ela, a animação não será visível, pois a duração padrão é zero.
Como funciona animation-duration
Esta propriedade aceita um valor de tempo, que pode ser em segundos (s) ou milissegundos (ms).
Valores possíveis:
0sou0ms(padrão): A animação dura zero segundos, ou seja, é instantânea. Se você não definiranimation-duration, este é o valor que será usado, e você não verá nenhuma animação.<tempo>: Um valor numérico seguido da unidade de tempo (spara segundos oumspara milissegundos).
Sintaxe:
.elemento {
animation-duration: <tempo>;
}
Exemplos:
1. Animação com duração de 2 segundos:
@keyframes girar {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.box {
width: 100px;
height: 100px;
background-color: blue;
/* ... outras propriedades ... */
animation-name: girar;
animation-duration: 2s; /* Cada giro completo levará 2 segundos */
animation-iteration-count: infinite;
}
Resultado: A caixa gira 360 graus em 2 segundos, repetidamente.
2. Animação com duração de 1500 milissegundos:
@keyframes pulsar {
0% { transform: scale(1); }
50% { transform: scale(1.2); }
100% { transform: scale(1); }
}
.box {
width: 100px;
height: 100px;
background-color: green;
/* ... outras propriedades ... */
animation-name: pulsar;
animation-duration: 1500ms; /* Cada pulsação levará 1.5 segundos */
animation-iteration-count: infinite;
}
Resultado: A caixa pulsa (aumenta e diminui) em 1.5 segundos, repetidamente.
3. Múltiplas durações para múltiplas animações:
Se você aplicou múltiplas animações com animation-name (separadas por vírgula), você pode fornecer uma duração para cada uma delas, também separadas por vírgula. A ordem deve corresponder à ordem dos nomes das animações.
@keyframes moverDireita {
from { transform: translateX(0); }
to { transform: translateX(100px); }
}
@keyframes mudarCor {
0% { background-color: blue; }
50% { background-color: green; }
100% { background-color: blue; }
}
.box {
width: 100px;
height: 100px;
/* ... outras propriedades ... */
animation-name: moverDireita, mudarCor;
animation-duration: 2s, 3s; /* 'moverDireita' dura 2s, 'mudarCor' dura 3s */
animation-iteration-count: infinite, infinite;
}
Resultado: A animação de movimento (moverDireita) completa um ciclo em 2 segundos, enquanto a animação de mudança de cor (mudarCor) completa um ciclo em 3 segundos. Elas rodam independentemente em suas próprias durações.
Dicas para animation-duration:
- Percepção: Duração entre
0.5se3ssão comuns para a maioria das animações visíveis. Animações muito rápidas podem ser difíceis de perceber, e muito lentas podem ser entediantes. - Sincronização: Ao usar múltiplas animações, ajuste as durações para sincronizar os efeitos se desejar um resultado coordenado.
0s: Lembre-se que0ssignifica que a animação não será visível.
Exemplo Prático:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>animation-duration</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
flex-wrap: wrap;
gap: 30px;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: #f0f2f5;
margin: 0;
}
/* --- Definição da Animação de Giro --- */
@keyframes girar {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* --- Definição da Animação de Pulso --- */
@keyframes pulsar {
0% { transform: scale(1); }
50% { transform: scale(1.1); }
100% { transform: scale(1); }
}
.box {
width: 100px;
height: 100px;
background-color: #007bff;
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
color: white;
font-weight: bold;
font-size: 1.1em;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
margin: 10px;
animation-name: girar; /* Todas usarão a animação de girar */
animation-iteration-count: infinite;
animation-timing-function: linear;
}
/* --- Exemplos de animation-duration --- */
.box-curta {
animation-duration: 0.5s; /* Gira rápido */
}
.box-media {
animation-duration: 2s; /* Gira em velocidade normal */
}
.box-longa {
animation-duration: 4s; /* Gira lentamente */
}
.box-multiplas-duracoes {
animation-name: girar, pulsar; /* Aplica duas animações */
animation-duration: 3s, 1s; /* Girar em 3s, Pulsar em 1s */
animation-iteration-count: infinite, infinite;
animation-timing-function: linear, ease-in-out;
background-color: #28a745; /* Cor base para esta caixa */
}
</style>
</head>
<body>
<div class="box box-curta">0.5s</div>
<div class="box box-media">2s</div>
<div class="box box-longa">4s</div>
<div class="box box-multiplas-duracoes">Múltiplas</div>
</body>
</html>
Resultado:
- Observe como a duração afeta a velocidade de cada animação de giro.
- A caixa "Múltiplas" mostra duas animações rodando com durações diferentes.
Com animation-duration, você controla o "ritmo" da sua animação, definindo o tempo que cada ciclo levará para ser concluído.