SW Core
SW Core / Animações / Texto animado

Texto animado Animações

Título que entra letra a letra, máquina de escrever, texto que embaralha até formar, frase que acende ao rolar, faixa que corre sem parar — tudo com sw-ani.

O que é

Efeitos feitos para texto: títulos, chamadas, frases de destaque. Você escreve o texto normal no HTML e diz qual efeito quer em sw-ani. O SW Core separa o texto em pedaços (letras, palavras ou linhas) e anima cada um, ou digita, ou embaralha, ou acende palavra por palavra. Alguns efeitos são só CSS (degradê nas letras, sublinhado, onda, falha, cortina).

Os efeitos de texto que "mexem" nas letras (split, type, scramble, sweep, marquee, whole) precisam do pacote de animação. O "quando" usa palavras curtas: sem palavra anima toda vez que o texto aparece na tela; one anima só a primeira vez; loop repete enquanto estiver na tela; scrub amarra o efeito à rolagem. O texto continua inteiro para o Google e para leitores de tela.

Quando usar

  • Título principal de uma seção: sw-ani="split words" (palavra por palavra) — elegante sem exagero.
  • Chamada com "digitando": sw-ani="type".
  • Clima de tecnologia (números, código): sw-ani="scramble".
  • Frase de manifesto que acende enquanto a pessoa lê: sw-ani="sweep".
  • Faixa de marcas, serviços ou avisos correndo: sw-ani="marquee".
  • Várias frases que se revezam ("Feito pra criar / animar / vender") é outro componente: a Máquina de escrever.

Comece aqui

  1. 1

    Coloque o SW Core e o pacote de animação. O JS da animação vai antes do swcore.min.js.

    <link rel="stylesheet" href="swcore/swcore.min.css">
    <link rel="stylesheet" href="swcore/swcore.motion.min.css">
    
    <!-- fim do <body> -->
    <script src="swcore/swcore.motion.min.js"></script>
    <script src="swcore/swcore.min.js"></script>
  2. 2

    Escreva o efeito no texto. Aqui: cada palavra entra em sequência quando o título aparece na tela.

    Bolos caseiros feitos todo dia

    <h2 sw-ani="split words">Bolos caseiros feitos todo dia</h2>

Todas as variações

Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.

1. Split — o texto entra em pedaços

Escolha o tamanho do pedaço. Role para fora e volte: sem palavra de "quando", ele anima toda vez que aparece.

Entra letra por letra

split — letra por letra (padrão) <p sw-ani="split" class="t-g fw6 m-0">Entra letra por letra</p>

Entra palavra por palavra

split words — palavra por palavra <p sw-ani="split words" class="t-g fw6 m-0">Entra palavra por palavra</p>

Primeira linha
segunda linha
terceira linha

split lines — linha por linha (quebre com <br>) <p sw-ani="split lines" class="t-g fw6 m-0">Primeira linha<br>segunda linha<br>terceira linha</p>

2. Split — o jeito de cada pedaço entrar

22 jeitos. Todos aqui com words; funcionam igual com letras e linhas.

Seu site no ar

fade-up — sobe aparecendo (padrão) <p sw-ani="split words fade-up" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

fade-down — desce aparecendo <p sw-ani="split words fade-down" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

fade-left — vem da direita <p sw-ani="split words fade-left" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

fade-right — vem da esquerda <p sw-ani="split words fade-right" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

blur-in — sai do desfoque (apelido: blur) <p sw-ani="split words blur-in" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

blur-up — sobe saindo do desfoque <p sw-ani="split words blur-up" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

zoom-in — cresce com um pulinho <p sw-ani="split words zoom-in" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

zoom-out — encolhe de grande <p sw-ani="split words zoom-out" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

zoom-blur — cresce saindo do desfoque <p sw-ani="split words zoom-blur" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

rotate-in — gira para um lado (apelido: rotate) <p sw-ani="split words rotate-in" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

