GrignaDesign System

Accordion

Cos'è Grigna?

Un design system pensato per persone e agenti AI: token, componenti e linee guida scritte per due lettori.

Quali icone usa?

Lucide 1.57.0, una sola libreria per tutto il sistema.

Si può usare in altri progetti?

Per ora no: è un progetto personale e un caso studio.

Cos'è

Una lista di sezioni con un titolo sempre visibile e un contenuto che si apre e si chiude cliccando sul titolo.

Quando usarlo

  • Domande frequenti, dettagli tecnici, informazioni secondarie che non devono occupare spazio.
  • Quando chi legge cerca una sola risposta tra tante, e le altre possono restare chiuse.

Quando non usarlo

  • Per informazioni importanti che tutti devono leggere: nasconderle non le rende più semplici, le rende invisibili.
  • Per passi in sequenza, come una procedura: lì serve una struttura che mostri l'ordine.
  • Un accordion dentro un altro accordion: mai.
  • Con una sola sezione: basta il testo, o un link "mostra di più".

Codice

<div class="grigna-accordion">
  <details class="grigna-accordion__item">
    <summary class="grigna-accordion__summary">Titolo della sezione</summary>
    <div class="grigna-accordion__content">
      <p>Contenuto della sezione.</p>
    </div>
  </details>
  <details class="grigna-accordion__item">
    <summary class="grigna-accordion__summary">Altra sezione</summary>
    <div class="grigna-accordion__content">
      <p>Altro contenuto.</p>
    </div>
  </details>
</div>

Non serve JavaScript: apertura e chiusura le gestisce il browser.

Varianti e stati

ComeRisultato
(nessun attributo)Si possono aprire più sezioni insieme. È il comportamento di default
Stesso name="…" su tutti i <details> del gruppoUna sola sezione aperta alla volta: aprendone una, le altre si chiudono
open su un <details>Quella sezione è aperta quando la pagina si carica
Hover, focusSuperficie tenue al passaggio del mouse, anello Abete da tastiera

La freccia a destra la disegna il CSS: punta in giù da chiuso e in su da aperto.

Testi

  • Titolo: dice cosa c'è dentro, in poche parole. Una domanda funziona bene per le FAQ ("Quali icone usa?").
  • Contenuto: breve. Se un contenuto è lungo, forse merita una pagina sua.

Token

--grigna-accordion-bg, -bg-hover, -border, -icon, -text, -radius, -min-height, -padding-x, -padding-y, -gap, -summary-font, -content-font (tutti con prefisso --grigna-accordion).

Accessibilità

  • <details> e <summary> sono nativi: tastiera (Invio e Spazio), stato "aperto/chiuso" letto dallo screen reader e ricerca nella pagina anche dentro le sezioni chiuse funzionano senza codice in più.
  • Area cliccabile del titolo alta almeno 44px.
  • Il titolo è testo semplice: niente link o bottoni dentro <summary>.

Per gli agenti

Sempre

  • Struttura completa: grigna-accordion > details.grigna-accordion__item > summary.grigna-accordion__summary + div.grigna-accordion__content.
  • Per "una sola aperta alla volta" usa l'attributo name, uguale su tutto il gruppo.

Mai

  • Mai ricostruire l'accordion con <div> e JavaScript: usa <details> e <summary>.
  • Mai link, bottoni o altri controlli dentro <summary>.
  • Mai accordion annidati, mai un accordion con una sola sezione.
  • Mai nascondere in un accordion informazioni che tutti devono leggere.