CSS Animation

Animações & Transições

Transições e keyframes em CSS dão vida às interfaces sem a necessidade de JavaScript. Animando as propriedades corretas, o movimento permanece fluido e acessível.

intermediate14 min readUpdated 15 de set. de 2026
pulse.css
css
/* pulse.css */
@keyframes pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.05); opacity: 0.8; }
}

.badge {
  animation: pulse 2s ease-in-out infinite;
  transition: transform 150ms ease;
}

.badge:hover {
  transform: scale(1.1);
}
Mudança de estado
transition
Sequência
@keyframes + animation
Movimento
transform
Fluidez
timing-function
Performance
transform and opacity
Acessibilidade
prefers-reduced-motion

Por que importa

Por que o movimento importa

Feedback claro

O movimento mostra que algo mudou, o que torna as interfaces responsivas e compreensíveis.

Leve quando bem feito

Animar transform e opacity roda no compositor, mantendo a fluidez sem disparar layout ou paint.

Respeito ao usuário

Honrar as preferências de reduced-motion evita que o movimento cause desconforto.

O panorama completo

As três ferramentas de movimento do CSS

Transitions para mudanças de estado, keyframes para sequências e transforms para movimentos leves e otimizados para o compositor.

Transitions

Reação

Mudanças suaves entre dois estados, disparadas por hover, focus ou mudança de classe.

Keyframes

Sequência

Animações de múltiplas etapas com controle sobre cada fase e iteração.

Transforms

Mover

translate, scale e rotate alteram a aparência sem afetar o layout.

Movimento em CSS num relance

As técnicas principais

transition

Especifique a propriedade, duração, timing e delay para mudanças de estado.

transform

translate, scale, rotate e skew sem disparar o layout.

@keyframes

Defina animações nomeadas com porcentagens e itere-as.

Timing functions

ease, linear, cubic-bezier e steps controlam a sensação do movimento.

Performance

Atenha-se a transform e opacity; evite propriedades de layout.

Reduced motion

Desative ou simplifique o movimento quando o usuário solicitar.

Uma breve historia

De fades no hover a view transitions

  1. 2009

    Transitions e transforms

    O CSS ganha mudanças de estado suaves e transforms 2D/3D.

    09
  2. 2012

    Animações CSS

    Keyframes tornam animações de múltiplas etapas declarativas.

    12
  3. 2015

    Aceleração de hardware

    Transforms otimizados para o compositor tornam-se o padrão de performance.

    15
  4. 2023

    View Transitions API

    Transições animadas entre estados de página e DOM tornam-se nativas.

    23
  5. Hoje

    Movimento com moderação

    Acessibilidade e performance guiam a forma como o movimento é utilizado.

    Hoje

O guia completo

Animações & Transições: Tudo que voce precisa saber

Por que o movimento é importante

Movimento é comunicação. Um botão que suaviza ao ser pressionado, um painel que desliza para a tela e uma lista que se reordena suavemente — tudo isso informa ao usuário o que acabou de acontecer. Quando bem feito, o movimento torna a interface responsiva e polida. Quando mal feito, ele distrai e frustra.

O CSS oferece três ferramentas: transitions para mudanças de estado, keyframes para sequências e transforms para movimentação. Domine esses conceitos e você raramente precisará de JavaScript para animações do dia a dia.

Transitions

Uma transition interpola suavemente entre dois estados e é executada quando uma propriedade é alterada.

/* button.css */
.button {
  background: #2563eb;
  transform: translateZ(0);
  transition: background-color 150ms ease, transform 150ms ease;
}

.button:hover {
  background: #3b82f6;
  transform: translateY(-1px);
}

.button:active {
  transform: translateY(0);
}

A sintaxe curta (shorthand) recebe a propriedade, a duração, a função de temporização (timing function) e um atraso opcional. Transitions precisam de um gatilho: :hover, :focus, :checked, a alteração de uma classe via JavaScript ou uma media query. Mantenha as durações curtas — entre 150 e 300 milissegundos geralmente são suficientes para fornecer feedback.

Transforms

Transforms alteram a aparência de um elemento sem afetar o layout dos demais, e é por isso que são leves para animar.

/* transform.css */
.move { transform: translateX(24px); }
.grow { transform: scale(1.1); }
.turn { transform: rotate(45deg); }
.skew { transform: skewX(-10deg); }

.combo {
  transform: translateY(-4px) scale(1.02) rotate(-1deg);
}

translate, scale e rotate podem ser executados no compositor, mantendo-se fluidos mesmo sob carga. Já animar width, height, top ou margin força o navegador a recalcular o layout em cada frame.

Keyframes

Para animações com múltiplas etapas ou em loop, use @keyframes e animation.

/* spinner.css */
@keyframes spin {
  to { transform: rotate(360deg); }
}

.spinner {
  animation: spin 800ms linear infinite;
}

@keyframes fade-up {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}

.enter {
  animation: fade-up 300ms ease-out both;
}

O atalho animation define nome, duração, timing, delay, contagem de iterações, direção e fill mode. both é útil para animações de entrada, pois aplica os estados do primeiro e do último keyframe.

