SW Core
SW Core / CSS / CSS nativo — visão geral

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. 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. 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.

Corte + barba

A partir de R$ 60

sw-revela — surge ao rolar (ver página) <div sw-card="sha" sw-revela="zoom">…</div>

olhe o topo da janela e role

sw-progresso — barra de leitura (ver página) <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.

sw-popover — menu, aviso, painel (ver página) <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>

Confirmar agendamento?

Terça, 14h.

sw-dialog — modal (ver página) <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.

sw-sanfona — perguntas frequentes (ver página) <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>
sw-trava — o botão só libera com tudo preenchido (ver página) <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>
-40%
sw-cor — a cor da marca num pedaço da página (ver página) <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.

1
2
3
4
sw-trilho — carrossel de arrastar com encaixe (ver página) · arraste de lado
<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>
Barbearia
Barbearia do Zé

Corte, barba e sobrancelha no centro da cidade.

Agendar
sw-caixa — o bloco fica lado a lado quando tem espaço e empilha quando não tem (ver página) · diminua a janela
<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

PalavraO que fazExemplo
As peças da família
sw-revelaSurge ao rolar, preso à rolagem. Página.<section sw-revela="esq">
sw-progressoBarra de leitura presa no topo (ou no rodapé) da janela. Página.<div sw-progresso></div>
sw-popoverMenu, aviso e painel lateral com o popover do navegador. Página.<div id="x" popover sw-popover="menu">
sw-dialogModal nativo, central ou lateral. Página.<dialog id="x" sw-dialog>
sw-dicaDica colada no botão, que vira para o outro lado se não couber. Página.<div popover sw-dica="baixo">
sw-sanfonaPerguntas frequentes com <details>; name igual = só uma aberta. Página.<details sw-sanfona name="faq">
sw-trilhoCarrossel de arrastar com encaixe (tamanhos p, g, cheio; centro). Página.<div sw-trilho="g centro">
sw-travaFormulário: o botão de enviar só libera quando tudo é válido. Página.<form sw-trava>
sw-caixaBloco que muda de forma pelo espaço dele (não pelo tamanho da tela). Página.<div sw-caixa>
sw-corMotor 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.

Seção de perguntas frequentes de um site de serviços Ao vivo

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"… -->
Newsletter no rodapé: botão só libera com e-mail válido Ao vivo
<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>
Página de blog completa, sem uma linha de JavaScript Referência
<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.css 2.1.0 ou mais novo — todas as peças.
  • swcore.compl.min.css — só se usar os ícones swi-*.

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-popover precisa do atributo popover; o sw-dialog tem que estar num <dialog>; o sw-sanfona num <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.

O que ele não faz

  • Não há linha do tempo com várias etapas, prender a tela (pin), sequência de fotos ou texto letra a letra: isso é da área Animações.
  • As peças nativas não substituem os componentes com JavaScript que têm API e eventos próprios (sw-modal, Dropdown, Slider).