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
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
Cada pergunta é um
<details sw-sanfona>. A pergunta vai no<summary>e a resposta logo abaixo. Mesmonameem 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.
<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.
<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.
<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
<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>
<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
| Palavra | O que faz | Exemplo |
|---|---|---|
| Na tag details | ||
sw-sanfona | Liga o visual do SW Core: borda, "+" que gira, borda colorida quando aberto. Só funciona em <details>. | <details sw-sanfona> |
name | Atributo 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" |
open | Atributo 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.
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>
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>
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>
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)event.newState vale "open" ou "closed".API (JavaScript)
elemento.open = truefalse fecha.Precisa de quê
swcore.min.css— o visual.swcore.compl.min.css— só se usar íconeswi-*no título.
Cuidados — erros comuns
sw-sanfonasó 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
namediferente — senão abrir um item de um grupo fecha o do outro. - Com
nameigual, deixe no máximo um item comopen. - Ponha no summary só o título. Botão ou link dentro do summary fica difícil de clicar sem abrir/fechar junto.

