SW Core
SW Core / CSS / Stepper

Stepper CSS

Mostra em que etapa a pessoa está: "Carrinho → Entrega → Pagamento → Pronto" — deitado ou em pé, com as etapas feitas marcadas com ✓.

O que é

É a barrinha de etapas que aparece no checkout de loja, no cadastro em várias telas ou no agendamento ("1. Serviço · 2. Horário · 3. Seus dados"). Ela responde à pergunta "quanto falta?". Você coloca sw-stp na caixa de fora e um bloco class="sw-stp-it" para cada etapa, com o número (sw-stp-num) e o nome (sw-stp-lbl). Cada etapa pode estar feita (is-dn, verde com ✓), atual (is-act, na cor primária) ou a fazer (sem classe, cinza).

É só CSS — não precisa de JavaScript. As linhas que ligam uma etapa à outra são desenhadas sozinhas, e ficam verdes depois de uma etapa feita. O ✓ da etapa feita também vem sozinho: deixe o número vazio nela. Quem troca as classes quando a pessoa avança é o seu código (ou a página seguinte já vem com a etapa certa marcada).

Quando usar

  • Checkout de loja: Carrinho → Entrega → Pagamento → Confirmação.
  • Cadastro ou orçamento longo dividido em telas: mostra que falta pouco e a pessoa não desiste.
  • Agendamento (serviço, dia, horário, dados): em pé (sw-stp="v") numa coluna ao lado do formulário.
  • Andamento de um processo no painel (proposta enviada, aprovada, em produção), com uma linha de texto embaixo de cada etapa: em pé.
  • Para uma lista de acontecimentos com data e hora (rastreio, histórico), use a Timeline.

Comece aqui

  1. 1

    Coloque o SW Core no <head> da página (uma vez só). O stepper só precisa do CSS principal.

    <link rel="stylesheet" href="swcore/swcore.min.css">
  2. 2

    Escreva uma etapa por bloco. A feita leva is-dn (com o número vazio), a atual leva is-act, as outras ficam sem classe.

    Carrinho
    2Pagamento
    3Pronto
    <div sw-stp>
      <div class="sw-stp-it is-dn"><span class="sw-stp-num"></span><span class="sw-stp-lbl">Carrinho</span></div>
      <div class="sw-stp-it is-act"><span class="sw-stp-num">2</span><span class="sw-stp-lbl">Pagamento</span></div>
      <div class="sw-stp-it"><span class="sw-stp-num">3</span><span class="sw-stp-lbl">Pronto</span></div>
    </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. Estados de cada etapa

A classe vai no bloco da etapa (sw-stp-it).

Carrinho
is-dn — feita (✓ verde; número vazio) <div class="sw-stp-it is-dn"> <span class="sw-stp-num"></span> <span class="sw-stp-lbl">Carrinho</span> </div>
2Pagamento
is-act — atual (cor primária) <div class="sw-stp-it is-act"> <span class="sw-stp-num">2</span> <span class="sw-stp-lbl">Pagamento</span> </div>
3Confirmação
Sem classe — a fazer (cinza) <div class="sw-stp-it"> <span class="sw-stp-num">3</span> <span class="sw-stp-lbl">Confirmação</span> </div>

2. Deitado (padrão)

As etapas dividem a largura em partes iguais, com o nome embaixo do número. Bom para 3 a 5 etapas com nomes curtos.

1Carrinho
2Entrega
3Pagamento
4Confirmação
Checkout — no começo
<div sw-stp>
  <div class="sw-stp-it is-act"><span class="sw-stp-num">1</span><span class="sw-stp-lbl">Carrinho</span></div>
  <div class="sw-stp-it"><span class="sw-stp-num">2</span><span class="sw-stp-lbl">Entrega</span></div>
  <div class="sw-stp-it"><span class="sw-stp-num">3</span><span class="sw-stp-lbl">Pagamento</span></div>
  <div class="sw-stp-it"><span class="sw-stp-num">4</span><span class="sw-stp-lbl">Confirmação</span></div>