Funções de temporização (Timing functions)

A função de temporização controla a sensação do movimento. O easing é o que faz com que a animação pareça natural em vez de mecânica.

/* easing.css */
.linear { transition-timing-function: linear; }
.ease-out { transition-timing-function: cubic-bezier(0.22, 1, 0.36, 1); }
.bounce { transition-timing-function: cubic-bezier(0.68, -0.55, 0.27, 1.55); }
  • ease-out para elementos que entram na tela, para que eles desacelerem.
  • ease-in para elementos que estão saindo.
  • ease-in-out para movimentos entre dois estados visíveis.
  • steps() para efeitos de quadros (frames), como digitação ou animações de sprite.

Performance

A regra é simples: anime transform e opacity. Essas propriedades podem ser processadas pelo compositor, pulando as etapas de layout e paint. Qualquer coisa que altere a geometria dispara o layout, e qualquer coisa que altere a cor ou sombra dispara o paint.

/* hint.css */
.animated {
  will-change: transform;
}

will-change indica que um elemento está prestes a ser animado, permitindo que o navegador o promova para sua própria camada. Use com moderação e remova assim que a animação terminar; camadas promovidas em excesso desperdiçam memória. Veja o guia de Browsers & Rendering para entender o porquê.

Acessibilidade e redução de movimento

Alguns usuários sentem tontura ou náuseas devido a animações de movimento, e o sistema operacional disponibiliza essa preferência.

/* reduced.css */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

Uma regra geral como esta é uma base segura. Para uma abordagem mais refinada, substitua movimentos amplos por um simples efeito de fade. Nunca transmita significados apenas através de movimento.

View transitions

A View Transitions API anima a transição entre dois estados do DOM ou páginas de forma nativa.

// navigate.js
document.startViewTransition(() => {
  updateTheDOM();
});

O navegador tira snapshots dos estados antigo e novo e anima a transição entre eles, permitindo que você controle o efeito com pseudo-elementos CSS. É ideal para navegação entre páginas e reordenação de listas. Forneça um fallback simples para navegadores que não oferecem suporte a essa funcionalidade.

Padrões

  • Feedback de hover e focus. Transições curtas de cor e transform.
  • Animações de entrada. Fade e slide in com o fill mode both.
  • Listas escalonadas (staggered). Atraso leve em cada item, geralmente configurado com uma variável CSS e estilo inline.
  • Skeletons e spinners. Keyframes em loop para sinalizar o carregamento.
  • Accordions e drawers. Transição de altura via grid-template-rows de 0fr para 1fr, o que permite uma animação fluida.

Melhores práticas

  • Anime transform e opacity; evite propriedades de layout.
  • Mantenha as durações curtas: 150–300ms para feedback, e durações maiores para ênfase.
  • Use ease-out para entradas e ease-in para saídas.
  • Respeite a preferência prefers-reduced-motion.
  • Use will-change com moderação e faça a limpeza após a animação.
  • Prefira CSS para casos simples e JavaScript para sequências complexas.
  • Teste em dispositivos de baixo desempenho, não apenas em um desktop rápido.

Erros comuns

  • Animar width, height ou top, causando jank.
  • Deixar o will-change ativado permanentemente e desperdiçar memória.
  • Animações longas e lentas que deixam a UI com a sensação de lentidão.
  • Ignorar as preferências de redução de movimento (reduced-motion).
  • Movimentos infinitos que distraem o usuário do conteúdo.
  • Depender de animações para transmitir informações essenciais.

Próximos passos

O motion em CSS cobre a maior parte do que as interfaces precisam. Quando você quiser timelines, storytelling baseado em scroll ou controle preciso, siga para o guia de Advanced Animation. Entenda os custos com Browsers & Rendering, mantenha a velocidade com Web Performance e comece pelos fundamentos de CSS.

Escolhendo o que animar

transform e opacity podem rodar no compositor. Animar width ou top dispara layout em cada frame e causa engasgos (jank).

Preferir
.card {
  transition: transform 200ms ease, opacity 200ms ease;
}
.card:hover {
  transform: translateY(-4px);
}
Evitar
.card {
  transition: top 200ms ease, width 200ms ease;
}
.card:hover {
  top: -4px;
  width: 320px;
}

Respeitando preferências de movimento

Usuários que solicitam redução de movimento devem ter uma experiência simplificada ou instantânea, não nauseante.

Preferir
.panel {
  transition: transform 300ms ease;
}

@media (prefers-reduced-motion: reduce) {
  .panel {
    transition: opacity 150ms ease;
  }
}
Evitar
.panel {
  animation: slide 600ms ease infinite;
}
/* ignores the user's
   motion preference */

Perguntas frequentes

Perguntas frequentes

Keep learning

Related topics from the roadmap.

$ comecar a aprender

Pronto para aprender Animations & Transitions?

Nosso tutorial interativo te guia por Animations & Transitions passo a passo — com quizzes e codigo real que voce pode executar no navegador.