SW Core
SW Core / CSS / Carrossel de arrastar (sw-trilho)

Carrossel de arrastar (sw-trilho) CSS

Uma fileira de cartões que a pessoa arrasta para o lado com o dedo, e cada um encaixa no lugar. Sem biblioteca de slider, sem JavaScript.

O que é

Serve para mostrar muita coisa num espaço pequeno: depoimentos, produtos, serviços, planos, fotos. Tudo que você colocar dentro de <div sw-trilho> vira um item da fileira. No celular a pessoa arrasta com o dedo; no computador, rola para o lado com o trackpad ou com Shift + rodinha do mouse. Quando solta, o item encaixa certinho.

É só CSS: os itens ficam lado a lado numa grade que rola na horizontal, com "encaixe" (scroll-snap) — o navegador faz o movimento. Cada item tem a mesma largura: até 32rem, ou 80% da tela no celular. As palavras dentro do atributo mudam o tamanho e o ponto de encaixe. Se você quer setas, bolinhas e troca automática, use o Carousel.

Quando usar

  • Depoimentos de clientes — vários, sem empilhar a página.
  • Vitrine de produtos ou serviços no celular, uma "prateleira" que desliza.
  • Galeria de fotos uma por vez (cheio).
  • Tabela de planos que no celular vira fileira arrastável.

Comece aqui

  1. 1

    Coloque o SW Core no <head>. O trilho é só CSS: não precisa do arquivo de JavaScript.

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

    Coloque os itens dentro de <div sw-trilho>. Cada filho direto vira um item. Arraste para o lado:

    "Atendimento nota 10!"

    Ana, cliente desde 2023

    "Site pronto em uma semana."

    Carlos, loja de roupas

    "Dobrou meus pedidos."

    Beatriz, confeitaria

    <div sw-trilho>
      <div sw-card="p"><div class="sw-card-bdy"><strong>"Atendimento nota 10!"</strong><p class="t-mut t-pp">Ana, cliente desde 2023</p></div></div>
      <div sw-card="p"><div class="sw-card-bdy"><strong>"Site pronto em uma semana."</strong><p class="t-mut t-pp">Carlos, loja de roupas</p></div></div>
      <div sw-card="p"><div class="sw-card-bdy"><strong>"Dobrou meus pedidos."</strong><p class="t-mut t-pp">Beatriz, confeitaria</p></div></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. Tamanho dos itens

O tamanho diz quanto cada item ocupa. Arraste cada fileira para o lado para comparar. Sem palavra: até 32rem (80% da largura no celular).

Corte

R$ 45 · 30 min

Barba

R$ 35 · 20 min

Corte + barba

R$ 70 · 50 min

Sobrancelha

R$ 20 · 10 min

Pigmentação

R$ 60 · 40 min

sw-trilho — padrão (até 32rem, 80% no celular)
<div sw-trilho>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte</strong><p class="t-mut t-pp">R$ 45 · 30 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Barba</strong><p class="t-mut t-pp">R$ 35 · 20 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte + barba</strong><p class="t-mut t-pp">R$ 70 · 50 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Sobrancelha</strong><p class="t-mut t-pp">R$ 20 · 10 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Pigmentação</strong><p class="t-mut t-pp">R$ 60 · 40 min</p></div></div>
</div>
Corte

R$ 45 · 30 min

Barba

R$ 35 · 20 min

Corte + barba

R$ 70 · 50 min

Sobrancelha

R$ 20 · 10 min

Pigmentação

R$ 60 · 40 min

sw-trilho="p" — itens pequenos (até 22rem, 60% no celular): cabem mais
<div sw-trilho="p">
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte</strong><p class="t-mut t-pp">R$ 45 · 30 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Barba</strong><p class="t-mut t-pp">R$ 35 · 20 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte + barba</strong><p class="t-mut t-pp">R$ 70 · 50 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Sobrancelha</strong><p class="t-mut t-pp">R$ 20 · 10 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Pigmentação</strong><p class="t-mut t-pp">R$ 60 · 40 min</p></div></div>
</div>
Corte

R$ 45 · 30 min

Barba

R$ 35 · 20 min

Corte + barba

R$ 70 · 50 min

Sobrancelha

R$ 20 · 10 min

Pigmentação

R$ 60 · 40 min

sw-trilho="g" — itens grandes (até 48rem, 92% no celular)
<div sw-trilho="g">
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte</strong><p class="t-mut t-pp">R$ 45 · 30 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Barba</strong><p class="t-mut t-pp">R$ 35 · 20 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte + barba</strong><p class="t-mut t-pp">R$ 70 · 50 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Sobrancelha</strong><p class="t-mut t-pp">R$ 20 · 10 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Pigmentação</strong><p class="t-mut t-pp">R$ 60 · 40 min</p></div></div>
</div>
Corte

R$ 45 · 30 min

Barba

R$ 35 · 20 min

Corte + barba

R$ 70 · 50 min

Sobrancelha

R$ 20 · 10 min

Pigmentação

R$ 60 · 40 min

sw-trilho="cheio" — um item por vez, ocupando toda a largura
<div sw-trilho="cheio">
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte</strong><p class="t-mut t-pp">R$ 45 · 30 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Barba</strong><p class="t-mut t-pp">R$ 35 · 20 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte + barba</strong><p class="t-mut t-pp">R$ 70 · 50 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Sobrancelha</strong><p class="t-mut t-pp">R$ 20 · 10 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Pigmentação</strong><p class="t-mut t-pp">R$ 60 · 40 min</p></div></div>
</div>

2. Onde o item encaixa

Por padrão o item encaixa pela esquerda (o começo dele fica alinhado). Com centro ele para no meio, e os vizinhos aparecem dos dois lados. Combine com um tamanho: sw-trilho="p centro".

