Les accordéons, c'étaient autrefois trois cents lignes de JavaScript pour le travail de deux balises. Donnez un même attribut name à un groupe de <details> et le navigateur en ouvre un et ferme les autres pour vous.

<details name="faq" open>
  <summary>What makes this an accordion?</summary>
  <p>The name attribute groups the panels; opening one closes the rest.</p>
</details>
<details name="faq">
  <summary>Works without JavaScript?</summary>
  <p>It never needed any.</p>
</details>

Ce que le navigateur fait pour vous

  • Clavier : l'onglet atteint chaque résumé, bascule Entrée ou Espace, aucun code de piège de focus n'existe pour se tromper.
  • Les lecteurs sans JavaScript bénéficient d'une expérience complète, car il n'y a rien à casser pour un script désactivé.
  • Les moteurs de recherche lisent le contenu dans les deux sens : les panneaux sont de véritables DOM, pas un div caché en attente d'hydratation.

Améliorer un vieil accordéon

  1. Remplacez le script par un <details> par panneau, tous partageant une même valeur de name.
  2. Déplacez le texte de l'ancien bouton dans le <summary> ; l'icône chevron reste en CSS.
  3. Supprimez le handler de clic et les attributs d'état ARIA ; <summary> est déjà le toggle.
  4. Test clavier uniquement : tous les résumés accessibles, un seul panneau ouvert par groupe.

Besoin d'animations ? Décorez les transitions détails[ouvertes] en CSS et laissez le navigateur conserver l'état. Le résultat très intéressant : moins de code et un accès plus large au lieu de moins d'accès.