Le tablist reçoit role="tablist", chaque onglet role="tab" et chaque panneau role="tabpanel".
Les associations aria-controls (onglet → panneau) et aria-labelledby (panneau → onglet) sont calculées et posées automatiquement sur les hôtes en light DOM — les IDREF restent dans le même arbre et sont lisibles par les technologies d’assistance.
WCAG 2.1.1 ↗ (ouvre dans un nouvel onglet)Keyboard : toutes les fonctionnalités doivent être accessibles au clavier.
: navigation ←/→ entre les onglets, Home/End pour le premier/dernier, Tab pour atteindre le
panneau actif.
L’onglet actif a tabindex="0", les inactifs tabindex="-1" (roving tabindex).
Les panneaux inactifs ont l’attribut hidden natif — exclus du flux de tabulation et invisibles aux lecteurs d’écran.
Le tablist utilise un scroll horizontal natif (overflow-x: auto). Les onglets restent toujours accessibles au clavier via les flèches (l’onglet actif est automatiquement ramené dans le viewport). Cette approche s’appuie sur l’exception WCAG 1.4.10 pour les éléments de navigation à mise en page bidimensionnelle.
Recommandations pour votre design system :
Les techniques de signalement d’overflow (mask-image, boutons de scroll via scrollNav()) sont démontrées dans les variantes Scroll hints et Boutons de scroll.
Si une scrollbar visible est souhaitée, stylez ar-tab-group::part(nav)::-webkit-scrollbar et scrollbar-width.
Nommer le tablist : si la page contient plusieurs ar-tab-group, ajoutez l’attribut label sur chacun — il devient l’aria-label du tablist, permettant aux lecteurs d’écran de les distinguer.
Libellés des onglets : le texte visible de l’onglet est son nom accessible. Évitez les onglets avec des icônes seules sans texte alternatif (aria-label sur ar-tab).
L’événement se déclenche aussi automatiquement quand l’onglet actif est retiré du DOM : un autre onglet est réélu et ar-tab-group-change est émis avec son nom, sans action de votre part.
Par défaut (manual-activation absent), les flèches déplacent le focus et activent immédiatement l’onglet ciblé — ar-tab-group-change se déclenche à chaque flèche. Voir la variante Activation manuelle pour le comportement avec manual-activation.
Avec `manual-activation`, les flèches déplacent le focus sans changer l'onglet actif — il faut appuyer sur Entrée ou Espace pour confirmer. Utile quand le contenu du panel est coûteux à charger.
La méthode publique `scrollNav(direction, amount?)` permet de piloter facilement le défilement de la tablist sans accéder au shadow DOM. Dans l'exemple suivante, les boutons sont affichés/masqués via CSS `:has()` en fonction des classes `has-overflow-start` / `has-overflow-end`.
Premier ongletDeuxième ongletTroisième ongletQuatrième ongletPanel A.Panel B.Panel C.Panel D.
Les classes `has-overflow-start` et `has-overflow-end` sont posées automatiquement sur l'hôte. Cette démo branche un `mask-image` CSS sur ces classes pour signaler l'overflow en temps réel — aucun attribut requis.
Premier ongletDeuxième ongletTroisième ongletQuatrième ongletPanel A.Panel B.Panel C.Panel D.
Les tokens `--ar-tab-*` permettent de changer le style de l'indicateur actif sans modifier le composant. Exemple — indicateur en haut (top border) et style pill.
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.
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 3tab-group
Racine du composant.
2 sur 3nav
Zone scrollable (overflow-x: auto).
3 sur 3tabs
div[role="tablist"]. Les classes `has-overflow-start` et `has-overflow-end` sont ajoutées automatiquement sur l'hôte quand le contenu de la tablist déborde à gauche ou à droite.
CSS Custom Properties
1 sur 3--ar-tab-group-border-top-width
Épaisseur du trait séparateur en haut de la la tablist. Mettre à 1px pour l'activer.
2 sur 3--ar-tab-group-border-bottom-width
Épaisseur du trait séparateur sous la tablist. Mettre à 1px pour l'activer.