rotate-cw — gira para o outro lado <p sw-ani="split words rotate-cw" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

elastic-up — sobe com elástico (apelido: elastic) <p sw-ani="split words elastic-up" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

drop — cai de cima <p sw-ani="split words drop" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

bounce-in — cresce quicando (apelido: bounce) <p sw-ani="split words bounce-in" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

flip-up — vira em 3D para cima <p sw-ani="split words flip-up" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

flip-down — vira em 3D para baixo <p sw-ani="split words flip-down" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

flip-left — vira em 3D para a esquerda <p sw-ani="split words flip-left" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

flip-right — vira em 3D para a direita <p sw-ani="split words flip-right" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

skew-left — entra inclinado da esquerda <p sw-ani="split words skew-left" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

skew-right — entra inclinado da direita <p sw-ani="split words skew-right" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

wave — onda passando pelas palavras <p sw-ani="split words wave" class="t-g fw6 m-0">Seu site no ar</p>

Seu site no ar

pulse — pulsa em sequência <p sw-ani="split words pulse" class="t-g fw6 m-0">Seu site no ar</p>

3. Split — quando e em que ritmo

O "quando" vale para split, type e scramble. sw-ani-stagger muda o intervalo entre um pedaço e outro (0 = todos juntos, 0,95 = um de cada vez). sw-ani-dur muda a duração (em segundos).

Toda vez que aparece

(nada) — toda vez que entra na tela <p sw-ani="split words" class="t-g fw6 m-0">Toda vez que aparece</p>

Só na primeira vez

one — só a primeira vez <p sw-ani="split words one" class="t-g fw6 m-0">Só na primeira vez</p>

Repete sem parar

loop — repete enquanto está na tela <p sw-ani="split words loop" class="t-g fw6 m-0">Repete sem parar</p>

Preso à rolagem

scrub — acompanha a barra de rolagem <p sw-ani="split words scrub" class="t-g fw6 m-0">Preso à rolagem</p>

Quase juntos

sw-ani-stagger="0.1" — pedaços quase juntos <p sw-ani="split words" sw-ani-stagger="0.1" class="t-g fw6 m-0">Quase juntos</p>

Um de cada vez

sw-ani-stagger="0.9" — um de cada vez <p sw-ani="split words" sw-ani-stagger="0.9" class="t-g fw6 m-0">Um de cada vez</p>

Bem devagar

sw-ani-dur="2" — dura 2 segundos <p sw-ani="split words" sw-ani-dur="2" class="t-g fw6 m-0">Bem devagar</p>

4. Type — máquina de escrever

O texto vai sendo digitado, com um cursor piscando no fim. Role para fora e volte para ver de novo.

Seu pedido está a caminho.

type — normal <p sw-ani="type" class="t-g fw6 m-0">Seu pedido está a caminho.</p>

Seu pedido está a caminho.

type fast — começa rápido e desacelera <p sw-ani="type fast" class="t-g fw6 m-0">Seu pedido está a caminho.</p>

Seu pedido está a caminho.

type slow — começa devagar e acelera <p sw-ani="type slow" class="t-g fw6 m-0">Seu pedido está a caminho.</p>

Seu pedido está a caminho.

type pause — digita, espera, apaga <p sw-ani="type pause" class="t-g fw6 m-0">Seu pedido está a caminho.</p>

Seu pedido está a caminho.

type loop — digita, apaga e repete sem parar <p sw-ani="type loop" class="t-g fw6 m-0">Seu pedido está a caminho.</p>

Seu pedido está a caminho.

type one — só a primeira vez <p sw-ani="type one" class="t-g fw6 m-0">Seu pedido está a caminho.</p>

Seu pedido está a caminho.

sw-ani-cursor="▌" — cursor de bloco <p sw-ani="type" sw-ani-cursor="▌" class="t-g fw6 m-0">Seu pedido está a caminho.</p>

Seu pedido está a caminho.

