Chip Componentes
Etiqueta pequena e arredondada para tags, filtros escolhidos e seleções — com um × opcional que tira ela da tela.
O que é
É a etiqueta "Frete grátis ×" que aparece em cima da lista de produtos quando você filtra, ou as tags "PHP", "Design" de um post. Você escreve <span sw-chip> com o texto. Para mudar a cor ou o jeito, acrescenta uma classe (class="sw-chip-pri"). Se colocar um <span class="sw-chip-x">×</span> dentro, clicar no × faz o chip encolher e sumir.
O visual é CSS. O × é JavaScript do SWCore: um único "ouvinte" na página inteira percebe o clique em qualquer .sw-chip-x, avisa com o evento sw:chip:remove, faz a animação de saída e tira o chip do HTML. Por isso funciona até em chip criado depois, por código. Diferente do Botão, as variações do Chip ainda são por classe, não por palavra dentro do atributo.
Quando usar
- Filtros ativos numa loja ou busca ("Até R$ 500 ×", "Em estoque ×") — o × tira o filtro.
- Tags / categorias de um post, projeto ou produto.
- Escolhas da pessoa num cadastro ("Seus interesses: Viagem, Culinária").
- Status curto numa tabela ("Pago", "Pendente") — para número/contador pequeno, prefira o Badge.
Comece aqui
-
1
Coloque o SWCore na página: o CSS no
<head>e o JavaScript no fim do<body>(o JS só é preciso se você usar o ×).<link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css"> <!-- fim do body --> <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script> -
2
Escreva o chip. Para cor, some uma classe.
Design<span sw-chip class="sw-chip-pri">Design</span> -
3
Quer que dê para remover? Coloque o × com a classe
sw-chip-x. Clique nele:Frete grátis ×<span sw-chip class="sw-chip-pri"> Frete grátis <span class="sw-chip-x" role="button" aria-label="Remover filtro">×</span> </span>
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. Cores
Sem classe de cor, o chip fica neutro (fundo da superfície e borda fina). As cores deixam o fundo levemente tingido e o texto na cor.
<span sw-chip>Neutro</span>
<span sw-chip class="sw-chip-pri">Design</span>
<span sw-chip class="sw-chip-sec">Marketing</span>
<span sw-chip class="sw-chip-suc">Pago</span>
<span sw-chip class="sw-chip-ale">Pendente</span>
<span sw-chip class="sw-chip-err">Cancelado</span>
2. Estilo, tamanho e marcado
Classes que mudam o jeito do chip. Elas se somam: class="sw-chip-sel sw-chip-pp".
<span sw-chip class="sw-chip-out">Contorno</span>
<span sw-chip class="sw-chip-out sw-chip-suc">Pago</span>
<span sw-chip class="sw-chip-out sw-chip-err">Atrasado</span>
<span sw-chip class="sw-chip-sel">Selecionado</span>
<span sw-chip class="sw-chip-pp">Pequeno</span>
<span sw-chip class="sw-chip-pp sw-chip-suc">Entregue</span>
<span sw-chip class="sw-chip-sel sw-chip-pp">Marcado pequeno</span>
3. Removível (com ×)
Coloque <span class="sw-chip-x">×</span> no fim. Clique: o chip encolhe e some de verdade. (Recarregue a página para ver de novo.)
<span sw-chip>Promoção <span class="sw-chip-x" role="button" aria-label="Remover">×</span></span>
<span sw-chip class="sw-chip-pri">
PHP
<span class="sw-chip-x" role="button" aria-label="Remover">×</span>
</span>
<span sw-chip class="sw-chip-sel">
Até R$ 500
<span class="sw-chip-x" role="button" aria-label="Remover">×</span>
</span>
<span sw-chip class="sw-chip-pp sw-chip-err">
Atrasado
<span class="sw-chip-x" role="button" aria-label="Remover">×</span>
</span>
4. Com foto ou ícone
Um avatar (sw-avt) ou uma <img> dentro do chip encolhe sozinho para caber. Ícone swi-* entra como texto.
<span sw-chip><span sw-avt="pp">AN</span> Ana Nunes</span>
<span sw-chip class="sw-chip-pri">
<span sw-avt="pp suc">BR</span>
Beatriz
<span class="sw-chip-x" role="button" aria-label="Remover">×</span>
</span>
<span sw-chip class="sw-chip-suc"><i class="swi-check"></i> Aprovado</span>
<span sw-chip><i class="swi-map-pin"></i> São Paulo</span>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Base | ||
sw-chip | Atributo que transforma o elemento em chip. Use num <span> (ou <button> se for clicável). | <span sw-chip>Tag</span> |
| Cor (classe) | ||
(nenhuma) | Neutro: fundo da superfície, borda fina. | |
sw-chip-pri | Primária. | class="sw-chip-pri" |
sw-chip-sec | Secundária. | class="sw-chip-sec" |
sw-chip-suc | Verde (sucesso). | class="sw-chip-suc" |
sw-chip-ale | Amarelo (alerta). | class="sw-chip-ale" |
sw-chip-err | Vermelho (erro). | class="sw-chip-err" |
| Estilo / tamanho / estado (classe) | ||
sw-chip-out | Só contorno, sem fundo. Com uma cor (sw-chip-out sw-chip-suc) o contorno e o texto ficam naquela cor. | class="sw-chip-out" |
sw-chip-sel | Marcado: fundo na cor primária, texto branco. | class="sw-chip-sel" |
sw-chip-pp | Pequeno. | class="sw-chip-pp" |
| Partes de dentro | ||
sw-chip-x | Classe do ×. Clicar remove o chip (precisa do swcore.min.js). | <span class="sw-chip-x">×</span> |
[sw-avt] / <img> | Foto ou iniciais no começo do chip; ficam com 2rem. | <span sw-avt>AN</span> |
| Estado automático | ||
is-leaving | Classe que o JS coloca durante a saída (encolhe e some). Você não escreve. | |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
<div class="flx f-wr alc gap-2">
<span class="t-mut t-pp">Filtros:</span>
<span sw-chip class="sw-chip-sel sw-chip-pp" data-filtro="preco">
Até R$ 500 <span class="sw-chip-x" role="button" aria-label="Remover filtro">×</span>
</span>
<span sw-chip class="sw-chip-sel sw-chip-pp" data-filtro="frete">
Frete grátis <span class="sw-chip-x" role="button" aria-label="Remover filtro">×</span>
</span>
</div>
<script>
// o × só tira o chip da tela; aqui você refaz a busca sem aquele filtro
document.addEventListener('sw:chip:remove', (e) => {
const filtro = e.target.dataset.filtro;
if (filtro) console.log('tirar o filtro', filtro); // ex.: atualizar a URL e recarregar a lista
});
</script>
<div class="flx f-wr gap-2">
<a href="/tag/seo" sw-chip class="sw-chip-pri">SEO</a>
<a href="/tag/wordpress" sw-chip class="sw-chip-pri">WordPress</a>
<a href="/tag/loja-virtual" sw-chip class="sw-chip-pri">Loja virtual</a>
</div>
<div class="flx f-wr gap-2" id="interesses">
<button type="button" sw-chip class="sw-chip-out" aria-pressed="false">Viagem</button>
<button type="button" sw-chip class="sw-chip-sel" aria-pressed="true">Culinária</button>
<button type="button" sw-chip class="sw-chip-out" aria-pressed="false">Esportes</button>
</div>
<script>
document.getElementById('interesses').addEventListener('click', (e) => {
const chip = e.target.closest('[sw-chip]');
if (!chip) return;
const marcado = chip.classList.toggle('sw-chip-sel'); // liga/desliga
chip.classList.toggle('sw-chip-out', !marcado);
chip.setAttribute('aria-pressed', marcado);
});
</script>
Removidos: nenhum
<div class="flx f-wr gap-2" id="tags">
<span sw-chip class="sw-chip-suc">Tag A <span class="sw-chip-x" role="button" aria-label="Remover">×</span></span>
<span sw-chip class="sw-chip-suc">Tag B <span class="sw-chip-x" role="button" aria-label="Remover">×</span></span>
</div>
<script>
document.getElementById('tags').addEventListener('sw:chip:remove', (e) => {
const chip = e.target; // o próprio [sw-chip]
console.log('removeu:', chip.textContent.replace('×', '').trim());
});
</script>
Eventos
sw:chip:removedocument). event.target é o chip.Precisa de quê
swcore.min.css— o visual.swcore.min.js— só para o × funcionar.swcore.compl.min.css— só se usar íconeswi-*.
Cuidados — erros comuns
- Escrever
sw-chip="pri"não funciona: no Chip a cor é por classe,class="sw-chip-pri". - O × tem que ter a classe
sw-chip-xe estar dentro do chip. Um × solto ao lado não remove nada. - O × só tira da tela. Se o chip representa um filtro ou uma escolha salva, ouça o
sw:chip:removee atualize a busca/o servidor. - Coloque
role="button"earia-labelno × para quem usa leitor de tela. - Chip clicável (que marca/desmarca) deve ser
<button type="button">, não<span>— assim funciona no teclado.
O que ele não faz
- Não tem cor
infnem tamanhos maiores que o padrão (só opp, menor). - Não dá para impedir a remoção: o
sw:chip:removeavisa, mas o chip sai de qualquer jeito. - O × é um
<span>: não recebe foco pelo Tab nem responde ao Enter.

