Accordéon
L’accordéon regroupe des panneaux de contenu dont un seul titre reste visible tant qu’on ne l’ouvre pas. Il convient aux foires aux questions, aux conditions d’un produit et aux contenus longs que l’on parcourt par rubriques.
Accordéon de base#
Chaque rubrique associe un bouton accordion-button à un panneau accordion-collapse. Ici, les panneaux restent indépendants : vous pouvez en laisser plusieurs ouverts. Le premier est ouvert au chargement grâce à show ; son bouton n’a donc pas la classe collapsed.
<div class="accordion" id="acc-base">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#acc-base-1" aria-expanded="true" aria-controls="acc-base-1">
Comment consulter le solde de mon compte ?
</button>
</h2>
<div id="acc-base-1" class="accordion-collapse collapse show">
<div class="accordion-body">
Connectez-vous à votre espace client, puis ouvrez la rubrique « Comptes ». Le solde disponible s'affiche en FCFA et se met à jour après chaque opération.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#acc-base-2" aria-expanded="false" aria-controls="acc-base-2">
Quel est le plafond de mes virements ?
</button>
</h2>
<div id="acc-base-2" class="accordion-collapse collapse">
<div class="accordion-body">
Le plafond dépend de votre type de compte. À titre d'exemple, un compte courant peut être limité à 2 000 000 FCFA par jour pour les virements vers un autre établissement. Votre conseiller peut le relever sur demande.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#acc-base-3" aria-expanded="false" aria-controls="acc-base-3">
Que faire en cas de perte de ma carte ?
</button>
</h2>
<div id="acc-base-3" class="accordion-collapse collapse">
<div class="accordion-body">
Faites opposition immédiatement auprès de votre agence ou du service client, puis demandez le remplacement de la carte. Les opérations effectuées après l'opposition ne vous sont pas imputées.
</div>
</div>
</div>
</div>Un seul panneau ouvert à la fois#
Ajoutez data-bs-parent sur chaque panneau, avec l’identifiant de l’accordéon : l’ouverture d’un panneau referme les autres.
<div class="accordion" id="acc-parent">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#acc-parent-1" aria-expanded="true" aria-controls="acc-parent-1">
Épargne
</button>
</h2>
<div id="acc-parent-1" class="accordion-collapse collapse show" data-bs-parent="#acc-parent">
<div class="accordion-body">
Un livret d'épargne vous permet de mettre de l'argent de côté dès 5 000 FCFA, avec des retraits possibles à tout moment.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#acc-parent-2" aria-expanded="false" aria-controls="acc-parent-2">
Prêts
</button>
</h2>
<div id="acc-parent-2" class="accordion-collapse collapse" data-bs-parent="#acc-parent">
<div class="accordion-body">
Le prêt personnel finance un projet en mensualités fixes. Utilisez le simulateur pour estimer votre mensualité avant de déposer une demande.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#acc-parent-3" aria-expanded="false" aria-controls="acc-parent-3">
Cartes
</button>
</h2>
<div id="acc-parent-3" class="accordion-collapse collapse" data-bs-parent="#acc-parent">
<div class="accordion-body">
La carte de retrait permet de retirer des espèces aux distributeurs de la banque ; la carte de paiement sert aussi chez les commerçants.
</div>
</div>
</div>
</div>Version sans bordures#
Ajoutez accordion-flush pour retirer la bordure extérieure, les angles arrondis et le fond. L’accordéon s’intègre alors dans une carte ou une zone déjà encadrée.
<div class="accordion accordion-flush border rounded" id="acc-flush">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#acc-flush-1" aria-expanded="false" aria-controls="acc-flush-1">
Frais de tenue de compte
</button>
</h2>
<div id="acc-flush-1" class="accordion-collapse collapse" data-bs-parent="#acc-flush">
<div class="accordion-body">Les frais sont prélevés chaque mois et apparaissent sur votre relevé.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#acc-flush-2" aria-expanded="false" aria-controls="acc-flush-2">
Frais de virement
</button>
</h2>
<div id="acc-flush-2" class="accordion-collapse collapse" data-bs-parent="#acc-flush">
<div class="accordion-body">Les virements entre vos propres comptes sont gratuits ; les autres sont facturés selon la grille tarifaire.</div>
</div>
</div>
</div>Classes
| Classe | Rôle |
|---|---|
accordion | Conteneur de l’ensemble. Son id sert de cible à data-bs-parent. |
accordion-item | Une rubrique : un en-tête et son panneau. |
accordion-header | Titre de la rubrique (h2 à h6 selon votre hiérarchie) qui contient le bouton. |
accordion-button | Bouton qui ouvre et ferme le panneau. Ajoutez collapsed quand le panneau est fermé. |
accordion-collapse | Panneau repliable. Combinez-le avec collapse, et avec show pour l’ouvrir au chargement. |
accordion-body | Contenu du panneau, avec son espacement interne. |
accordion-flush | Variante sans bordure extérieure ni angles arrondis, à poser sur accordion. |
Options JavaScript
L’accordéon repose sur le composant de repli. Les options se passent par attributs data-bs-* ou dans l’objet de configuration. Voir aussi la page Repli.
| Option | Type | Défaut | Description |
|---|---|---|---|
parent | sélecteur ou élément | null | Si renseigné, les autres panneaux de ce conteneur se referment à l’ouverture du panneau. Attribut : data-bs-parent. |
toggle | booléen | true | Bascule le panneau dès la création de l’instance. Passez { toggle: false } pour créer l’instance sans changer l’état du panneau. |
Méthodes et événements
Les événements sont émis sur le panneau (accordion-collapse), pas sur le bouton.
| Nom | Description |
|---|---|
toggle() | Ouvre le panneau s’il est fermé, le ferme sinon. Rend la main avant la fin de l’animation. |
show() | Ouvre le panneau. Sans effet s’il est déjà ouvert ou en cours d’animation. |
hide() | Ferme le panneau. Sans effet s’il est déjà fermé ou en cours d’animation. |
dispose() | Détruit l’instance et libère les écouteurs. |
getInstance(element) | Méthode statique : renvoie l’instance associée à l’élément, ou null. |
getOrCreateInstance(element, options) | Méthode statique : renvoie l’instance existante ou en crée une. |
show.bs.collapse | Au début de l’ouverture. preventDefault() annule l’ouverture. |
shown.bs.collapse | Quand le panneau est entièrement ouvert, animation terminée. |
hide.bs.collapse | Au début de la fermeture. preventDefault() annule la fermeture. |
hidden.bs.collapse | Quand le panneau est entièrement fermé, animation terminée. |
Attributs data-bs
| Attribut | Où le poser | Rôle |
|---|---|---|
data-bs-toggle="collapse" | Bouton | Active le comportement d’ouverture et de fermeture. |
data-bs-target="#id" | Bouton | Sélecteur du panneau à piloter. |
data-bs-parent="#id" | Panneau | Garde un seul panneau ouvert dans l’accordéon désigné. |
aria-expanded | Bouton | true si le panneau est ouvert, false sinon. Le script le met à jour. |
aria-controls | Bouton | Identifiant du panneau contrôlé. |
Variables Sass
À définir avant l’import de Cauri. Les valeurs par défaut sont celles du thème BDU.
| Variable | Défaut | Rôle |
|---|---|---|
$accordion-padding-y | 1rem | Espacement vertical des boutons et des panneaux. |
$accordion-padding-x | 1.25rem | Espacement horizontal des boutons et des panneaux. |
$accordion-color | var(--bs-body-color) | Couleur du texte du panneau. |
$accordion-bg | var(--bs-body-bg) | Fond de l’accordéon. |
$accordion-border-width | var(--bs-border-width) | Épaisseur des bordures. |
$accordion-border-color | var(--bs-border-color) | Couleur des bordures. |
$accordion-border-radius | var(--bs-border-radius) | Arrondi des angles (5 px dans Cauri). |
$accordion-button-color | var(--bs-body-color) | Couleur du texte du bouton. |
$accordion-button-active-bg | var(--bs-primary-bg-subtle) | Fond du bouton quand le panneau est ouvert. |
$accordion-button-active-color | var(--bs-primary-text-emphasis) | Texte du bouton quand le panneau est ouvert. |
$accordion-icon-width | 1.25rem | Largeur du chevron. |
$accordion-icon-color | $body-color | Couleur du chevron fermé. |
$accordion-icon-active-color | $primary-text-emphasis | Couleur du chevron ouvert. |
$accordion-icon-transition | transform .2s ease-in-out | Animation du chevron. |
$accordion-icon-transform | rotate(-180deg) | Rotation du chevron à l’ouverture. |
$accordion-button-icon | SVG en data: URI | Image du chevron fermé ; $accordion-button-active-icon pour l’état ouvert. |
Personnalisation#
Les variables Sass modifient l’accordéon pour tout le site. Pour un seul accordéon, redéfinissez les propriétés CSS --bs-accordion-* sur son conteneur.
// Global : avant l'import de Cauri
$accordion-button-active-bg: #EEF3EA;
$accordion-button-active-color: #212121;
$accordion-padding-y: 1.25rem;
// Local : sur un accordéon précis
.accordion-compact {
--bs-accordion-btn-padding-y: 0.5rem;
--bs-accordion-body-padding-y: 0.5rem;
--bs-accordion-active-bg: #EEF3EA;
--bs-accordion-active-color: #212121;
}Piloter l'accordéon en JavaScript#
const panneau = document.querySelector('#acc-base-2');
const repli = bootstrap.Collapse.getOrCreateInstance(panneau, { toggle: false });
panneau.addEventListener('shown.bs.collapse', () => {
console.log('Panneau ouvert');
});
repli.show();Bonnes pratiques
À faire
- Utilisez un titre court et explicite pour chaque bouton : il doit résumer le contenu du panneau.
- Ouvrez par défaut le panneau le plus utile, ou aucun si les rubriques sont d’égale importance.
- Ajoutez
data-bs-parentquand les contenus sont longs, pour garder la page lisible. - Choisissez le niveau de titre (
h2,h3…) deaccordion-headerselon la structure de la page.
À éviter
- Ne cachez pas dans un accordéon une information indispensable à tous (frais, échéances, mentions obligatoires).
- N’imbriquez pas plusieurs accordéons : la lecture devient pénible, surtout sur mobile.
- N’ajoutez pas de lien ou de bouton d’action essentiel uniquement dans un panneau fermé.
Accessibilité
- Le bouton doit être un vrai
buttonplacé dans un titre ; gardezaria-expandedetaria-controlscohérents avec l’état. - Le clavier fonctionne par défaut :
Tabpour atteindre un bouton,EntréeouEspacepour l’ouvrir. - Les panneaux fermés sont masqués aux lecteurs d’écran ; n’y placez pas de contenu qui doit rester annoncé.
- Les animations sont supprimées pour les personnes qui ont demandé une réduction des animations.