sw-ani-cursor="" — sem cursor <p sw-ani="type" sw-ani-cursor="" class="t-g fw6 m-0">Seu pedido está a caminho.</p>

5. Scramble — embaralha até formar

Letras aleatórias vão virando o texto certo, da esquerda para a direita.

PEDIDO CONFIRMADO

scramble — letras e números <p sw-ani="scramble" class="t-g fw6 m-0">PEDIDO CONFIRMADO</p>

PEDIDO CONFIRMADO

sw-ani-chars="01" — modo binário <p sw-ani="scramble" sw-ani-chars="01" class="t-g fw6 m-0">PEDIDO CONFIRMADO</p>

PEDIDO CONFIRMADO

sw-ani-chars="░▒▓█" — blocos <p sw-ani="scramble" sw-ani-chars="░▒▓█" class="t-g fw6 m-0">PEDIDO CONFIRMADO</p>

PEDIDO CONFIRMADO

sw-ani-speed="120" — mais nervoso (padrão 30) <p sw-ani="scramble" sw-ani-speed="120" class="t-g fw6 m-0">PEDIDO CONFIRMADO</p>

PEDIDO CONFIRMADO

scramble loop — repete sem parar <p sw-ani="scramble loop" class="t-g fw6 m-0">PEDIDO CONFIRMADO</p>

PEDIDO CONFIRMADO

scramble one — só a primeira vez <p sw-ani="scramble one" class="t-g fw6 m-0">PEDIDO CONFIRMADO</p>

6. Sweep — a frase acende palavra por palavra

A frase começa apagada e acende enquanto a pessoa lê. Ao rolar de volta para cima, apaga de novo (a menos que tenha one).

A gente acredita que todo pequeno negócio merece um site bonito, rápido e fácil de achar.

sweep — padrão <p sw-ani="sweep" class="t-g fw6 m-0">A gente acredita que todo pequeno negócio merece um site bonito, rápido e fácil de achar.</p>

A gente acredita que todo pequeno negócio merece um site bonito, rápido e fácil de achar.

sw-ani-keywords + cor de destaque (--sw-sweep-key)
<style>
  .frase-destaque { --sw-sweep-key: var(--sw-pri); }
</style>
<p sw-ani="sweep" sw-ani-keywords="bonito|fácil de achar" class="frase-destaque">
  A gente acredita que todo pequeno negócio merece um site bonito, rápido e fácil de achar.
</p>

Cada palavra acende no seu tempo, e fica acesa.

sw-ani-step="150" — mais devagar (ms por palavra; padrão 45) · one — não apaga <p sw-ani="sweep one" sw-ani-step="150" class="t-g fw6 m-0">Cada palavra acende no seu tempo, e fica acesa.</p>

7. Marquee — faixa que corre sem parar

Coloque o texto dentro de um elemento (um <span>) e termine com um separador e um espaço, para as repetições não grudarem. Para quando o mouse passa por cima.

Sites · Lojas virtuais · Agendamento online · Cardápio digital · 
marquee — para a esquerda, 60 px por segundo
<div sw-ani="marquee" class="t-g fw6">
  <span>Sites · Lojas virtuais · Agendamento online · Cardápio digital ·&nbsp;</span>
</div>
Frete grátis acima de R$ 199 · Parcele em 10x · 
sw-ani-dir="right" + sw-ani-speed="140" — para a direita, mais rápido
<div sw-ani="marquee" sw-ani-dir="right" sw-ani-speed="140" class="t-g fw6 t-pri">
  <span>Frete grátis acima de R$ 199 · Parcele em 10x ·&nbsp;</span>
</div>
Role a página e veja esta faixa andar · 
marquee scrub — só anda quando você rola a página <div sw-ani="marquee scrub" class="t-g fw6"><span>Role a página e veja esta faixa andar ·&nbsp;</span></div>

8. Whole — o texto inteiro de uma vez

Em vez de pedaços, o bloco inteiro entra. Por padrão ele acompanha a posição na tela: vai se completando conforme você rola até ele.

