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-sem cada item. - Lista longa (centenas de itens) que demora a abrir:
cv-auem cada item.
Comece aqui
-
1
Coloque o SW Core no
<head>. As classes estão no arquivo principal.<link rel="stylesheet" href="swcore/swcore.min.css"> -
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.
<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>
<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>
<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>
<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.
<div class="poi bg-sur bd r-m p-m t-ct w-fl">Ver detalhes</div>
<div class="cur-de bg-sur bd r-m p-m t-ct w-fl">Seta normal</div>
<div class="cur-mv bg-sur bd r-m p-m t-ct w-fl">Mover bloco</div>
<div class="cur-gr bg-sur bd r-m p-m t-ct w-fl">Arraste o mapa</div>
<div class="cur-na bg-sur bd r-m p-m t-ct w-fl">Indisponível</div>
<div class="cur-he bg-sur bd r-m p-m t-ct w-fl">O que é isso?</div>
<div class="cur-tx bg-sur bd r-m p-m t-ct w-fl">Área de texto</div>
<div class="cur-zi bg-sur bd r-m p-m t-ct w-fl">Ampliar foto</div>
<div class="cur-zo bg-sur bd r-m p-m t-ct w-fl">Reduzir foto</div>
<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
<p class="sel-no m-0 bd r-m p-p">Tente me selecionar</p>
chave-pix@minhaloja.com.br
<p class="sel-al m-0 bd r-m p-p">chave-pix@minhaloja.com.br</p>
<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
<p class="sel-au m-0 bd r-m p-p">Seleção normal</p>
4. Clique e visibilidade
<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…
<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
<p class="m-0">Antes <span class="hid" sw-badge="pri">escondido</span> depois</p>
Antes voltou depois
<p class="m-0">Antes <span class="hid vis" sw-badge="pri">voltou</span> depois</p>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Cursor | ||
poi | Mãozinha — "isto é clicável". | <div class="poi"> |
cur-de | Seta normal. | <div class="cur-de"> |
cur-mv | Setas de mover. | <div class="cur-mv"> |
cur-gr | Mão aberta; vira mão fechada enquanto segura o clique. | <div class="cur-gr"> |
cur-na | Proibido (círculo cortado). | <div class="cur-na"> |
cur-he | Ajuda (seta com interrogação). | <span class="cur-he"> |
cur-tx | Barra de texto. | <div class="cur-tx"> |
cur-zi | Lupa com +. | <img class="cur-zi"> |
cur-zo | Lupa com −. | <img class="cur-zo"> |
cur-no | Esconde o cursor. | <div class="cur-no"> |
| Clique | ||
pe-no | Não reage ao mouse: o clique "atravessa" para o que está embaixo. | <span class="pe-no"> |
pe-au | Volta a reagir (use num filho de um pe-no). | <button class="pe-au"> |
| Seleção de texto | ||
sel-no | Não deixa selecionar. | <span class="sel-no"> |
sel-al | Um clique seleciona o texto todo (bom para copiar). | <code class="sel-al"> |
sel-tx | Deixa selecionar (use dentro de um sel-no). | <span class="sel-tx"> |
sel-au | Comportamento padrão do navegador. | <span class="sel-au"> |
| Visibilidade | ||
hid | Invisível, mas continua ocupando o lugar. | <span class="hid"> |
vis | Visível (desfaz o hid). | <span class="vis"> |
| Carrossel de rolagem | ||
snap-x | No contêiner que rola de lado (ovx): liga o encaixe horizontal. | <div class="ovx snap-x flx"> |
snap-y | No contêiner que rola para baixo (ovy): liga o encaixe vertical. | <div class="ovy snap-y"> |
snap-s | No item: encaixa pelo começo. | <div class="snap-s"> |
snap-c | No item: encaixa pelo centro. | <div class="snap-c"> |
snap-e | No item: encaixa pelo fim. | <div class="snap-e"> |
scroll-sm | No contêiner: link #âncora rola suave em vez de pular. | <div class="ovx scroll-sm"> |
no-bar | Esconde a barra de rolagem (a rolagem continua). | <div class="ovx no-bar"> |
| Desempenho | ||
cv-au | O 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.
"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>
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>
<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 -->
<!-- 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 esnap-s/snap-c/snap-eem cada item. Sem a classe no item, não há onde encaixar. - Itens do carrossel encolhem até caber se não tiverem
f-sh0. Ponhaf-sh0e uma largura (w-flou a do seu CSS) em cada item. pe-nodesliga o clique de verdade, inclusive para teclado. Não use para "desativar" botão de formulário — para isso existe o atributodisabled.hidesconde da tela e do leitor de tela, mas o espaço continua lá. Para sumir de vez (sem ocupar espaço), usenon.- O atributo HTML
hiddentambém some de vez, mesmo numa tag comflx,grdousw-btn— bom para mostrar/esconder por JS (el.hidden = true). poisó 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-*epoisó fazem diferença no computador.

