Pular para o conteúdo
Beta

Novo layout em fase de testes.

Versão beta

Nova versão do layout do Doug Design

Estamos validando uma nova versão visual do site, com navegação reformulada, leitura mais confortável e foco em desempenho, principalmente em celulares.

O que não muda
Conteúdo editorial, endereços (URLs) das publicações, a Política de Privacidade e as suas preferências de cookies.
O que pode mudar
Por ser uma versão beta, ajustes de visual, acessibilidade e desempenho serão aplicados de forma contínua, com base em medições e no retorno dos leitores.

Encontrou erro de exibição, texto difícil de ler ou lentidão? Conte pela página de contato, informando o endereço da página, o aparelho e o navegador usados.

Web Design•5 min de leitura

View Transitions API no CSS: Como criar animações fluidas entre páginas sem JavaScript

Aprenda a implementar a View Transitions API nativa no CSS para criar transições suaves de navegação MPA sem bibliotecas pesadas.

Maya Pixel

Interface de usuário moderna com cards flutuantes demonstrando transição visual
Neste artigo
  1. Por que transições de página nativas mudam o jogo do Web Design?
  2. Como ativar Cross-Document View Transitions com a regra @view-transition
  3. Mapeando elementos com view-transition-name para animações morphing
  4. Na página de lista (card):
  5. Na página do post individual:
  6. Customizando animações com pseudo-elementos CSS
  7. Suporte dos navegadores e Melhores Práticas

Durante anos, criar animações fluidas entre trocas de páginas (como a transição de um card de produto para a tela de detalhes) exigia transformar o site em uma pesada Single Page Application (SPA) usando bibliotecas complexas como Framer Motion ou GSAP.

Com a consolidação da View Transitions API nos navegadores modernos, agora é possível aplicar transições nativas nativas diretamente no CSS para aplicações Multi-Page (MPA), sem alterar a arquitetura do servidor ou comprometer o desempenho da página.


Por que transições de página nativas mudam o jogo do Web Design?

A View Transitions API tira do desenvolvedor a responsabilidade de calcular posições de elementos no DOM, coordenadas de bounding box e estados intermediários de animação.

Quando o usuário clica em um link de navegação:

  1. O navegador tira uma captura de tela (snapshot) do estado atual da página (::view-transition-old(root)).
  2. O novo documento é carregado e renderizado em segundo plano.
  3. O navegador tira um snapshot do novo estado (::view-transition-new(root)).
  4. Uma transição do tipo cross-fade é executada automaticamente usando a aceleração de hardware da GPU.

Tudo isso acontece sem que o usuário perceba a “piscada” tradicional do recarregamento de página.


Como ativar Cross-Document View Transitions com a regra @view-transition

Para habilitar a animação nativa em navegações comuns entre páginas HTML no mesmo domínio, basta incluir a regra arroba @view-transition no seu arquivo CSS global:

/* src/styles/global.css */
@view-transition {
  navigation: auto;
}

Apenas com essa linha, todas as trocas de página passam a ter um efeito suave de fade-in/fade-out padrão.


Mapeando elementos com view-transition-name para animações morphing

A verdadeira mágica da API surge quando queremos animar elementos específicos de um layout — por exemplo, a imagem de capa de um artigo que se expande do card do blog para o cabeçalho da página individual.

Basta atribuir o mesmo view-transition-name para o elemento na página de origem e de destino:

Na página de lista (card):

<article class="post-card">
  <img 
    src="/capa.jpg" 
    alt="Capa do artigo" 
    style="view-transition-name: hero-cover-123;" 
  />
  <h2>Título do Artigo</h2>
</article>

Na página do post individual:

<main class="post-detail">
  <img 
    src="/capa.jpg" 
    alt="Capa do artigo" 
    style="view-transition-name: hero-cover-123;" 
  />
  <h1>Título do Artigo</h1>
</main>

O navegador identifica os nomes idênticos e automaticamente interpola o tamanho, posição e proporção da imagem durante a mudança de rota.


Customizando animações com pseudo-elementos CSS

Você pode personalizar os tempos e curvas de aceleração de qualquer elemento usando CSS puro:

/* Animação personalizada para a raiz da página */
::view-transition-old(root) {
  animation: 250ms ease-out slide-out-left;
}

::view-transition-new(root) {
  animation: 300ms ease-in slide-in-right;
}

@keyframes slide-out-left {
  to { transform: translateX(-100%); opacity: 0; }
}

@keyframes slide-in-right {
  from { transform: translateX(100%); opacity: 0; }
}

Suporte dos navegadores e Melhores Práticas

  • Suporte atual: Disponível nativamente no Chrome, Edge, Opera e Safari recente. No Firefox, a funcionalidade é degradada graciosamente para a navegação normal sem quebrar o site.
  • Respeite prefers-reduced-motion: Sempre desative ou simplifique as animações para usuários que ativaram a preferência por movimento reduzido nas configurações do sistema operacional:
@media (prefers-reduced-motion: reduce) {
  ::view-transition-group(*),
  ::view-transition-old(*),
  ::view-transition-new(*) {
    animation: none !important;
  }
}

Usar a View Transitions API é a maneira mais limpa e performática de oferecer uma experiência digna de aplicativo nativo mantendo a simplicidade do HTML e CSS.

CompartilheWhatsAppXFacebook
Publicidade

Newsletter

Acompanhe sem perder nada

A newsletter está em preparação. Enquanto a integração de inscrição não fica pronta, assine o feed RSS e receba cada nova publicação no seu leitor favorito.

Assinar o RSS

Comentários

Os comentários usam o Giscus e são carregados só quando você pedir.

Continue lendo

Mais em Web Design