Movimento
TailwindCSS como padrão para transitions, durations, easings, animações simples e reduced motion no Sinapse.
Contrato
TailwindCSS é o padrão de motion
Movimento começa com utilities do TailwindCSS: propriedades explícitas, durações curtas, easing previsível e preferência do usuário respeitada. Bibliotecas entram apenas quando a stack precisa de gesto, spring, layout animation ou transição de rota que CSS utilitário não resolve bem.
TailwindCSS primeiro
Use utilities de transição e animação antes de criar CSS ou instalar biblioteca. Isso mantém o motion próximo do componente.
Propriedade explícita
Prefira `transition-colors`, `transition-opacity`, `transition-transform` ou `transition-[opacity,transform]`. Evite `transition-all`.
Redução por padrão
Todo movimento não essencial precisa de `motion-reduce:*` ou `motion-safe:*` para respeitar preferência do usuário.
Sem decoração solta
Movimento deve explicar estado, continuidade espacial ou resposta à ação. Se só chama atenção, não entra.
Preview de propriedades
Cores
transition-colors duration-150 ease-out Opacity
transition-opacity duration-200 ease-out Transform
transition-transform duration-200 ease-out Duração
Escala recomendada
| Utility | Uso | Exemplo |
|---|---|---|
| duration-100 | Feedback quase instantâneo | Hover simples, mudança de cor, affordance pequena. |
| duration-150 | Padrão de interação | Botões, links, chips, controles compactos. |
| duration-200 | Superfície pequena | Tooltip, popover, menu, dropdown curto. |
| duration-300 | Mudança de contexto | Drawer, side panel, entrada/saída de bloco relevante. |
| duration-500+ | Exceção | Evite em UI operacional; use só quando a espera comunica progresso. |
Easing
Curva por intenção
ease-out Entrada
O elemento aparece rápido e desacelera no fim.
ease-in Saída
O elemento começa discreto e sai mais rápido.
ease-in-out Troca de estado
Use quando não existe direção clara de entrada ou saída.
ease-linear Progresso contínuo
Use para spinner, progresso técnico ou rotação contínua.
Exemplos
Classes prontas
Feedback de botão
Padrão para hover/focus de cor. Não anima tamanho nem posição sem necessidade.
transition-colors duration-150 ease-out motion-reduce:transition-none Overlay pequeno
Use para menus e popovers. Opacity e transform são previsíveis e evitam animar propriedades caras.
transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none Estado de loading
Animação contínua só quando comunica atividade. Em reduced motion, use texto ou estado estático.
motion-safe:animate-spin motion-reduce:hidden Skeleton
Use com parcimônia. Skeleton deve indicar carregamento, não criar ruído visual permanente.
animate-pulse motion-reduce:animate-none Stacks
Quando TailwindCSS não basta
A regra do design system continua sendo TailwindCSS. As ferramentas abaixo são sugestões quando a interação exige comportamento que CSS utilitário não cobre com qualidade.
Astro
TailwindCSS + Astro View Transitions quando for navegação entre páginas
Bom para páginas estáticas/documentação que precisam de continuidade entre rotas sem virar SPA.
Não use transição de página para esconder carregamento ou mudar hierarquia de navegação.
React / Next.js
TailwindCSS; Motion para gestos, drag, layout e spring
Motion entra quando há interação rica, layout animation, presença/saída coordenada ou gesto.
View Transitions em React/Next ainda devem ser tratados como experimentais antes de produção ampla.
Vue / Nuxt
TailwindCSS + `<Transition>`/`<TransitionGroup>`; Motion for Vue ou VueUse para casos avançados
Vue Transition cobre enter/leave simples. VueUse funciona bem para valores numéricos; Motion for Vue para gestos e springs.
Evite misturar várias bibliotecas de motion na mesma aplicação sem um motivo claro.
HTML
TailwindCSS + JavaScript mínimo do produto quando houver interação
Bom para páginas e componentes estáticos onde o contrato visual vem das classes itps.
Para overlays, menus e disclosure, implemente foco, teclado e estado de forma explícita.