Storytelling de tela cheia — uma tela SUBSTITUI a outra, presa ao scroll. A base de sites inteiros feitos em uma rolagem só.
Cada "tela" ocupa o viewport inteiro; ao rolar, uma seção substitui a outra com uma transição própria (cada transição pode ter seu próprio efeito). Uma tela pode ter mais de um "ambiente" interno rolável antes de passar pra próxima.
sw-ani-fx aceita uma lista de efeitos separados por "\|", um por seção (o 1º nome nunca é usado — a 1ª tela é só o ponto de partida, sem transição de entrada).
Cada seção ocupa a tela inteira e a rolagem troca uma pela outra. É a base de sites que contam uma história numa rolagem só.
Por ser tela cheia e prender o scroll, não cabe numa caixa de exemplo sem sequestrar a leitura desta página — o código ao lado é o completo.
<div sw-ani="sections" sw-ani-fx="cover|fade|zoom">
<div sw-ani-section>tela 1</div>
<div sw-ani-section>tela 2</div>
<div sw-ani-section>tela 3</div>
</div>
<!-- precisa de PELO MENOS duas seções, senão ele avisa no console -->
O sw-ani-fx recebe uma transição por seção, separadas por |. O primeiro nome nunca é usado de fato: a primeira tela é só o ponto de partida, não tem de onde entrar.
Se você escrever um efeito que não existe, ele avisa no console e usa cover — não quebra a página.
<!-- 4 telas, 4 nomes (o 1º é ignorado) -->
<div sw-ani="sections" sw-ani-fx="cover|fade|zoom|slide-left">
<div sw-ani-section>…</div>
<div sw-ani-section>…</div>
<div sw-ani-section>…</div>
<div sw-ani-section>…</div>
</div>
<!-- os 13: cover stack slide-up slide-down slide-left slide-right
fade zoom scale mask skew fold · h-scroll h-scroll-right -->
Transição horizontal em tela estreita costuma vazar texto pela borda. Em vez de reescrever tudo, troque a cadeia inteira abaixo do breakpoint com sw-ani-fx-mob.
E se o efeito não fizer sentido nenhum no celular, sw-ani-mobile="flow" desliga a mágica e as seções voltam a ser blocos empilhados comuns — o conteúdo continua lá, só sem o cinema.
<!-- no desktop desliza; no celular empilha -->
<div sw-ani="sections"
sw-ani-fx="slide-right|slide-left|cover"
sw-ani-fx-mob="stack|stack|stack"
sw-ani-break="767">
…
</div>
<!-- ou simplesmente desliga no celular -->
<div sw-ani="sections" sw-ani-mobile="flow">…</div>
Dá pra ter uma tela que segura mais conteúdo do que cabe no viewport: marque a altura com sw-ani-h e o miolo rolável com sw-ani-scroll. A seção prende o scroll enquanto esse conteúdo interno passa, e só então libera pra próxima.
<div sw-ani="sections" sw-ani-fx="cover|fade">
<!-- um "hero" alto, com dois ambientes internos -->
<div sw-ani-section sw-ani-h="210%">
<div sw-ani-scroll>
…conteúdo mais alto que a tela…
</div>
</div>
<div sw-ani-section>tela seguinte</div>
</div>
<!-- uma seção específica pode ficar de fora do efeito: -->
<div sw-ani-section sw-ani-size="flow">não prende o scroll</div>
Sections reescreve o gesto mais básico da web: rolar. Em site de conteúdo, blog, documentação ou e-commerce, isso atrapalha — o visitante perde a noção de tamanho da página e o Ctrl+F fica estranho.
Faz sentido em apresentação de produto, landing de campanha e portfólio: peças curtas, onde a sequência É o conteúdo.
<!-- regra prática: se a página tem mais de 6 ou 7 telas,
provavelmente ela quer ser uma página normal -->
sw-ani-fxsw-ani-fx-mobsw-ani-breaksw-ani-mobilesw-ani-sectionsw-ani-hsw-ani-scrollsw-ani-sizecover (padrão)stackslide-up \| slide-downslide-left \| slide-rightfadezoomscalemaskskewfoldh-scroll \| h-scroll-rightNenhum.
Nenhum.
[sw-ani-section], e elas têm que ser filhas diretas do contêiner.sw-ani-mobile="flow".prefers-reduced-motion) recebe a versão sem as transições — conte com isso e não esconda conteúdo atrás do efeito.