SW Core
SW Core / Animações / Mini-componentes animados

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. 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. 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.

Quanto custa?
A partir de R$ 990
Frente e verso com texto <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>
 Presente surpresa
Frente com ícone, verso com botão <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%.

Sem --sw-bar-to — enche até 70% <div sw-bar-fill class="w-fl"><span></span></div>
--sw-bar-to: .25 — um quarto <style>.barra-25 { --sw-bar-to: .25; }</style> <div sw-bar-fill class="barra-25 w-fl"><span></span></div>
--sw-bar-to: 1 — cheia <style>.barra-100 { --sw-bar-to: 1; }</style> <div sw-bar-fill class="barra-100 w-fl"><span></span></div>
Várias barras em sequência (--i = ordem) <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.

Onda (path) <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>
Círculo (circle) <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>
Visto de "feito" (polyline) <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>
Duas linhas em sequência (--i no segundo traço) <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

PalavraO que fazExemplo
Cartão que vira
sw-flip-cardO cartão. Precisa de largura e altura (por classe sua).<div sw-flip-card class="cartao">
sw-flip-card-facesO miolo que gira. Fica entre o cartão e as faces.<div sw-flip-card-faces>
sw-flip-card-faceA 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-fillA barra. Dentro dela, um <span> vazio (é ele que enche).<div sw-bar-fill><span></span></div>
--sw-bar-toVariável CSS: até onde enche, de 0 a 1. Padrão .7..meta { --sw-bar-to: .75; }
--iVariá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-drawNo <svg>: desenha os path, circle, polyline e line de dentro.<svg sw-draw>
--sw-draw-lenVariá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; }
--iVariá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.

Equipe: foto na frente, contato no verso Ao vivo
Dra. Ana Lima
Dentista
Dr. Bruno Reis
Ortodontista
<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>
Números da empresa com barras Ao vivo
Clientes satisfeitos98%
Entregas no prazo92%
Voltam a comprar85%
<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>
Palavra sublinhada à mão Ao vivo

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)
Faz uma barra ou traço esperar a tela de novo e animar outra vez.

Precisa de quê

  • swcore.min.css e swcore.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-len menor 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 stroke do seu SVG. Com stroke="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.