accordion
Accordion entrega muito conteúdo em pouco espaço através de divulgação progressiva. Usuário escolhe quais seções expandir. Bom pra FAQ, configurações agrupadas, especificações.
overview
Conteúdo da primeira seção. Pode ter qualquer coisa aqui: texto, listas, outros componentes.
Conteúdo da segunda seção.
Conteúdo da terceira seção.
variantes
| variante | comportamento |
|---|---|
| single (default) | abrir um fecha os outros · economia visual |
| multi | permite múltiplos abertos simultaneamente · permite comparação |
multi
Vários itens abertos ao mesmo tempo.
Aberto.
Também aberto.
estados
| estado | indicação |
|---|---|
| collapsed | chevron apontando à direita |
| expanded | chevron rotacionado 90° · body visível |
| hover | background-hover no header |
| focus | outline 2px no header |
anatomia
- Header — clicável, mostra label do item
- Chevron — indica estado (apontando = colapsado, virado = expandido)
- Body — revela ao expandir
comportamentos
- Click no header alterna expansão
- Enter ou Space no header também alterna (focus no header)
- No modo single, abrir um fecha os outros
- Transição de chevron: 110ms
- Estado inicial controlado por classe
.openno item
modifiers · api
| atributo | tipo | default | descrição |
|---|---|---|---|
| data-mode | "single" | "multi" | "single" | modo de expansão |
| .open (no item) | class | — | estado inicial expandido |
| aria-expanded | boolean | "false" | setado automaticamente pelo JS |
quando usar
use
não use
acessibilidade
- Header é elemento
<button>, não div - aria-expanded reflete o estado (true / false)
- aria-controls aponta pro ID do body
- Foco visível no header
- Funciona via teclado (Enter / Space)
- Estado expand/collapse é anunciado por leitor de tela
código
<!-- markup -->
<div class="accordion" data-mode="single">
<div class="accordion-item open">
<button class="accordion-header">label<span class="chevron">›</span></button>
<div class="accordion-body">conteúdo</div>
</div>
</div>
// JS é auto-inicializado pelo components.js