SWCore / CSS / Interação

Interação CSS

Cursor de mão, bloquear seleção de texto, e um carrossel só de CSS (scroll-snap).

O que é

Pequenos utilitários de interação — incluindo um padrão de carrossel puramente CSS via scroll-snap, sem JS nenhum.

Como funciona

A maioria é uma propriedade CSS isolada por classe (cursor, user-select, pointer-events, visibility). O carrossel-sem-JS combina overflow-x com scroll-snap-type: x no contêiner (ovx snap-x) e scroll-snap-align em cada filho (snap-c) — o navegador cuida de "encaixar" no item mais próximo ao soltar o scroll, sem nenhum listener de JS.

Exemplos

Carrossel só com CSS — arraste de lado Ao vivo
card 1
card 2
card 3
card 4
card 5
card 6

Arraste de lado (ou use shift+roda): ao soltar, ele encaixa no card mais próximo. Nenhum JavaScript envolvido.

<div class="ovx snap-x scroll-sm flx gap-3">
  <div class="snap-c">card 1</div>
  <div class="snap-c">card 2</div>
  <div class="snap-c">card 3</div>
</div>

<!-- .ovx rola na horizontal · .snap-x liga o encaixe no contêiner
     · .snap-c marca cada ponto de parada nos filhos -->
Cursor e seleção de texto Ao vivo
este trecho tem cursor de mão — passe o mouse
tente selecionar este texto com o mouse: não dá
este aqui seleciona normalmente, pra comparar
<span class="poi">cursor de mão (pointer)</span>
<p class="sel-no">não deixa selecionar o texto</p>

<!-- .sel-no é útil em rótulo de botão e em UI que se clica muito,
     pra um duplo clique não sair pintando o texto de azul -->
Ignorar clique e esconder ocupando espaço Ao vivo
antes [invisível, mas ocupa o espaço] depois
Repare no vão entre "antes" e "depois": o elemento está ali, só não é visto.
<!-- ignora clique: o mouse "atravessa" o elemento -->
<div class="pe-no">selo decorativo por cima do card</div>

<!-- invisível, mas continua ocupando o lugar (visibility:hidden) -->
<span class="hid">reservando espaço</span>

<!-- diferente de display:none, que tira do fluxo e faz o layout pular -->
Lista longa (.cv-au) Ao vivo

O .cv-au avisa o navegador que aquele bloco pode ser deixado pra depois se estiver fora da tela (content-visibility). Em lista longa, isso encurta bastante o tempo até a página aparecer — e não muda nada visualmente.

<div class="cv-au">
  …item de uma lista com centenas de blocos…
</div>

<!-- aplique no ITEM repetido, não no contêiner inteiro -->

Atributos

Nenhum.

Variantes

poi
cursor de mão (pointer)
sel-no
não deixa selecionar o texto
pe-no
ignora clique (pointer-events: none)
hid
invisível mas ocupa espaço (visibility:hidden)
cv-au
contain visual pra lista longa
ovx snap-x + snap-c (nos filhos)
carrossel só com CSS (scroll-snap)

Eventos

Nenhum.

API (JavaScript)

Nenhum.

Requisitos

Nenhuma.

Limitações — o que ele não faz

  • O carrossel de scroll-snap não tem setas nem bolinhas: é rolagem nativa. Se você precisa de controles, o componente é o Slider ou o Text Carousel.
  • O .pe-no desliga o clique de verdade — inclusive pra teclado e leitor de tela. Não use pra "desabilitar" botão de formulário; pra isso existe o atributo disabled.