Corte

R$ 45 · 30 min

Barba

R$ 35 · 20 min

Corte + barba

R$ 70 · 50 min

Sobrancelha

R$ 20 · 10 min

Pigmentação

R$ 60 · 40 min

sw-trilho="centro"
<div sw-trilho="centro">
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte</strong><p class="t-mut t-pp">R$ 45 · 30 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Barba</strong><p class="t-mut t-pp">R$ 35 · 20 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte + barba</strong><p class="t-mut t-pp">R$ 70 · 50 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Sobrancelha</strong><p class="t-mut t-pp">R$ 20 · 10 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Pigmentação</strong><p class="t-mut t-pp">R$ 60 · 40 min</p></div></div>
</div>
Corte

R$ 45 · 30 min

Barba

R$ 35 · 20 min

Corte + barba

R$ 70 · 50 min

Sobrancelha

R$ 20 · 10 min

Pigmentação

R$ 60 · 40 min

sw-trilho="p centro" — pequeno e centralizado
<div sw-trilho="p centro">
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte</strong><p class="t-mut t-pp">R$ 45 · 30 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Barba</strong><p class="t-mut t-pp">R$ 35 · 20 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Corte + barba</strong><p class="t-mut t-pp">R$ 70 · 50 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Sobrancelha</strong><p class="t-mut t-pp">R$ 20 · 10 min</p></div></div>
  <div sw-card="p"><div class="sw-card-bdy"><strong>Pigmentação</strong><p class="t-mut t-pp">R$ 60 · 40 min</p></div></div>
</div>

Tabela de opções

PalavraO que fazExemplo
Tamanho do item (uma palavra)
(nenhuma)Até 32rem de largura; 80% da tela no celular.sw-trilho
pPequeno: até 22rem; 60% no celular.sw-trilho="p"
gGrande: até 48rem; 92% no celular.sw-trilho="g"
cheioUm item por vez, 100% da largura (galeria de fotos).sw-trilho="cheio"
Encaixe
(nenhum)O item encaixa pelo começo (esquerda).sw-trilho
centroO item encaixa no meio da fileira.sw-trilho="centro"
Largura livre (no CSS da sua página)
--sw-trilho-wLargura de cada item, do jeito que você quiser. Escreva numa classe sua..depoimentos { --sw-trilho-w: 26rem; }

Receitas prontas — usos reais

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

Depoimentos de clientes Ao vivo

"Atendimento rápido e o site ficou lindo. Recomendo!"

AN
Ana Nunes
Estúdio de pilates

"Meus pedidos pelo WhatsApp dobraram no primeiro mês."

BR
Beatriz Rocha
Confeitaria

"Entregaram antes do prazo e explicaram tudo."

CM
Carlos Melo
Loja de roupas
<div sw-trilho="centro">
  <div sw-card="tst"><p class="sw-card-qt">"Atendimento rápido e o site ficou lindo. Recomendo!"</p><div class="sw-card-usr"><span sw-avt="p">AN</span><div><div class="sw-card-usr-nm">Ana Nunes</div><div class="sw-card-usr-rl">Estúdio de pilates</div></div></div></div>
  <div sw-card="tst"><p class="sw-card-qt">"Meus pedidos pelo WhatsApp dobraram no primeiro mês."</p><div class="sw-card-usr"><span sw-avt="p suc">BR</span><div><div class="sw-card-usr-nm">Beatriz Rocha</div><div class="sw-card-usr-rl">Confeitaria</div></div></div></div>
  <div sw-card="tst"><p class="sw-card-qt">"Entregaram antes do prazo e explicaram tudo."</p><div class="sw-card-usr"><span sw-avt="p inf">CM</span><div><div class="sw-card-usr-nm">Carlos Melo</div><div class="sw-card-usr-rl">Loja de roupas</div></div></div></div>
</div>
Vitrine de produtos com largura própria Ao vivo
Camiseta básica
R$ 59
Moletom canguru
R$ 149
Boné aba curva
R$ 69
Bermuda sarja
R$ 99
<div sw-trilho class="vitrine">
  <div sw-card="prd">
    <div class="sw-card-cnt">
      <div class="sw-card-nme">Camiseta básica</div>
      <div class="sw-card-prc"><span class="sw-card-prc-cur">R$ 59</span></div>
    </div>
  </div>
  <!-- um sw-card por produto -->
</div>

<style>
  .vitrine { --sw-trilho-w: 20rem; }   /* cada produto com 20rem */
</style>
Galeria de fotos, uma por vez Ao vivo
Foto 1 — fachada
Foto 2 — recepção
Foto 3 — sala de espera
<div sw-trilho="cheio">
  <img src="fachada.webp" alt="Fachada da clínica" loading="lazy">
  <img src="recepcao.webp" alt="Recepção" loading="lazy">
  <img src="sala.webp" alt="Sala de espera" loading="lazy">
</div>

Precisa de quê

  • swcore.min.css — o trilho.
  • Nenhum JavaScript.

Cuidados — erros comuns

  • Só os filhos diretos viram itens. Se você embrulhar tudo numa <div> extra dentro do trilho, vira um item só.
  • Foto dentro do trilho: coloque alt e loading="lazy" — as fotos que estão fora da tela só carregam quando a pessoa chega nelas.
  • No computador, muita gente não sabe que dá para rolar para o lado. Deixe o último item "cortado" na borda (o padrão já faz isso) para mostrar que tem mais.
  • Para mudar a largura, use a variável --sw-trilho-w numa classe sua — não coloque width nos itens.

O que ele não faz

  • Não tem setas, bolinhas nem troca automática. Para isso use o Carousel (sw-carousel).
  • Todos os itens têm a mesma largura.