Skip to Content
AccessibilityReduced motion

Reduced motion

Accessibility · 05

Movimento deve explicar estado. Quando reduzido, a informação continua existindo.

Pulso usa motion para orientar causa, consequência e mudança de estado. Com prefers-reduced-motion: reduce, removemos deslocamento e loops, mas preservamos feedback por opacidade, borda, texto e estado persistente.

Política

Tipo de movimentoDefaultReduced motion
Transição de hover/focusCurta e discretaMantém mudança instantânea de estado
Entrada de modal/sheetFade + deslocamento curtoFade ou render instantâneo
Atualização de gráficoInterpolação curtaAtualização discreta sem sweep contínuo
Skeleton/loadingPulse sutilEstado estático com texto de carregamento
Alerta críticoPode usar ênfase curtaSem shake/loop; usar borda, label e live region
Toast/snackbarSlide/fade curtoFade ou render instantâneo

Regras

  • Nunca depender de motion para comunicar risco, sucesso ou erro.
  • Evitar loops infinitos em superfícies operacionais.
  • Preservar causalidade: se algo mudou, a UI deve indicar o que mudou por texto, borda, diff ou estado.
  • Spinners precisam de label acessível quando o carregamento afeta decisão.
  • Animações decorativas não entram em fluxos críticos.

Tokens e implementação

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

Use a regra global como rede de segurança, mas trate componentes críticos individualmente para manter semântica e feedback.

Estados críticos

EstadoFeedback sem motion
Handover enviadoTexto de confirmação + timestamp
Risco subiu para criticalGlifo ■ + label + live region assertive
Filtro aplicadoContagem de resultados e chip persistente
IA regenerou textoDiff textual ou marcador de versão
Offline queue mudouContador e estado queued/syncing/synced/failed

Anti-patterns

EvitarCorreção
Shake para erro de formulárioTexto de erro + aria-invalid
Pulse infinito em alertaBadge persistente + live region adequada
Gráfico animado sem valor textualTooltip/label/tabela auxiliar
Skeleton sem label“Carregando menções…”

Acceptance criteria

  • A preferência do sistema é respeitada.
  • Nenhuma informação desaparece quando motion é reduzido.
  • Fluxos críticos mantêm feedback perceptível sem animação.
  • Teste manual cobre light/dark e pelo menos um fluxo com live update.
Last updated on