Por Que Tanta Confusão?
Se você acompanha as novidades do CSS, já deve ter esbarrado em termos como "scroll-driven animations", "scroll-triggered animations", "container query scroll states" e "view transitions". Eles parecem a mesma coisa, mas cada um serve pra um propósito diferente. Vamos acabar com essa confusão de uma vez por todas!
Abaixo, explico cada conceito com exemplos práticos e código pra você testar agora mesmo.

1. Animações Scroll-Driven
Uma animação scroll-driven (impulsionada pelo scroll) liga diretamente o progresso do scroll ao progresso da animação. Rola pra frente, a animação avança; rola pra trás, ela volta; para de rolar, ela pausa.
/* Só CSS, sem JavaScript */
@keyframes grow-progress {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
.element {
animation: grow-progress linear forwards;
animation-timeline: scroll(); /* usa o container de scroll mais próximo */
}
Onde usar: barras de progresso que enchem conforme o scroll, efeitos de parallax, indicadores de leitura.
2. Animações Scroll-Triggered
Aqui a animação é disparada quando um elemento cruza um limite definido (por exemplo, entra na viewport). Uma vez disparada, ela roda até o fim, independentemente da velocidade ou direção do scroll.
/* Usando Intersection Observer ou CSS scroll-timeline */
@keyframes fade-in {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
.triggered-element {
animation: fade-in 0.6s ease-out forwards;
animation-timeline: view(); /* dispara quando o elemento entra na viewport */
}
Onde usar: animações de revelação, entradas escalonadas de lista, efeitos de cabeçalho sticky.
3. Container Query Scroll State
Esse recurso ainda está em rascunho no CSS Conditional Rules Module Level 5. Ele permite consultar um container sobre estados relacionados ao scroll, como se um elemento sticky está "preso" no topo.
.sticky-nav {
container-type: scroll-state;
position: sticky;
top: 0;
}
/* Quando o nav está preso no topo */
@container scroll-state(stuck: top) {
.sticky-nav {
background: orangered;
border-radius: 0;
flex-direction: row;
width: 100%;
a {
text-decoration: none;
}
}
}
Onde usar: mudar a aparência do menu quando fixo, adicionar sombras, modificar layout baseado na posição do scroll.
4. View Transitions API
Isso não tem nada a ver com scroll! A View Transitions API cuida de animações suaves entre diferentes estados ou páginas. Tem dois sabores:
- Transições no mesmo documento: Um elemento muda de estado (ex.: botão de rádio selecionado).
- Transições entre documentos: Animação ao navegar de uma página para outra (ex.: um wipe circular).
// Transição simples entre páginas (Página A -> Página B)
document.startViewTransition(() => {
// Atualiza o DOM para mostrar a nova página
updateDOMForNewPage();
});
Onde usar: navegação entre páginas sem travamentos, mudanças de estado animadas em UI, apps multi-página.
Tabela de Referência Rápida
| Tipo | O que faz | Ligado ao scroll? | CSS/JS? |
|---|---|---|---|
| Scroll-Driven | Progresso da animação ligado ao progresso do scroll | Sim | Só CSS |
| Scroll-Triggered | Animação roda completamente quando elemento entra/sai da viewport | Não (só disparo) | CSS + JS (Intersection Observer) |
| Container Query Scroll State | Atualiza estilos baseado no estado do container de scroll | Sim | CSS (rascunho) |
| View Transitions | Anima entre estados do DOM ou páginas | Não | API JS + CSS |

Limitações e Cuidados
- Suporte dos navegadores: Scroll-driven e container scroll state ainda são experimentais ou atrás de flags. Consulte o caniuse.com antes de usar em produção.
- Performance: Exagerar nas animações scroll-driven em dispositivos fracos pode causar travamentos. Teste em hardware real.
- Acessibilidade: Animações disparadas por scroll podem desorientar usuários com distúrbios vestibulares. Respeite
prefers-reduced-motion. - Container Query Scroll State: É um rascunho; a sintaxe pode mudar. Não use em funcionalidades críticas ainda.
Próximos Passos
- Teste a View Transitions API para navegações mais suaves.
- Monte uma barra de progresso scroll-driven com o código acima.
- Fique de olho no CSS Working Group para atualizações sobre container scroll states.
Quer se aprofundar em como APIs modernas podem otimizar performance em sistemas de larga escala? Veja este guia sobre otimização de sistemas de recomendação com JDK Vector API.

Conclusão
Scroll-driven, scroll-triggered, container query scroll states e view transitions resolvem problemas diferentes. O resumo:
- Scroll-driven = animação segue a posição do scroll.
- Scroll-triggered = animação dispara no evento de scroll, roda independente.
- Container scroll state = estilo muda baseado em condição do container de scroll.
- View transitions = mudanças suaves de estado/página (não é scroll).
Agora você pode escolher a ferramenta certa pro seu próximo projeto web. Bora codar!
Fonte: Artigo do CSS-Tricks sobre scroll-driven vs scroll-triggered vs view transitions