</div>
Carrinho
Entrega
3Pagamento
4Confirmação
Checkout — na terceira etapa
<div sw-stp>
  <div class="sw-stp-it is-dn"><span class="sw-stp-num"></span><span class="sw-stp-lbl">Carrinho</span></div>
  <div class="sw-stp-it is-dn"><span class="sw-stp-num"></span><span class="sw-stp-lbl">Entrega</span></div>
  <div class="sw-stp-it is-act"><span class="sw-stp-num">3</span><span class="sw-stp-lbl">Pagamento</span></div>
  <div class="sw-stp-it"><span class="sw-stp-num">4</span><span class="sw-stp-lbl">Confirmação</span></div>
</div>
Carrinho
Entrega
Pagamento
Confirmação
Checkout — tudo feito
<div sw-stp>
  <div class="sw-stp-it is-dn"><span class="sw-stp-num"></span><span class="sw-stp-lbl">Carrinho</span></div>
  <div class="sw-stp-it is-dn"><span class="sw-stp-num"></span><span class="sw-stp-lbl">Entrega</span></div>
  <div class="sw-stp-it is-dn"><span class="sw-stp-num"></span><span class="sw-stp-lbl">Pagamento</span></div>
  <div class="sw-stp-it is-dn"><span class="sw-stp-num"></span><span class="sw-stp-lbl">Confirmação</span></div>
</div>

3. Em pé (v)

Com sw-stp="v" as etapas ficam uma embaixo da outra, com o nome ao lado do número — cabe uma linha de explicação em cada uma. Para isso, junte o nome e o texto numa <div>.

Escolher serviço
2Escolher horário
3Seus dados
v — só com o nome
<div sw-stp="v">
  <div class="sw-stp-it is-dn"><span class="sw-stp-num"></span><span class="sw-stp-lbl">Escolher serviço</span></div>
  <div class="sw-stp-it is-act"><span class="sw-stp-num">2</span><span class="sw-stp-lbl">Escolher horário</span></div>
  <div class="sw-stp-it"><span class="sw-stp-num">3</span><span class="sw-stp-lbl">Seus dados</span></div>
</div>
Proposta enviada
14/03, 09:20
2
Aguardando aprovação
O cliente ainda não respondeu
3
Em produção
v — com uma linha de explicação
<div sw-stp="v">
  <div class="sw-stp-it is-dn">
    <span class="sw-stp-num"></span>
    <div>
      <div class="sw-stp-lbl">Proposta enviada</div>
      <small>14/03, 09:20</small>
    </div>
  </div>
  <div class="sw-stp-it is-act">
    <span class="sw-stp-num">2</span>
    <div>
      <div class="sw-stp-lbl">Aguardando aprovação</div>
      <small>O cliente ainda não respondeu</small>
    </div>
  </div>
  <div class="sw-stp-it">
    <span class="sw-stp-num">3</span>
    <div><div class="sw-stp-lbl">Em produção</div></div>
  </div>
</div>

Tabela de opções

PalavraO que fazExemplo
Caixa de fora
sw-stpLiga o stepper. Sem valor: deitado, etapas dividindo a largura.<div sw-stp>
vEm pé: uma etapa embaixo da outra, nome ao lado do número.<div sw-stp="v">
Peças (classes)
sw-stp-itUma etapa. Dentro dela vão o número e o nome.<div class="sw-stp-it">
sw-stp-numO círculo com o número. Na etapa feita, deixe vazio: o ✓ vem sozinho.<span class="sw-stp-num">2</span>
sw-stp-lblO nome da etapa.<span class="sw-stp-lbl">Pagamento</span>
Estado (classe junto de sw-stp-it)
(nenhum)A fazer: círculo cinza vazado.class="sw-stp-it"
is-actEtapa atual: círculo na cor primária, nome em destaque.class="sw-stp-it is-act"
is-dnFeita: círculo verde com ✓ e linha verde até a próxima.class="sw-stp-it is-dn"

