Mini-componentes animados Animações
Três peças prontas com animação própria: o cartão que vira ao passar o mouse, a barra que se enche quando aparece e o desenho que se traça sozinho.
O que é
São efeitos pequenos que precisam de uma estrutura de HTML própria (não é só colocar sw-ani num elemento). O cartão que vira mostra a frente e, ao passar o mouse, o verso — bom para "antes e depois", perguntas e respostas, equipe (foto na frente, contato no verso). A barra que se enche mostra porcentagens de forma animada (habilidades, metas, avaliações). O traço que se desenha anima um desenho em SVG (assinatura, seta, ícone de linha) como se fosse feito à mão.
Tudo é CSS do arquivo principal. O cartão vira com o :hover. A barra e o traço esperam aparecer na tela: o SW Core percebe e liga a animação (uma vez só). O quanto a barra enche é a variável --sw-bar-to (0 a 1); o tamanho do traço é --sw-draw-len. Não precisa do pacote de animação.
Quando usar
- Cartão que vira: conteúdo curto com "segunda face" — preço no verso, contato do profissional, resposta de uma pergunta.
- Barra que se enche: números que ficam mais interessantes animados — "Satisfação 98%", "Meta do mês 75%". Para barra de progresso de verdade (upload, etapas), use o componente Progress.
- Traço que se desenha: detalhes decorativos em linha — sublinhado desenhado à mão, seta apontando para o botão, assinatura.
Comece aqui
-
1
Coloque o SW Core na página (CSS no
<head>, JS no fim do<body>). O JS é o que percebe quando a barra e o traço aparecem.<link rel="stylesheet" href="swcore/swcore.min.css"> <!-- fim do <body> --> <script src="swcore/swcore.min.js"></script> -
2
Copie a estrutura da peça que quiser. Por exemplo, a barra que enche até 75% quando aparece:
<style> .meta-75 { --sw-bar-to: .75; } /* 0 = vazia, 1 = cheia */ </style> <div sw-bar-fill class="meta-75"><span></span></div>
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. Cartão que vira (passe o mouse)
Três camadas: o cartão (sw-flip-card), o miolo que gira (sw-flip-card-faces) e as duas faces (sw-flip-card-face e sw-flip-card-face="back"). O cartão precisa de largura e altura — aqui vêm da classe cartao-giro.
<style>
.cartao-giro { width: 20rem; height: 12rem; }
</style>
<div sw-flip-card class="cartao-giro">
<div sw-flip-card-faces>
<div sw-flip-card-face>Quanto custa?</div>
<div sw-flip-card-face="back">A partir de R$ 990</div>
</div>
</div>
<div sw-flip-card class="cartao-giro">
<div sw-flip-card-faces>
<div sw-flip-card-face><i class="swi-gift"></i> Presente surpresa</div>
<div sw-flip-card-face="back"><a href="/cestas" sw-btn="lit p">Ver cestas</a></div>
</div>
</div>
2. Barra que se enche (ao aparecer na tela)
O quanto ela enche vem da variável --sw-bar-to: 0 (vazia) até 1 (cheia). Sem ela, enche até 70%.
<div sw-bar-fill class="w-fl"><span></span></div>
<style>.barra-25 { --sw-bar-to: .25; }</style>
<div sw-bar-fill class="barra-25 w-fl"><span></span></div>
<style>.barra-100 { --sw-bar-to: 1; }</style>
<div sw-bar-fill class="barra-100 w-fl"><span></span></div>
<style>
.hab-1 { --sw-bar-to: .9; }
.hab-2 { --sw-bar-to: .7; --i: 1; } /* --i atrasa 0,16 s por número */
.hab-3 { --sw-bar-to: .5; --i: 2; }
</style>
<div sw-bar-fill class="hab-1"><span></span></div>
<div sw-bar-fill class="hab-2"><span></span></div>
<div sw-bar-fill class="hab-3"><span></span></div>
3. Traço que se desenha (ao aparecer na tela)
Um SVG com sw-draw. --sw-draw-len tem que ser maior ou igual ao comprimento da linha (padrão 300). Vale para path, circle, polyline e line.
<svg sw-draw viewBox="0 0 100 40" width="160" height="64" aria-hidden="true">
<path d="M4 20 Q 25 2, 48 20 T 96 20" fill="none" stroke="currentColor" stroke-width="3"/>
</svg>
<svg sw-draw viewBox="0 0 100 100" width="90" height="90" aria-hidden="true">
<circle cx="50" cy="50" r="40" fill="none" stroke="currentColor" stroke-width="4"/>
</svg>
<svg sw-draw viewBox="0 0 100 80" width="100" height="80" aria-hidden="true">
<polyline points="10,45 38,70 90,12" fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<style>.traco-2 { --i: 1; } /* atrasa 0,22 s por número */</style>
<svg sw-draw viewBox="0 0 120 60" width="150" height="75" aria-hidden="true">
<line x1="10" y1="20" x2="110" y2="20" stroke="currentColor" stroke-width="4"/>
<line class="traco-2" x1="10" y1="40" x2="110" y2="40" stroke="currentColor" stroke-width="4"/>
</svg>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Cartão que vira | ||
sw-flip-card | O cartão. Precisa de largura e altura (por classe sua). | <div sw-flip-card class="cartao"> |
sw-flip-card-faces | O miolo que gira. Fica entre o cartão e as faces. | <div sw-flip-card-faces> |
sw-flip-card-face | A frente. | <div sw-flip-card-face> |
sw-flip-card-face="back" | O verso (fundo invertido: escuro no claro, claro no escuro). | <div sw-flip-card-face="back"> |
| Barra que se enche | ||
sw-bar-fill | A barra. Dentro dela, um <span> vazio (é ele que enche). | <div sw-bar-fill><span></span></div> |
--sw-bar-to | Variável CSS: até onde enche, de 0 a 1. Padrão .7. | .meta { --sw-bar-to: .75; } |
--i | Variável CSS: ordem, para várias barras encherem uma depois da outra (0,16 s por número). | .b2 { --i: 1; } |
| Traço que se desenha | ||
sw-draw | No <svg>: desenha os path, circle, polyline e line de dentro. | <svg sw-draw> |
--sw-draw-len | Variável CSS: comprimento do traço. Padrão 300. Tem que ser igual ou maior que o comprimento real da linha. | svg.assinatura { --sw-draw-len: 900; } |
--i | Variável CSS no traço: ordem, para desenhar um depois do outro (0,22 s por número). | path.segundo { --i: 1; } |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
<style>
.cartao-equipe { width: 22rem; height: 16rem; }
</style>
<div sw-flip-card class="cartao-equipe">
<div sw-flip-card-faces>
<div sw-flip-card-face><strong>Dra. Ana Lima</strong><br>Dentista</div>
<div sw-flip-card-face="back"><a href="/agendar?dra=ana" sw-btn="lit p"><i class="swi-calendar"></i> Agendar</a></div>
</div>
</div>
<style>
.n-satisf { --sw-bar-to: .98; }
.n-prazo { --sw-bar-to: .92; --i: 1; }
.n-indica { --sw-bar-to: .85; --i: 2; }
</style>
<div class="flx f-cl gap-4">
<div>
<div class="flx j-sb"><span>Clientes satisfeitos</span><strong>98%</strong></div>
<div sw-bar-fill class="n-satisf"><span></span></div>
</div>
<div>
<div class="flx j-sb"><span>Entregas no prazo</span><strong>92%</strong></div>
<div sw-bar-fill class="n-prazo"><span></span></div>
</div>
<div>
<div class="flx j-sb"><span>Voltam a comprar</span><strong>85%</strong></div>
<div sw-bar-fill class="n-indica"><span></span></div>
</div>
</div>
Feito com carinho
<h2>Feito com <span class="t-pri">carinho</span></h2>
<svg sw-draw viewBox="0 0 200 20" width="200" height="20" class="t-pri" aria-hidden="true">
<path d="M2 14 C 50 2, 120 22, 198 6" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
</svg>
API (JavaScript)
SW.Anime.replay(elemento)Precisa de quê
swcore.min.csseswcore.min.js. Não precisa do pacote de animação.
Cuidados — erros comuns
- Cartão que vira sem largura e altura fica com tamanho zero (as faces são sobrepostas e não empurram o cartão). Dê tamanho por uma classe sua.
- O cartão vira só com o mouse (
:hover). No celular, o toque costuma virar, mas nem sempre desvira — não esconda informação importante só no verso. - Na barra, esquecer o
<span></span>de dentro deixa só o trilho, sem a parte que enche. --sw-draw-lenmenor que a linha faz o desenho aparecer tracejado. Na dúvida, use um número bem maior (ex.: 1000).- O traço usa a cor do
strokedo seu SVG. Comstroke="currentColor"ele segue a cor do texto (e troca sozinho com o tema).
O que ele não faz
- Barra e traço animam uma vez só (quando aparecem). Para repetir, use
SW.Anime.replay(elemento). - Quem ativou "reduzir movimento" vê a barra já cheia e o traço já desenhado.