Oferta de hoje

sw-ani-effect="mask-up" — sobe de trás de uma máscara (padrão) <p sw-ani="whole" sw-ani-effect="mask-up" class="t-g fw6 m-0">Oferta de hoje</p>

Oferta de hoje

sw-ani-effect="perspective" — deita e levanta em perspectiva <p sw-ani="whole" sw-ani-effect="perspective" class="t-g fw6 m-0">Oferta de hoje</p>

Oferta de hoje

sw-ani-effect="tracking" — letras se aproximam <p sw-ani="whole" sw-ani-effect="tracking" class="t-g fw6 m-0">Oferta de hoje</p>

Oferta de hoje

sw-ani-effect="stroke" — contorno que vai se preenchendo <p sw-ani="whole" sw-ani-effect="stroke" class="t-g fw6 m-0">Oferta de hoje</p>

9. Whole — texto que acende (brilho)

Estes pintam o texto com a própria cor do brilho — ficam melhores sobre fundo escuro, como nestes quadros.

ABERTO 24H

sw-ani-effect="glow" — acende em azul (qualquer nome fora da lista também cai aqui) <div class="bg-g-drk p-m r-m"> <p sw-ani="whole" sw-ani-effect="glow">ABERTO 24H</p> </div>

ABERTO 24H

sw-ani-effect="glow-pink" — acende em rosa <div class="bg-g-drk p-m r-m"> <p sw-ani="whole" sw-ani-effect="glow-pink">ABERTO 24H</p> </div>

ABERTO 24H

sw-ani-effect="glow-white" — acende em branco <div class="bg-g-drk p-m r-m"> <p sw-ani="whole" sw-ani-effect="glow-white">ABERTO 24H</p> </div>

10. Só CSS (não precisam do pacote de animação)

Efeitos de texto que vêm no arquivo principal do SW Core.