Receitas prontas — usos reais

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

Topo do checkout da loja Ao vivo
Carrinho
2Entrega
3Pagamento
<!-- na página "Entrega": Carrinho feito, Entrega atual -->
<div sw-stp>
  <div class="sw-stp-it is-dn"><span class="sw-stp-num"></span><span class="sw-stp-lbl">Carrinho</span></div>
  <div class="sw-stp-it is-act"><span class="sw-stp-num">2</span><span class="sw-stp-lbl">Entrega</span></div>
  <div class="sw-stp-it"><span class="sw-stp-num">3</span><span class="sw-stp-lbl">Pagamento</span></div>
</div>
Formulário em etapas: avançar muda o stepper Ao vivo
1Seus dados
2Endereço
3Revisão
<div sw-stp id="etapas">
  <div class="sw-stp-it is-act"><span class="sw-stp-num">1</span><span class="sw-stp-lbl">Seus dados</span></div>
  <div class="sw-stp-it"><span class="sw-stp-num">2</span><span class="sw-stp-lbl">Endereço</span></div>
  <div class="sw-stp-it"><span class="sw-stp-num">3</span><span class="sw-stp-lbl">Revisão</span></div>
</div>
<button sw-btn="pri" id="avancar">Avançar</button>

<script>
  document.getElementById('avancar').addEventListener('click', () => {
    const etapas = [...document.querySelectorAll('#etapas .sw-stp-it')];
    const i = etapas.findIndex((e) => e.classList.contains('is-act'));
    if (i < 0) return;
    etapas[i].classList.replace('is-act', 'is-dn');          // atual vira feita
    etapas[i].querySelector('.sw-stp-num').textContent = ''; // número some, entra o ✓
    etapas[i + 1]?.classList.add('is-act');                  // próxima vira atual
  });
</script>
Agendamento: etapas em pé ao lado do formulário Ao vivo
Serviço
Corte + barba
2
Dia e horário
3
Seus dados
<div class="l l-2">
  <div sw-stp="v">
    <div class="sw-stp-it is-dn">
      <span class="sw-stp-num"></span>
      <div><div class="sw-stp-lbl">Serviço</div><small>Corte + barba</small></div>
    </div>
    <div class="sw-stp-it is-act">
      <span class="sw-stp-num">2</span>
      <div><div class="sw-stp-lbl">Dia e horário</div></div>
    </div>
    <div class="sw-stp-it">
      <span class="sw-stp-num">3</span>
      <div><div class="sw-stp-lbl">Seus dados</div></div>
    </div>
  </div>
  <div sw-fld>
    <label for="dia">Escolha o dia</label>
    <input sw-inp id="dia" type="date">
  </div>
</div>

Precisa de quê

  • swcore.min.css — o stepper.

Cuidados — erros comuns

  • Na etapa feita (is-dn) deixe <span class="sw-stp-num"></span> vazio. Se escrever o número ou um ✓ lá dentro, aparece "✓1" ou "✓✓".
  • Só uma etapa deve ter is-act de cada vez.
  • No stepper deitado, nomes longos quebram em duas linhas e ficam apertados no celular. Use nomes de uma ou duas palavras, ou use o em pé (v).
  • No em pé com explicação, o nome e o texto precisam estar juntos numa <div>; soltos, eles ficam lado a lado com o número.

O que ele não faz

  • Não avança sozinho nem controla o formulário: trocar is-act / is-dn é tarefa do seu código ou da página.
  • Não tem estado de erro (etapa vermelha) nem outras cores: feita é verde, atual é a cor primária.
  • As etapas não são clicáveis por padrão. Se quiser voltar para uma etapa feita, coloque um link <a> no nome.