SW Core
SW Core / CSS / Interação

Interação CSS

O formato do cursor, o que dá ou não para selecionar e clicar, e um carrossel de arrastar feito só com CSS.

O que é

Pequenos ajustes que fazem o site "se comportar" direito: mostrar a mãozinha em algo clicável (poi), o cursor de arrastar num mapa (cur-gr), impedir que um duplo clique pinte o texto de azul (sel-no), selecionar a chave Pix inteira com um clique (sel-al), deixar um enfeite por cima sem bloquear o clique (pe-no), esconder algo sem mexer no layout (hid) e montar uma fileira de cards que encaixa no lugar quando a pessoa arrasta (snap-*).

É só CSS, sem JavaScript. O carrossel funciona com a própria rolagem do navegador: a caixa rola de lado (ovx), o snap-x liga o encaixe e cada item diz onde ele para (snap-s início, snap-c centro, snap-e fim). No celular é arrastar com o dedo; no computador, a barra de rolagem ou Shift + rodinha.

Quando usar

  • Card, linha de tabela ou ícone clicável que não é link nem botão: poi.
  • Chave Pix, cupom, código para a pessoa copiar: sel-al (um clique seleciona tudo).
  • Selo ou enfeite por cima de um card que não pode atrapalhar o clique: pe-no.
  • Fileira de depoimentos, produtos ou fotos para arrastar de lado: ovx snap-x + snap-s em cada item.
  • Lista longa (centenas de itens) que demora a abrir: cv-au em cada item.

Comece aqui

  1. 1

    Coloque o SW Core no <head>. As classes estão no arquivo principal.

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

    Coloque a classe no elemento. Aqui, um código de cupom: um clique seleciona o código inteiro para copiar.

    Seu cupom: VERAO10

    <p>Seu cupom: <strong class="sel-al">VERAO10</strong></p>

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. Carrossel de arrastar (scroll-snap)

A caixa rola de lado e, ao soltar, encaixa no item mais próximo. Arraste ou role de lado dentro dos quadros.

Depoimento 1
Depoimento 2
Depoimento 3
snap-x + snap-s — encaixa no começo do item <div class="ovx snap-x flx gap-3"> <div class="snap-s f-sh0 w-fl bg-sur bd r-m p-g t-ct">Depoimento 1</div> <div class="snap-s f-sh0 w-fl bg-sur bd r-m p-g t-ct">Depoimento 2</div> <div class="snap-s f-sh0 w-fl bg-sur bd r-m p-g t-ct">Depoimento 3</div> </div>
Foto 1
Foto 2
Foto 3
snap-c + no-bar — encaixa no centro, sem barra <div class="ovx snap-x no-bar flx gap-3"> <div class="snap-c f-sh0 w-fl bg-pri r-m p-g t-ct">Foto 1</div> <div class="snap-c f-sh0 w-fl bg-pri r-m p-g t-ct">Foto 2</div> <div class="snap-c f-sh0 w-fl bg-pri r-m p-g t-ct">Foto 3</div> </div>
Passo 1
Passo 2
Passo 3
snap-y — encaixa rolando para baixo <div class="ar-4-3 ovy snap-y bd r-m"> <div class="snap-s h-fl bg-sur flx alc j-ct">Passo 1</div> <div class="snap-s h-fl bg-sur-h flx alc j-ct">Passo 2</div> <div class="snap-s h-fl bg-sur flx alc j-ct">Passo 3</div> </div>
Plano Básico
Plano Loja
Plano Completo
scroll-sm — link que rola suave até o item <a href="#plano-1" sw-btn="pri p out">1</a> <a href="#plano-2" sw-btn="pri p out">2</a> <a href="#plano-3" sw-btn="pri p out">3</a> <div class="ovx snap-x scroll-sm no-bar flx"> <div id="plano-1" class="snap-s f-sh0 w-fl bg-sur bd r-m p-g t-ct">Plano Básico</div> <div id="plano-2" class="snap-s f-sh0 w-fl bg-sur bd r-m p-g t-ct">Plano Loja</div> <div id="plano-3" class="snap-s f-sh0 w-fl bg-sur bd r-m p-g t-ct">Plano Completo</div> </div>

2. Formato do cursor

