Affiche un résumé et se déplie pour révéler du contenu additionnel. À utiliser pour divulguer progressivement de l'information, grouper des FAQ, ou masquer des options avancées — combinez plusieurs instances pour un comportement accordéon.
ar-collapse gère les attributs ARIA et les comportements keyboard sans intervention :
aria-expanded est posé sur le trigger (interne ou externe) et mis à jour à chaque ouverture/fermeture.
aria-controls est posé sur le trigger et pointe vers l’id du host ar-collapse. Si l’auteur ne fournit pas d’id, un identifiant unique est généré automatiquement.
Le panel utilise l’attribut hidden pour les états stables (pas de display:none inline) — compatible avec les styles qui surchargeraient display.
prefers-reduced-motion : si l’utilisateur a activé la préférence système de réduction de mouvement, les animations sont supprimées et les transitions sont instantanées.
Les critères WCAG suivants sont implémentés :
aria-expanded indique l’état ouvert/fermé du panel aux technologies d’assistance (WCAG 4.1.2 ↗ (ouvre dans un nouvel onglet)Name, Role, Value : aria-expanded communique l'état du composant aux AT.)
L’ordre DOM du trigger reflète l’ordre visuel — trigger-position modifie le DOM, pas le CSS order (WCAG 2.4.3 ↗ (ouvre dans un nouvel onglet)Focus Order : l'ordre de focus suit l'ordre visuel.)
Cross-shadow DOM : trigger-id et aria-controls reposent sur des IDs résolus dans le document. Si le trigger et le panel se trouvent dans des shadow roots différents, la référence aria-controls ne sera pas résolue par les technologies d’assistance. De même, le mode accordéon (name) ne fonctionne pas entre shadow roots distincts.
aria-controls → host element : aria-controls pointe sur l’élément <ar-collapse> lui-même (pas sur le panel interne du shadow DOM). Les AT qui traversent le shadow DOM (NVDA 2024+, JAWS 2024+, VoiceOver macOS 14+) résolvent correctement la référence vers le contenu. Sur les AT plus anciens, la relation peut être ignorée. Mitigation en attente : ElementInternals.ariaControlsElements (référence cross-shadow IDL) sera adoptée quand le support navigateur sera suffisant.
Collapse simple avec un trigger interne via `slot="trigger"`.
L'animation de hauteur est activée via `--ar-collapse-duration`.
Contenu qui se révèle à l'ouverture. Peut contenir n'importe quel HTML.
›Voir le code
<ar-collapse style="--ar-collapse-duration:200ms;--ar-collapse-easing:ease">
<button slot="trigger" class="ar-btn ar-btn-secondary">Voir plus</button>
<div style="padding-top:1rem">
<p style="margin:0">Contenu qui se révèle à l'ouverture. Peut contenir n'importe quel HTML.</p>
</div>
</ar-collapse>
L'attribut `trigger-id` accepte l'ID d'un bouton natif situé n'importe où dans la page.
`aria-expanded` et `aria-controls` sont posés automatiquement sur ce bouton.
Contenu piloté par un trigger externe. Utile quand trigger et panel ne peuvent pas être enveloppés dans un wrapper commun.
›Voir le code
<div>
<button id="ar-doc-collapse-ext" class="ar-btn ar-btn-secondary">Révéler le contenu</button>
<ar-collapse trigger-id="ar-doc-collapse-ext" style="--ar-collapse-duration:200ms">
<div style="padding-top:0.75rem">
<p style="margin:0">Contenu piloté par un trigger externe. Utile quand trigger et panel ne peuvent pas être enveloppés dans un wrapper commun.</p>
</div>
</ar-collapse>
</div>
`trigger-position="after"` place le trigger après le contenu dans le DOM (et visuellement).
Utile pour les patterns "Lire la suite" où le bouton apparaît sous le texte tronqué.
Les chimpanzés utilisent des outils, communiquent par gestes et sons, vivent en groupes sociaux complexes avec hiérarchies et alliances.
Leur génome est similaire à 98,7 % à celui de l'humain. Ils fabriquent des outils en bois pour extraire des termites, et utilisent des pierres comme enclumes pour casser des noix.
Les femelles transmettent ces techniques à leurs petits, une forme d'apprentissage culturel rare dans le règne animal.
›Voir le code
<div>
<p style="margin:0 0 0.5rem">Les chimpanzés utilisent des outils, communiquent par gestes et sons, vivent en groupes sociaux complexes avec hiérarchies et alliances.</p>
<ar-collapse trigger-position="after" style="--ar-collapse-duration:200ms">
<div style="padding-bottom: 0.5rem">
<p style="margin:0 0 0.5rem">Leur génome est similaire à 98,7 % à celui de l'humain. Ils fabriquent des outils en bois pour extraire des termites, et utilisent des pierres comme enclumes pour casser des noix.</p>
<p style="margin:0">Les femelles transmettent ces techniques à leurs petits, une forme d'apprentissage culturel rare dans le règne animal.</p>
</div>
<button slot="trigger" style="background:none;border:none;padding:0.25rem 0 0;color:var(--ar-color-interactive,#283276);text-decoration:underline;cursor:pointer;font:inherit">Lire la suite ↓</button>
</ar-collapse>
</div>
L'attribut `disabled` bloque l'interaction. Le composant pose `disabled` et
`aria-disabled="true"` sur le trigger interne.
Ce contenu ne peut pas être révélé.
›Voir le code
<ar-collapse disabled>
<button slot="trigger" class="ar-btn ar-btn-secondary">Toggle (désactivé)</button>
<div style="padding:0.75rem 0"><p>Ce contenu ne peut pas être révélé.</p></div>
</ar-collapse>
Manipulez les attributs pour voir le code et la preview se mettre à jour.
Contenu qui se révèle à l'ouverture. Peut contenir n'importe quel HTML.
<ar-collapse style="--ar-collapse-duration:200ms;--ar-collapse-easing:ease">
<button slot="trigger" class="ar-btn ar-btn-secondary">Voir plus</button>
<div style="padding-top:1rem">
<p style="margin:0">Contenu qui se révèle à l'ouverture. Peut contenir n'importe quel HTML.</p>
</div>
</ar-collapse>
Si vous utilisez l'autoloader, les composants détectés dans la pages sont chargés automatiquement, donc pas besoin de les importer individuellement. Pour un import manuel, voici comment vous y prendre.
Attributs et propriétés 5Slots 2Événements 6Méthodes 2
Attributs et propriétés
1 sur 5
openreflète
Ouvre ou ferme le panel.
TypebooleanDéfautfalse
2 sur 5
triggerIdreflètetrigger-id
ID d'un élément déclencheur externe (light DOM).
Quand défini, le slot `trigger` est ignoré.
TypestringDéfaut''
3 sur 5
namereflète
Groupe accordéon — les panels partageant le même `name` se ferment mutuellement.
TypestringDéfaut''
4 sur 5
triggerPositionreflètetrigger-position
Position du slot trigger par rapport au contenu dans le DOM.
`before` (défaut) : trigger avant le panel. `after` : trigger après le panel.
L'ordre DOM reflète l'ordre visuel — pas de CSS `order` — pour respecter WCAG 2.4.3.
Type'before' | 'after'Défaut'before'
5 sur 5
disabledreflète
Désactive le composant — le trigger ne répond plus aux clics.
TypebooleanDéfautfalse
Slots
1 sur 2trigger
Élément déclencheur (ignoré si `trigger-id` est défini).
CSS Parts 4CSS Custom States 3CSS Custom Properties 2
CSS Parts
Utilisez ::part(name) pour styler ces éléments depuis l'extérieur. Certaines parts indiquent un rôle transverse, partagé avec d'autres composants — voir Personnalisation avancée.
1 sur 4collapse
Racine du composant.
2 sur 4trigger-container
Wrapper du slot trigger.
3 sur 4collapsible
Zone animée (overflow hidden, height 0 → auto). Nom distinct de `panel` (rôle transverse = conteneur flottant) : ce wrapper n'est jamais flottant.
4 sur 4body
Wrapper interne du contenu.
CSS Custom States
Utilisez le sélecteur :state(name) sur le tag pour styler ce composant en fonction de son état. Composable avec ::part() pour cibler un élément interne (ar-collapse:state(name)::part(x)). Sous Chrome et Edge 125, l'état est exposé avec le préfixe -- (:--name) : voir Compatibilité.
1 sur 3:state(open)
Le panel est ouvert.
2 sur 3:state(disabled)
Le composant est désactivé.
3 sur 3:state(animating)
Le panel est en cours d'ouverture ou de fermeture (animation height).