CSS nativo — visão geral CSS
O navegador agora faz sozinho o que antes pedia JavaScript. O SW Core 2.1.0 veste esses recursos com atributos curtos — mais leve e mais rápido.
O que é
É uma família de peças que usam recursos que já vêm dentro do navegador: surgir ao rolar, barra de leitura, menu e aviso que abrem por cima, modal, dica colada no botão, perguntas frequentes que abrem e fecham, carrossel de arrastar, formulário que só libera o botão quando está tudo certo e bloco que muda de forma conforme o espaço. Quase nenhuma precisa de JavaScript (o modal usa uma linha para abrir). Todas estão dentro do swcore.min.css — não há arquivo novo para carregar.
Regra do SW Core para esses recursos: só entra o que funciona nos 4 navegadores (Chrome, Edge, Firefox e Safari, no computador e no celular). Quando o recurso é muito novo, a peça foi feita para continuar funcionando sem ele — só perde o enfeite (ex.: sem suporte, o sw-revela mostra o conteúdo parado). Todas respeitam o "reduzir movimento" do sistema. Use estas peças antes de escrever JavaScript; a área Animações (GSAP) fica para o que o CSS não faz: linha do tempo com várias etapas, prender a tela, texto letra a letra.
Quando usar
- Site institucional, landing page, blog: o conjunto cobre quase tudo que um site comum precisa sem carregar biblioteca.
- Quer a página leve no celular e nota alta no PageSpeed: estas peças não somam JavaScript.
- Sistema/painel que já usa os componentes com JS (
sw-modal,sw-dropdown…): continue com eles; as peças nativas são uma opção, não uma troca obrigatória.
Comece aqui
-
1
Coloque o SW Core no
<head>. Todas as peças desta família estão no arquivo principal (versão 2.1.0 ou mais nova).<link rel="stylesheet" href="swcore/swcore.min.css"> -
2
Escolha a peça e escreva o atributo. Exemplo: perguntas frequentes em que só uma fica aberta por vez — HTML puro, zero JavaScript.
Vocês fazem loja virtual?
Sim, com Pix, cartão e cálculo de frete.
Em quanto tempo fica pronto?
De 7 a 15 dias úteis.
<details sw-sanfona name="faq" open> <summary>Vocês fazem loja virtual?</summary> <p>Sim, com Pix, cartão e cálculo de frete.</p> </details> <details sw-sanfona name="faq"> <summary>Em quanto tempo fica pronto?</summary> <p>De 7 a 15 dias úteis.</p> </details>
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. Movimento ligado à rolagem
O navegador liga o efeito à rolagem da página. Role para ver.
A partir de R$ 60
<div sw-card="sha" sw-revela="zoom">…</div>
olhe o topo da janela e role
<div sw-progresso></div>
2. Caixas que abrem por cima
Clique nos botões. Fecham com Esc; o menu também fecha ao clicar fora.
<button sw-btn="pri" popovertarget="conta">Minha conta <i class="swi-chevron-down"></i></button>
<div id="conta" popover sw-popover="menu">
<a href="/perfil"><i class="swi-user"></i> Meu perfil</a>
<a href="/config"><i class="swi-cog"></i> Configurações</a>
</div>
<button sw-btn="pri" onclick="document.getElementById('agenda').showModal()">Agendar horário</button>
<dialog id="agenda" sw-dialog>
<h3 class="mt-0">Confirmar agendamento?</h3>
<p>Terça, 14h.</p>
<form method="dialog" class="flx gap-2">
<button sw-btn="pri" value="sim">Confirmar</button>
<button sw-btn="ghost" value="nao">Voltar</button>
</form>
</dialog>
3. Conteúdo e formulário
Tem estacionamento?
Sim, gratuito.
Aceita Pix?
Sim.
<details sw-sanfona name="faq">
<summary>Tem estacionamento?</summary>
<p>Sim, gratuito.</p>
</details>
<details sw-sanfona name="faq">
<summary>Aceita Pix?</summary>
<p>Sim.</p>
</details>
<form sw-trava>
<input sw-inp type="email" required placeholder="seu@email.com" aria-label="E-mail">
<button sw-btn="pri">Quero receber</button>
</form>
<div sw-cor="laranja">
<button sw-btn="pri">Black Friday</button>
<span sw-badge="pri g">-40%</span>
</div>
4. Layout que se ajeita sozinho
Estes precisam de espaço, por isso ocupam a linha toda.
<div sw-trilho>
<div class="ar-4-3 bg-pri r-m flx alc j-ct t-xg">1</div>
<div class="ar-4-3 bg-pri r-m flx alc j-ct t-xg">2</div>
<div class="ar-4-3 bg-pri r-m flx alc j-ct t-xg">3</div>
<div class="ar-4-3 bg-pri r-m flx alc j-ct t-xg">4</div>
</div>
<div sw-caixa>
<div sw-caixa-lado>
<div class="ar-4-3 r-m ov-hi"><img src="/barbearia.jpg" alt="Barbearia" class="media-fill"></div>
<div>
<strong>Barbearia do Zé</strong>
<p class="m-0 t-mut t-p">Corte, barba e sobrancelha no centro da cidade.</p>
</div>
<a href="/agendar" sw-btn="pri">Agendar</a>
</div>
</div>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| As peças da família | ||
sw-revela | Surge ao rolar, preso à rolagem. Página. | <section sw-revela="esq"> |
sw-progresso | Barra de leitura presa no topo (ou no rodapé) da janela. Página. | <div sw-progresso></div> |
sw-popover | Menu, aviso e painel lateral com o popover do navegador. Página. | <div id="x" popover sw-popover="menu"> |
sw-dialog | Modal nativo, central ou lateral. Página. | <dialog id="x" sw-dialog> |
sw-dica | Dica colada no botão, que vira para o outro lado se não couber. Página. | <div popover sw-dica="baixo"> |
sw-sanfona | Perguntas frequentes com <details>; name igual = só uma aberta. Página. | <details sw-sanfona name="faq"> |
sw-trilho | Carrossel de arrastar com encaixe (tamanhos p, g, cheio; centro). Página. | <div sw-trilho="g centro"> |
sw-trava | Formulário: o botão de enviar só libera quando tudo é válido. Página. | <form sw-trava> |
sw-caixa | Bloco que muda de forma pelo espaço dele (não pelo tamanho da tela). Página. | <div sw-caixa> |
sw-cor | Motor de cor: um nome (ou número) vira toda a cor da marca. Página. | <html sw-cor="azul"> |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
Dúvidas frequentes
Vocês atendem aos domingos?
Sim, das 9h às 13h, com hora marcada.
Preciso agendar?
Recomendamos. Pelo site ou pelo WhatsApp.
Quais formas de pagamento?
Pix, cartão de débito e crédito.
<h3>Dúvidas frequentes</h3>
<details sw-sanfona name="faq" open>
<summary>Vocês atendem aos domingos?</summary>
<p>Sim, das 9h às 13h, com hora marcada.</p>
</details>
<details sw-sanfona name="faq">
<summary>Preciso agendar?</summary>
<p>Recomendamos. Pelo site ou pelo WhatsApp.</p>
</details>
<!-- …mais perguntas com o mesmo name="faq"… -->
<form sw-trava class="flx gap-2 f-wr alc" action="/newsletter" method="post">
<input sw-inp type="email" name="email" required placeholder="seu@email.com" aria-label="Seu e-mail">
<button sw-btn="pri">Receber novidades</button>
</form>
<body>
<div sw-progresso></div> <!-- barra de leitura -->
<article>
<h1>Como cuidar da barba no verão</h1>
<img sw-revela="zoom" src="/barba.jpg" alt="…"> <!-- surge ao rolar -->
<p>…</p>
</article>
<div sw-trilho>…posts relacionados…</div> <!-- carrossel de arrastar -->
<details sw-sanfona name="faq">…</details> <!-- dúvidas -->
</body>
Precisa de quê
swcore.min.css2.1.0 ou mais novo — todas as peças.swcore.compl.min.css— só se usar os íconesswi-*.
Cuidados — erros comuns
- Estas peças são por atributo (
sw-sanfona,sw-trilho…), não por classe.class="sw-sanfona"não funciona. - Algumas usam o recurso do navegador junto: o
sw-popoverprecisa do atributopopover; osw-dialogtem que estar num<dialog>; osw-sanfonanum<details>. Sem isso não abrem. - Em navegador antigo, os efeitos (entrada animada, barra de leitura) simplesmente não aparecem — o conteúdo continua lá. Não dependa do efeito para mostrar informação.
- Se o computador está com "reduzir movimento" ligado, as animações ficam paradas de propósito. Não é defeito.