Diz para a pessoa o que vai acontecer ao clicar. Passe o mouse em cada quadro.

Ver detalhes
poi — mãozinha (clicável) <div class="poi bg-sur bd r-m p-m t-ct w-fl">Ver detalhes</div>
Seta normal
cur-de — seta normal <div class="cur-de bg-sur bd r-m p-m t-ct w-fl">Seta normal</div>
Mover bloco
cur-mv — mover <div class="cur-mv bg-sur bd r-m p-m t-ct w-fl">Mover bloco</div>
Arraste o mapa
cur-gr — pegar e arrastar <div class="cur-gr bg-sur bd r-m p-m t-ct w-fl">Arraste o mapa</div>
Indisponível
cur-na — proibido <div class="cur-na bg-sur bd r-m p-m t-ct w-fl">Indisponível</div>
O que é isso?
cur-he — ajuda <div class="cur-he bg-sur bd r-m p-m t-ct w-fl">O que é isso?</div>
Área de texto
cur-tx — texto <div class="cur-tx bg-sur bd r-m p-m t-ct w-fl">Área de texto</div>
Ampliar foto
cur-zi — lupa de aumentar <div class="cur-zi bg-sur bd r-m p-m t-ct w-fl">Ampliar foto</div>
Reduzir foto
cur-zo — lupa de diminuir <div class="cur-zo bg-sur bd r-m p-m t-ct w-fl">Reduzir foto</div>
Cursor some aqui
cur-no — sem cursor <div class="cur-no bg-sur bd r-m p-m t-ct w-fl">Cursor some aqui</div>

3. Seleção de texto

Tente selecionar o texto de cada quadro com o mouse (ou dê dois cliques).

Tente me selecionar

sel-no — não deixa selecionar <p class="sel-no m-0 bd r-m p-p">Tente me selecionar</p>

chave-pix@minhaloja.com.br

sel-al — um clique seleciona tudo <p class="sel-al m-0 bd r-m p-p">chave-pix@minhaloja.com.br</p>
Rótulo travado · este pedaço seleciona
sel-tx — volta a deixar selecionar <div class="sel-no bd r-m p-p w-fl"> <span>Rótulo travado ·</span> <span class="sel-tx">este pedaço seleciona</span> </div>

Seleção normal

sel-au — comportamento padrão do navegador <p class="sel-au m-0 bd r-m p-p">Seleção normal</p>

4. Clique e visibilidade

Novo
pe-no — o mouse "atravessa" (selo não bloqueia o botão) <div class="rel"> <button sw-btn="pri">Clique aqui</button> <span class="abs pin-t pin-r pe-no" sw-badge="err">Novo</span> </div>

Esta área não reage…

pe-no no pai + pe-au no filho <div class="pe-no"> <p>Esta área não reage…</p> <button class="pe-au" sw-btn="suc p">…mas este botão sim</button> </div>

Antes escondido depois

hid — invisível, mas ocupa o espaço <p class="m-0">Antes <span class="hid" sw-badge="pri">escondido</span> depois</p>

Antes voltou depois

vis — visível (desfaz o hid) <p class="m-0">Antes <span class="hid vis" sw-badge="pri">voltou</span> depois</p>

Tabela de opções

