SW Core
SW Core / CSS / Sanfona nativa (sw-sanfona)

Sanfona nativa (sw-sanfona) CSS

Perguntas e respostas que abrem e fecham com um toque — HTML puro (<details>), bom para o Google e sem JavaScript.

O que é

É a lista de "Perguntas frequentes" do site: a pessoa toca na pergunta e a resposta aparece embaixo; toca de novo e fecha. Você escreve cada item com a tag <details> do próprio HTML e coloca sw-sanfona nela. Se der o mesmo name a vários itens, o navegador deixa só um aberto por vez.

É só CSS por cima de um recurso que todo navegador já tem. O SW Core tira o triângulo padrão, coloca um "+" na cor do site que gira e vira "×" quando abre, e pinta a borda do item aberto. Como a resposta continua escrita no HTML (só fica escondida), o Google e as IAs conseguem ler tudo — ótimo para aparecer nas buscas.

Quando usar

  • Perguntas frequentes (FAQ) na página de serviço ou de vendas — o uso principal.
  • Detalhes de produto em loja: "Descrição", "Medidas", "Entrega e troca".
  • Textos longos que pouca gente lê: política de privacidade, regulamento, termos.
  • Precisa de estilos diferentes (cartões soltos, sem moldura, ícone de seta) ou de abrir por JavaScript? Use o Accordion. A sanfona é a versão mais leve.

Comece aqui

  1. 1

    Coloque o SW Core no <head>. A sanfona é só CSS: não precisa do arquivo de JavaScript.

    <link rel="stylesheet" href="swcore/swcore.min.css">
  2. 2

    Cada pergunta é um <details sw-sanfona>. A pergunta vai no <summary> e a resposta logo abaixo. Mesmo name em todos = só um aberto por vez.

    Quanto tempo leva para ficar pronto?

    De 7 a 15 dias, com textos e fotos em mãos.

    Funciona no celular?

    Sim, todo site nasce pensado primeiro para o celular.

    <details sw-sanfona name="faq" open>
      <summary>Quanto tempo leva para ficar pronto?</summary>
      <p>De 7 a 15 dias, com textos e fotos em mãos.</p>
    </details>
    <details sw-sanfona name="faq">
      <summary>Funciona no celular?</summary>
      <p>Sim, todo site nasce pensado primeiro para o celular.</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. Como abre e fecha

Três jeitos, todos com o mesmo visual. A diferença está nos atributos normais do HTML: name e open.

Vocês emitem nota fiscal?

Sim, para pessoa física e jurídica.

Aceitam cartão?

Cartão de crédito em até 12x, Pix e boleto.

Sem name — cada item abre e fecha sozinho (vários abertos ao mesmo tempo)
<details sw-sanfona>
  <summary>Vocês emitem nota fiscal?</summary>
  <p>Sim, para pessoa física e jurídica.</p>
</details>
<details sw-sanfona>
  <summary>Aceitam cartão?</summary>
  <p>Cartão de crédito em até 12x, Pix e boleto.</p>
</details>
Quanto custa a manutenção?

A partir de R$ 90 por mês, com backup e atualizações.

Posso cancelar quando quiser?

Pode, sem multa. É só avisar com 30 dias.

O domínio fica no meu nome?

Sempre. O domínio e o site são seus.

name="…" igual em todos — abrir um fecha o outro
<details sw-sanfona name="sf-g2">
  <summary>Quanto custa a manutenção?</summary>
  <p>A partir de R$ 90 por mês, com backup e atualizações.</p>
</details>
<details sw-sanfona name="sf-g2">
  <summary>Posso cancelar quando quiser?</summary>
  <p>Pode, sem multa. É só avisar com 30 dias.</p>
</details>
<details sw-sanfona name="sf-g2">
  <summary>O domínio fica no meu nome?</summary>
  <p>Sempre. O domínio e o site são seus.</p>
</details>
Como faço meu pedido?

Escolha o produto, clique em "Comprar" e pague como preferir.

Em quanto tempo chega?

De 2 a 7 dias úteis, dependendo do CEP.

open — o item já começa aberto
<details sw-sanfona name="sf-g3" open>
  <summary>Como faço meu pedido?</summary>
  <p>Escolha o produto, clique em "Comprar" e pague como preferir.</p>
</details>
<details sw-sanfona name="sf-g3">
  <summary>Em quanto tempo chega?</summary>
  <p>De 2 a 7 dias úteis, dependendo do CEP.</p>
</details>

2. O que pode ir dentro

A resposta é HTML normal: parágrafo, lista, link, botão, imagem. Tudo que não é o <summary> ganha o mesmo recuo.

O que está incluso no plano?
  • Site com até 5 páginas
  • Formulário de contato
  • Botão de WhatsApp

Ver todos os planos

Lista e link na resposta
<details sw-sanfona open>
  <summary>O que está incluso no plano?</summary>
  <ul>
    <li>Site com até 5 páginas</li>
    <li>Formulário de contato</li>
    <li>Botão de WhatsApp</li>
  </ul>
  <p><a href="#">Ver todos os planos</a></p>
</details>
Onde vocês ficam?

Rua das Flores, 120 — Centro. Estacionamento no local.

Abrir no mapa

