Accordéon
L’accordéon est un élément d’interaction avec l’interface permettant à l’usager d'afficher ou de masquer une section de contenu présentée dans une page.
HTML
Structure du composant
Le composant Accordéon est composé de deux parties : son titre qui contient le bouton d'ouverture, et un bloc de contenu libre refermable, dit "collapse". Sa structure est la suivante :
-
Le conteneur de l'accordéon est une balise
<section>
avec la classefr-accordion
. -
Son titre est contenu dans un niveau d'entête
<hx>
, variable en fonction de sa hiérarchie dans la page (par défaut h3), et possède la classefr-accordion__title
. -
Un
<button>
est placé dans cette balise<hx>
, et son libellé constitue le titre.- Le bouton doit être de type "button".
-
Le bouton dispose d'un attribut
aria-expanded
, sa valeur [true|false] défini si le collapse est ouvert ou fermé -
Le bouton est lié au collapse via l'attribut
aria-controls
, sa valeur doit correspondre à l'attributid
du collapse.
-
Le bloc refermable, défini par la classe
fr-collapse
, est une<div>
placée après le titre. Il s'agit d'un élément générique du core utilisé par d'autres composants tels que la navigation ou la transcription.-
Il dispose d'un attribut
id
obligatoire, pour être lié au bouton d'ouverture. -
Son contenu est libre, mais nécessite l'utilisation des
balises adéquates, il n'est pas correcte de placer du texte
directement dans une
<div>
.
-
Il dispose d'un attribut
Exemple de structure HTML
<section class="fr-accordion">
<h3 class="fr-accordion__title">
<button type="button" class="fr-accordion__btn" aria-expanded="false" aria-controls="accordion-1">Libellé accordéon</button>
</h3>
<div id="accordion-1" class="fr-collapse">
<!-- données de l'accordéon -->
</div>
</section>
Groupe d'accordéons
L'accordéon peut être utilisé en groupe de plusieurs éléments, liés ou non entre eux. Les accordéons sont disposés à la suite dans un conteneur.
-
Le conteneur est une
<div>
défini par la classefr-accordions-group
-
Le conteneur peut posséder un attribut
data-fr-group
, sa valeur [true|false] permet de lier les accordéons entre eux ou non. Sitrue
, lorsqu'un accordion est ouvert les autres se referment. Sifalse
, il est possible d'en ouvrir plusieurs. Si l'attribut n'est pas défini les accordéons sont groupés par défaut.
Exemple de structure HTML
<div class="fr-accordions-group" data-fr-group="true">
<section class="fr-accordion">
...
</section>
<section class="fr-accordion">
...
</section>
</div>
CSS
Installation du CSS
Pour fonctionner correctement le style CSS de l'accordéon et du
core doivent être importés. L'import doit se faire avant le
contenu de la page dans la partie
<head
, et de
préférence avec le fichier minifié, car plus léger.
<link href="dist/core/core.min.css" rel="stylesheet">
<link href="dist/component/accordion/accordion.min.css" rel="stylesheet">
NB: Il est aussi possible d'importer le CSS global du DSFR
dsfr.min.css
Pour fonctionner sur Internet Explorer 11, un fichier legacy, peut aussi être importé :
<link href="dist/core/core.legacy.min.css" rel="stylesheet">
<link href="dist/component/accordion/accordion.legacy.min.css" rel="stylesheet">
Variante de style
Sur l'accordéon, aucune variation ni accentuation n'est possible.
Quand le JavaScript est activé, le bloc refermable (collapse)
reçoit la classe
fr-collapse--expanded
lorsque le bouton lié possède l'attribut
aria-expanded="true"
. C'est cette classe qui ouvre le collapse.
JavaScript
Pour fonctionner le composant accordéon nécessite l'utilisation de JavaScript.
Installation du JavaScript
Chaque composant utilisant javascript possède un fichier Js spécifique et requiert le fichier Js du core.
Il est donc nécessaire d'importer ces fichiers à la fin de la page
(avant </body>
) :
<script type="module" src="dist/core/core.module.min.js"></script>
<script type="module" src="dist/component/accordion/accordion.module.min.js"></script>
NB: Il est aussi possible d'importer le Js global du DSFR
dsfr.module.js
Pour fonctionner sur Internet Explorer 11, un fichier legacy, en version nomodule ES5, peut aussi être importé :
<script type="text/javascript" nomodule href="dist/legacy/legacy.nomodule.min.js" ></script>
<script type="text/javascript" nomodule src="dist/core/core.nomodule.min.js"></script>
<script type="text/javascript" nomodule src="dist/component/accordion/accordion.nomodule.min.js"></script>
Une fois le JavaScript chargé, le composant fonctionne automatiquement.
Instances
Sur l'accordéon, les éléments suivants sont instanciés :
-
Le groupe, via la classe :
fr-accordions-group
-
L'accordéon, via la classe :
fr-accordion
-
Le bouton d'ouverture, via la classe
fr-accordion__btn
-
Le collapse, via la classe
fr-collapse
Une fois chargé, le Js ajoute un attribut
data-fr-js-NOM_INSTANCE="true"
sur chacun des éléments instanciés
API
Il est possible d'interagir avec les instances du composants en JavaScript via une API.
Cette API est disponible depuis la méthode
window.dsfr(instance)
du
core.
Exemple :
const elem = document.getElementById('ID_COLLAPSE');
dsfr(elem).collapse.disclose();
L'ensemble des propriétés et méthodes disponibles sont définies ci-après :
accordion
Description | Renvoie le noeud HTML de l'élément. |
---|---|
Type | property |
Retour | DOMElement |
Exemple |
dsfr(elem).accordion.node
|
Description | Défini si le fonctionnement de l'accordéon est activé ou non |
---|---|
Type | property |
Retour | Boolean |
Exemple |
dsfr(elem).accordion.isEnabled = false
|
accordionGroup
Description |
Retourne l'API du collapse ouvert. Si aucun collapse n'est ouvert, ou si plusieurs collapses sont ouverts, renvoie null .
|
---|---|
Type | property |
Retour | object | null |
Exemple |
dsfr(elem).accordionsGroup.current
|
Description |
Renvoie
true si le
focus est sur un des éléments du groupe.
|
---|---|
Type | property |
Retour | Boolean |
Exemple |
dsfr(elem).accordionsGroup.hasFocus
|
Description |
Retourne ou modifie l'index de l'accordéon courant.
Si aucun collapse n'est ouvert, l'index vaut 0. |
---|---|
Type | property |
Retour | Number |
Exemple |
dsfr(elem).accordionsGroup.index
dsfr(elem).accordionsGroup.index = 2
|
Description |
Défini si les accordéons du groupe sont liés en eux
ou non. Si true ,
lorsqu'un accordion est ouvert les autres se
referment. Si
false ,
il est possible d'en ouvrir plusieurs. Si
l'attribut n'est pas défini les accordéons sont
groupés par défaut.
|
---|---|
Type | property |
Retour | Boolean |
Exemple |
dsfr(elem).accordionsGroup.isGrouped
dsfr(elem).accordionsGroup.isGrouped = true
|
Description | Retourne le nombre d'accordéons dans le groupe. |
---|---|
Type | property |
Retour | Number |
Exemple |
dsfr(elem).accordionsGroup.length
|
Description | Renvoie un tableau d'objets correspondant aux collapses des accordéons du groupe. |
---|---|
Type | property |
Retour | Array |
Exemple |
dsfr(elem).accordionsGroup.members
|
Description | Renvoie le noeud HTML de l'élément. |
---|---|
Type | property |
Retour | DOMElement |
Exemple |
dsfr(elem).accordionsGroup.node
|
accordion
Description | Défini si le fonctionnement de l'accordéon est activé ou non |
---|---|
Type | property |
Retour | true | false |
Exemple |
dsfr(elem).accordion.isEnabled = false
|
collapseButton
Description | Replace le focus sur le bouton |
---|---|
Type | function |
Arguments | none |
Retour | Boolean |
Exemple |
dsfr(elem).collapseButton.focus()
|
Description | Retourne l'instance du dsfr parente, ici l'accordéon |
---|---|
Type | property |
Retour | object | null |
Exemple |
dsfr(elem).parent
|
Description | Renvoie le noeud HTML de l'élément. |
---|---|
Type | property |
Retour | DOMElement |
Exemple |
dsfr(elem).collapseButton.node
|
collapse
Description | Ferme le collapse |
---|---|
Type | function |
Arguments | none |
Retour | none |
Exemple |
dsfr(elem).collapse.conceal()
|
Description | Ouvre le collapse |
---|---|
Type | function |
Arguments | none |
Retour | none |
Exemple |
dsfr(elem).collapse.disclose()
|
Description | Retourne vrai si le collapse est ouvert |
---|---|
Type | property |
Retour | Boolean |
Exemple |
dsfr(elem).collapse.isDisclosed
|
Description | Défini si le fonctionnement de l'accordéon est activé ou non |
---|---|
Type | property |
Retour | Boolean |
Exemple |
dsfr(elem).collapse.isEnabled = false
|
Description | Retourne l'API du groupe, ou null s'il n'y a pas de groupe |
---|---|
Type | property |
Retour | object | null |
Exemple |
dsfr(elem).collapse.group
|
Description | Retourne un tableau de boutons d'ouverture du collapse |
---|---|
Type | property |
Retour | Array |
Exemple |
dsfr(elem).collapse.buttons
|
Description | Replace le focus sur le bouton du collapse |
---|---|
Type | function |
Arguments | none |
Retour | Boolean |
Exemple |
dsfr(elem).collapse.focus()
|
Description | Retourne l'instance du dsfr parent, ici l'accordéon |
---|---|
Type | property |
Retour | object | null |
Exemple |
dsfr(elem).parent
|
Description | Renvoie un tableau d'instances enfants |
---|---|
Type | property |
Retour | Array |
Exemple |
dsfr(elem).children
|
Description | Renvoie le noeud HTML de l'élément. |
---|---|
Type | property |
Retour | DOMElement |
Exemple |
dsfr(elem).collapse.node
|
Événements
Le Système de Design fournit des événements personnalisés pour les actions uniques de la part de certains composants réactifs listés sur la page de l' API Javascript .
Sur l'accordéon et le groupe d'accordéons, les événements suivants sont disponibles :
Événement | Action | Élément | Attribut |
---|---|---|---|
dsfr.conceal
|
Fermeture de l'élément | Collapse |
data-fr-js-collapse
|
dsfr.disclose
|
Ouverture de l'élément | Collapse |
data-fr-js-collapse
|
dsfr.click
|
Click sur le bouton d'ouverture | CollapseButton |
data-fr-js-collapse-button
|
Note de version
Voir les évolutions sur github
v1.13.2 - 15 mai 2025
collapses ouverts au chargement
-
Ajout de la classe
fr-collapse--expanded
en html, sur les collapse ouverts par défaut, pour éviter l'ouverture après le chargement du js. - Ajout d'exemples d'accordéon et sidemenu avec collapses ouverts au chargement
#1140
v1.13.0 - 4 décembre 2024
ouverture initiale des accordéons dégroupés
- Correction lorsque tous les disclosures d'un groupe avec l'attribut group="false" sont ouverts au chargement
#1032
v1.11.1 - 31 janvier 2024
ajoute un attribut pour dégrouper
-
ajout d'un attribut
data-fr-group="false"
pour dissocier le comportement d'ouverture/fermeture des accordéons à l'intérieur d'un groupe d'accordéons - étend l'utilisation de cet attribut aux composants héritant du collapses-group : la navigation (uniquement en mobile) et le menu latéral
#860
v1.10.0 - 19 juillet 2023
Ajustement sur l'état défaut et actif
Harmonisation avec la navigation sur Accordion, Sidemenu, Translate et Transcription :
- Passage icône et intitulé en action-high-blue-france
- Ajout background-open-blue-france sur le bouton lorsque l'élément est ouvert
- Icône “arrow-down-s-ligne” (la même que sur navigation)
- Accordion, Translate : Retrait changement de graisse (normal -> bold) à l'ouverture et graisse constante en medium
#564