PalavraO que fazExemplo
Cursor
poiMãozinha — "isto é clicável".<div class="poi">
cur-deSeta normal.<div class="cur-de">
cur-mvSetas de mover.<div class="cur-mv">
cur-grMão aberta; vira mão fechada enquanto segura o clique.<div class="cur-gr">
cur-naProibido (círculo cortado).<div class="cur-na">
cur-heAjuda (seta com interrogação).<span class="cur-he">
cur-txBarra de texto.<div class="cur-tx">
cur-ziLupa com +.<img class="cur-zi">
cur-zoLupa com −.<img class="cur-zo">
cur-noEsconde o cursor.<div class="cur-no">
Clique
pe-noNão reage ao mouse: o clique "atravessa" para o que está embaixo.<span class="pe-no">
pe-auVolta a reagir (use num filho de um pe-no).<button class="pe-au">
Seleção de texto
sel-noNão deixa selecionar.<span class="sel-no">
sel-alUm clique seleciona o texto todo (bom para copiar).<code class="sel-al">
sel-txDeixa selecionar (use dentro de um sel-no).<span class="sel-tx">
sel-auComportamento padrão do navegador.<span class="sel-au">
Visibilidade
hidInvisível, mas continua ocupando o lugar.<span class="hid">
visVisível (desfaz o hid).<span class="vis">
Carrossel de rolagem
snap-xNo contêiner que rola de lado (ovx): liga o encaixe horizontal.<div class="ovx snap-x flx">
snap-yNo contêiner que rola para baixo (ovy): liga o encaixe vertical.<div class="ovy snap-y">
snap-sNo item: encaixa pelo começo.<div class="snap-s">
snap-cNo item: encaixa pelo centro.<div class="snap-c">
snap-eNo item: encaixa pelo fim.<div class="snap-e">
scroll-smNo contêiner: link #âncora rola suave em vez de pular.<div class="ovx scroll-sm">
no-barEsconde a barra de rolagem (a rolagem continua).<div class="ovx no-bar">
Desempenho
cv-auO navegador pula o desenho do bloco enquanto ele está fora da tela. Deixa lista longa abrir mais rápido. Não muda nada no visual.<article class="cv-au">

Receitas prontas — usos reais

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

Depoimentos para arrastar de lado Ao vivo

"Meu salão lotou a agenda no primeiro mês com o site novo."

Carla · Salão Bela

"Os clientes agora pedem pelo WhatsApp direto do site."

Rafael · Pizzaria Forno

"Atendimento rápido e o site ficou do jeito que eu queria."

Marta · Clínica Vida
<div class="ovx snap-x flx gap-4 pb-2">
  <blockquote sw-card class="snap-s f-sh0 m-0 w-fl">
    <div class="sw-card-bdy">
      <p class="mt-0">"Meu salão lotou a agenda no primeiro mês com o site novo."</p>
      <strong>Carla · Salão Bela</strong>
    </div>
  </blockquote>
  <!-- …um blockquote por depoimento… -->
</div>
Pagamento por Pix: chave fácil de copiar Ao vivo

Chave Pix (clique para selecionar)

12.345.678/0001-90

<p class="t-mut t-p">Chave Pix (clique para selecionar)</p>
<p><strong class="sel-al poi">12.345.678/0001-90</strong></p>
Linha de tabela clicável no painel Ao vivo
Pedido #1041 — MariaPago
Pedido #1042 — JoãoPendente
<div class="poi sel-no flx j-sb p-p">
  <span>Pedido #1041 — Maria</span>
  <span sw-badge="suc">Pago</span>
</div>
<!-- poi: mostra a mãozinha · sel-no: clicar várias vezes não pinta o texto -->
Lista longa que abre rápido Referência
<!-- cv-au em CADA item repetido, não no contêiner -->
<ul>
  <li class="cv-au">…produto 1…</li>
  <li class="cv-au">…produto 2…</li>
  <!-- …centenas de itens… -->
</ul>

Precisa de quê

  • swcore.min.css — todas as classes desta página.

Cuidados — erros comuns

  • O carrossel precisa das três partes: ovx (rola), snap-x (encaixa) no contêiner e snap-s/snap-c/snap-e em cada item. Sem a classe no item, não há onde encaixar.
  • Itens do carrossel encolhem até caber se não tiverem f-sh0. Ponha f-sh0 e uma largura (w-fl ou a do seu CSS) em cada item.
  • pe-no desliga o clique de verdade, inclusive para teclado. Não use para "desativar" botão de formulário — para isso existe o atributo disabled.
  • hid esconde da tela e do leitor de tela, mas o espaço continua lá. Para sumir de vez (sem ocupar espaço), use non.
  • O atributo HTML hidden também some de vez, mesmo numa tag com flx, grd ou sw-btn — bom para mostrar/esconder por JS (el.hidden = true).
  • poi só muda o cursor; não torna nada clicável. O clique continua sendo do link, botão ou do seu JavaScript.
  • No celular não existe cursor — as classes cur-* e poi só fazem diferença no computador.

O que ele não faz

  • O carrossel de rolagem não tem setas nem bolinhas. Para isso, use o sw-trilho (carrossel nativo com encaixe) ou o Slider.
  • cv-au só ajuda em listas grandes; em página curta não faz diferença nenhuma.