Ícone no título e botão na resposta
<details sw-sanfona>
  <summary><span class="flx alc gap-2"><i class="swi-map"></i> Onde vocês ficam?</span></summary>
  <p>Rua das Flores, 120 — Centro. Estacionamento no local.</p>
  <p><a href="#" sw-btn="pri p">Abrir no mapa</a></p>
</details>

Tabela de opções

PalavraO que fazExemplo
Na tag details
sw-sanfonaLiga o visual do SW Core: borda, "+" que gira, borda colorida quando aberto. Só funciona em <details>.<details sw-sanfona>
nameAtributo do HTML. Mesmo valor em vários itens = só um aberto por vez (abrir um fecha os outros). Sem name = cada um independente.name="faq"
openAtributo do HTML. O item começa aberto.<details sw-sanfona open>
Partes de dentro
<summary>A pergunta/título. É onde a pessoa clica. Tem que ser o primeiro filho.<summary>Pergunta</summary>
(o resto)Qualquer HTML depois do summary é a resposta.<p>Resposta</p>

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

FAQ da página de serviço, com dados para o Google Ao vivo
Quanto custa um site?

Sites institucionais a partir de R$ 1.200, em até 12x.

Vocês fazem a hospedagem?

Sim. O primeiro ano de hospedagem já vem incluso.

Aparece no Google?

Sim, o site sai com SEO básico e dados estruturados.

<section>
  <h2>Perguntas frequentes</h2>
  <details sw-sanfona name="faq" open>
    <summary>Quanto custa um site?</summary>
    <p>Sites institucionais a partir de R$ 1.200, em até 12x.</p>
  </details>
  <details sw-sanfona name="faq">
    <summary>Vocês fazem a hospedagem?</summary>
    <p>Sim. O primeiro ano de hospedagem já vem incluso.</p>
  </details>
</section>

<!-- mesmas perguntas em formato que o Google e as IAs entendem -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    { "@type": "Question", "name": "Quanto custa um site?",
      "acceptedAnswer": { "@type": "Answer", "text": "Sites institucionais a partir de R$ 1.200, em até 12x." } },
    { "@type": "Question", "name": "Vocês fazem a hospedagem?",
      "acceptedAnswer": { "@type": "Answer", "text": "Sim. O primeiro ano de hospedagem já vem incluso." } }
  ]
}
</script>
Loja: detalhes do produto Ao vivo
Descrição

Camiseta 100% algodão, fio 30.1, costura reforçada.

Medidas
  • P — 50 × 70 cm
  • M — 53 × 72 cm
  • G — 56 × 74 cm
Entrega e troca

Envio em 24h. Primeira troca grátis em até 30 dias.

<details sw-sanfona name="produto" open>
  <summary>Descrição</summary>
  <p>Camiseta 100% algodão, fio 30.1, costura reforçada.</p>
</details>
<details sw-sanfona name="produto">
  <summary>Medidas</summary>
  <ul>
    <li>P — 50 × 70 cm</li>
    <li>M — 53 × 72 cm</li>
    <li>G — 56 × 74 cm</li>
  </ul>
</details>
<details sw-sanfona name="produto">
  <summary>Entrega e troca</summary>
  <p>Envio em 24h. Primeira troca grátis em até 30 dias.</p>
</details>
Painel: filtros que recolhem Ao vivo
Filtrar pedidos
<details sw-sanfona>
  <summary><span class="flx alc gap-2"><i class="swi-filter"></i> Filtrar pedidos</span></summary>
  <div class="flx f-wr gap-3">
    <label sw-chk><input type="checkbox" checked> Pagos</label>
    <label sw-chk><input type="checkbox"> Aguardando</label>
    <label sw-chk><input type="checkbox"> Cancelados</label>
  </div>
</details>
Saber quando abriu (para contar cliques, por exemplo) Ao vivo
Qual o prazo de garantia?

12 meses contra defeito de fabricação.

Situação: fechada

<details sw-sanfona id="garantia">
  <summary>Qual o prazo de garantia?</summary>
  <p>12 meses contra defeito de fabricação.</p>
</details>

<script>
  document.getElementById('garantia').addEventListener('toggle', (e) => {
    if (e.newState === 'open') {
      console.log('abriu a pergunta da garantia');
    }
  });
</script>

Eventos

toggle (no details)
Evento normal do HTML: dispara quando o item abre ou fecha. event.newState vale "open" ou "closed".

API (JavaScript)

elemento.open = true
Abre o item por código (propriedade do próprio navegador). false fecha.

Precisa de quê

  • swcore.min.css — o visual.
  • swcore.compl.min.css — só se usar ícone swi-* no título.

Cuidados — erros comuns

  • sw-sanfona só funciona na tag <details>. Numa <div> não acontece nada.
  • O <summary> tem que ser o primeiro filho do details, senão o navegador cria um "Detalhes" automático.
  • Dois grupos diferentes na mesma página precisam de name diferente — senão abrir um item de um grupo fecha o do outro.
  • Com name igual, deixe no máximo um item com open.
  • Ponha no summary só o título. Botão ou link dentro do summary fica difícil de clicar sem abrir/fechar junto.

O que ele não faz

  • Abrir e fechar não anima a altura (o conteúdo aparece de uma vez). Para abertura suave, use o Accordion.
  • Tem um visual só (borda + "+"). Variações como cartões soltos ou sem moldura ficam no Accordion.