Black Friday
gradient loop text — degradê andando dentro das letras <strong sw-ani="gradient loop text" class="t-xg">Black Friday</strong>
Promoção
--sw-ani-grad — degradê com as suas cores <style> .grad-laranja { --sw-ani-grad: linear-gradient(90deg, #f59e0b, #ef4444, #ec4899, #ef4444, #f59e0b); } </style> <strong sw-ani="gradient loop text" class="grad-laranja">Promoção</strong>
underline hover — sublinhado que cresce <a href="/loja" sw-ani="underline hover">Conheça a loja</a>
OLÁ!!
sw-text-wave — letras em onda <style> /* --i = a posição de cada letra (0, 1, 2…) — dá o atraso da onda */ .onda span:nth-child(2) { --i: 1; } .onda span:nth-child(3) { --i: 2; } .onda span:nth-child(4) { --i: 3; } .onda span:nth-child(5) { --i: 4; } </style> <div sw-text-wave class="onda"> <span>O</span><span>L</span><span>Á</span><span>!</span><span>!</span> </div>
SISTEMA ONLINE
sw-glitch — texto com falha (repita o texto em data-txt) <div sw-glitch data-txt="SISTEMA ONLINE" class="t-xg fw7">SISTEMA ONLINE</div>
Inauguração
sw-curtain — uma faixa passa e revela o texto (ao aparecer na tela) <span sw-curtain class="t-xg fw7"><span>Inauguração</span></span>

Tabela de opções

PalavraO que fazExemplo
Efeitos (em sw-ani)
splitDivide e anima em pedaços. Pacote de animação.sw-ani="split"
words · linesCom split: pedaço = palavra ou linha (linhas separadas por <br>). Sem nada = letra.sw-ani="split words"
typeMáquina de escrever. Pacote de animação.sw-ani="type"
fast · slow · pauseCom type: ritmo da digitação (pause digita, espera e apaga).sw-ani="type fast"
scrambleEmbaralha até formar. Pacote de animação.sw-ani="scramble"
sweepAcende palavra por palavra. Pacote de animação.sw-ani="sweep"
marqueeFaixa que corre sem parar. Pacote de animação.sw-ani="marquee"
wholeO bloco inteiro entra de uma vez. Pacote de animação.sw-ani="whole"
gradient loop textDegradê andando dentro das letras. Só CSS.sw-ani="gradient loop text"
underline hoverSublinhado que cresce com o mouse. Só CSS.sw-ani="underline hover"
Jeito de entrar do split (uma palavra junto)
fade-upsobe aparecendo (padrão)sw-ani="split words fade-up"
fade-downdesce aparecendosw-ani="split words fade-down"
fade-leftvem da direitasw-ani="split words fade-left"
fade-rightvem da esquerdasw-ani="split words fade-right"
blur-insai do desfoque (apelido: blur)sw-ani="split words blur-in"
blur-upsobe saindo do desfoquesw-ani="split words blur-up"
zoom-incresce com um pulinhosw-ani="split words zoom-in"
zoom-outencolhe de grandesw-ani="split words zoom-out"
zoom-blurcresce saindo do desfoquesw-ani="split words zoom-blur"
rotate-ingira para um lado (apelido: rotate)sw-ani="split words rotate-in"
rotate-cwgira para o outro ladosw-ani="split words rotate-cw"
elastic-upsobe com elástico (apelido: elastic)sw-ani="split words elastic-up"
dropcai de cimasw-ani="split words drop"
bounce-incresce quicando (apelido: bounce)sw-ani="split words bounce-in"
flip-upvira em 3D para cimasw-ani="split words flip-up"
flip-downvira em 3D para baixosw-ani="split words flip-down"
flip-leftvira em 3D para a esquerdasw-ani="split words flip-left"
flip-rightvira em 3D para a direitasw-ani="split words flip-right"
skew-leftentra inclinado da esquerdasw-ani="split words skew-left"
skew-rightentra inclinado da direitasw-ani="split words skew-right"
waveonda passando pelas palavrassw-ani="split words wave"
pulsepulsa em sequênciasw-ani="split words pulse"
Quando (split, type e scramble)
(nada)Toda vez que o texto aparece na tela.sw-ani="split"
oneSó na primeira vez.sw-ani="split one"
loopRepete enquanto está na tela.sw-ani="type loop"
scrubAcompanha a barra de rolagem.sw-ani="split scrub"
Ajustes
sw-ani-staggerSplit: intervalo entre os pedaços, de 0 (juntos) a 0,95 (um de cada vez).sw-ani-stagger="0.3"
sw-ani-durSplit/type/scramble (fora do scrub): duração em segundos. Padrão 0,9 (1,4 no loop).sw-ani-dur="1.5"
sw-ani-delaySplit/type/scramble (fora do scrub): espera em segundos antes de começar (0 a 10). No loop, só a primeira vez espera.sw-ani-delay="0.6"
sw-ani-cursorType: o caractere do cursor. Padrão |; vazio ("") tira o cursor.sw-ani-cursor="▌"
sw-ani-charsScramble: as letras usadas no embaralhamento.sw-ani-chars="01"
sw-ani-speedScramble: quão nervoso (1 a 200, padrão 30). Marquee: pixels por segundo (5 a 500, padrão 60); com scrub, quanto anda por rolagem.sw-ani-speed="120"
sw-ani-dirMarquee: right corre para a direita (padrão: esquerda).sw-ani-dir="right"
sw-ani-keywordsSweep: trechos que acendem com a cor de destaque, separados por |.sw-ani-keywords="rápido|barato"
--sw-sweep-keySweep: variável CSS com a cor dos trechos de destaque. Sem ela, eles acendem na cor primária do tema..frase { --sw-sweep-key: var(--sw-pri); }
sw-ani-stepSweep: milissegundos entre uma palavra e a próxima (padrão 45).sw-ani-step="100"
one (no sweep)Sweep: depois de acesa, não apaga ao rolar de volta.sw-ani="sweep one"
sw-ani-effectWhole: mask-up (padrão) · perspective · tracking · stroke · glow · glow-pink · glow-white.sw-ani-effect="perspective"
sw-ani-playWhole: auto anima sozinho ao aparecer (em vez de acompanhar a rolagem) · once só 1 vez · loop.sw-ani-play="auto"
Só CSS
--sw-ani-gradCores do gradient. Repita a primeira cor no fim para a volta não dar salto..t { --sw-ani-grad: linear-gradient(90deg,#f00,#00f,#f00); }
sw-text-waveLetras em onda. Cada letra num <span> com a variável --i = posição (0, 1, 2…).<div sw-text-wave><span>O</span>…</div>
sw-glitch + data-txtTexto com falha. data-txt tem que repetir o mesmo texto.<div sw-glitch data-txt="ONLINE">ONLINE</div>
sw-curtainFaixa que passa e revela o texto quando ele aparece na tela. O texto vai num <span> interno.<span sw-curtain><span>Texto</span></span>

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Topo de página com título palavra por palavra Ao vivo

Doces que viram lembrança

Encomendas para aniversários, casamentos e empresas.

Fazer encomenda
<section class="t-ct">
  <h1 sw-ani="split words blur-up one">Doces que viram lembrança</h1>
  <p sw-ani="fade-up one delay-5">Encomendas para aniversários, casamentos e empresas.</p>
  <a href="/encomenda" sw-btn="pri pill">Fazer encomenda</a>
</section>
Faixa de marcas/serviços entre duas seções Ao vivo
★ Entrega rápida ★ Pagamento no Pix ★ Atendimento humano ★ Garantia de 1 ano 
<div sw-ani="marquee" class="bg-g-pri p-m">
  <span>★ Entrega rápida ★ Pagamento no Pix ★ Atendimento humano ★ Garantia de 1 ano&nbsp;</span>
</div>
Manifesto da empresa que acende enquanto a pessoa lê Ao vivo

Somos gente de verdade atendendo gente de verdade, sem enrolação e sem letra miúda.

<style>
  .manifesto { --sw-sweep-key: var(--sw-pri); }
</style>
<p sw-ani="sweep" sw-ani-keywords="gente de verdade|sem enrolação" class="manifesto">
  Somos gente de verdade atendendo gente de verdade, sem enrolação e sem letra miúda.
</p>
Status de sistema com cara de tecnologia Ao vivo

SERVIDOR ONLINE · verificando pagamentos…

<p class="t-g"><span sw-ani="scramble loop" sw-ani-chars="01">SERVIDOR ONLINE</span> · <span sw-ani="type loop">verificando pagamentos…</span></p>

API (JavaScript)

SWMotion.refresh()
Recalcula os efeitos presos à rolagem depois de você mudar a página por JavaScript.

Precisa de quê

  • swcore.motion.min.css + swcore.motion.min.js (antes do swcore.min.js) — para split, type, scramble, sweep, marquee e whole.
  • Só o swcore.min.css — para gradient loop text, underline hover, sw-text-wave e sw-glitch. O sw-curtain também precisa do swcore.min.js (é ele que percebe quando o texto aparece).

Cuidados — erros comuns

  • split, type e scramble trocam o conteúdo do elemento: negrito, links e ícones lá dentro viram texto simples. Coloque o efeito num elemento só com texto.
  • No type, o cursor e as letras aparecem no lugar: dê ao elemento uma altura/linha fixa se ele fica no meio de outros blocos, para a página não "pular".
  • No marquee, só o primeiro elemento de dentro é repetido. Texto solto sem <span> não funciona.
  • Texto muito longo com split letra a letra fica lento e cansativo: use words ou lines em parágrafos.

O que ele não faz

  • Quem ativou "reduzir movimento" no aparelho vê o texto pronto, sem animação.
  • O sw-text-wave precisa de uma letra por <span> escrita à mão.