Générateur d'onglets CSS
Les onglets sont partout, panneaux de paramètres, sites de documentation, galeries de produits. Le HTML natif n’a pas d’élément d’onglet dédié, donc les développeurs créent le leur. Ce générateur construit une barre d’onglets simple en HTML + CSS : une couleur d’accent pour l’onglet actif, un arrondi des angles pour les boutons et un état au survol. Collez le balisage dans votre projet et reliez le changement d’onglets à votre propre JavaScript.
Comment créer des onglets
-
1
Choisissez une couleur d'accent
La couleur de fond et de texte de l'onglet actif. Choisissez une couleur qui correspond à votre marque.
-
2
Définissez l'arrondi des angles
Arrondit les coins supérieurs des boutons d'onglet. Des valeurs plus élevées donnent un rendu plus doux.
-
3
Modifiez les étiquettes
Le résultat contient trois boutons, "Overview", "Details" et "Settings" : renommez-les selon votre contenu.
-
4
Copiez le code
Le balisage des onglets inclut son propre bloc <style>. Collez les deux dans votre page.
-
5
Ajoutez le changement d'onglets
Le générateur produit uniquement la partie visuelle. Reliez les boutons à votre propre JavaScript ou à votre bibliothèque d'interface pour afficher et masquer les panneaux.
Balisage accessible correct
<div class="tabs">
<div role="tablist" aria-label="Informations sur le produit">
<button role="tab" id="tab-1" aria-selected="true" aria-controls="panel-1" tabindex="0">Aperçu</button>
<button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2" tabindex="-1">Spécifications</button>
<button role="tab" id="tab-3" aria-selected="false" aria-controls="panel-3" tabindex="-1">Avis</button>
</div>
<section role="tabpanel" id="panel-1" aria-labelledby="tab-1">...</section>
<section role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>...</section>
<section role="tabpanel" id="panel-3" aria-labelledby="tab-3" hidden>...</section>
</div>
Attributs critiques :
role="tablist"enveloppe les boutons.role="tab"sur chaque bouton, avecaria-selectedetaria-controls.tabindexutilise le modèle de tabindex itinérant : seul l’onglet actif est0, les autres sont-1. Les flèches déplacent le focus entre eux.role="tabpanel"sur chaque panneau, avecaria-labelledbypointant vers son onglet.hiddensur les panneaux inactifs (pas seulementdisplay: none, l’attribut est ce que les AT utilisent).
Contrat clavier
| Touche | Action |
|---|---|
| Tab | Passer dans / hors de la liste d’onglets |
| ArrowLeft | Onglet précédent (revient au dernier) |
| ArrowRight | Onglet suivant (revient au premier) |
| Home | Premier onglet |
| End | Dernier onglet |
| Enter / Space | Activer l’onglet ciblé (si activation manuelle) |
Activation automatique (l’onglet change lorsque le focus se déplace) contre manuelle (le focus se déplace, l’onglet s’active sur Entrée), WAI-ARIA permet les deux. L’automatique est plus facile pour les utilisateurs voyants ; la manuelle est meilleure lorsque le contenu de l’onglet est lourd à rendre.
Style souligné
[role="tablist"] {
display: flex;
border-bottom: 1px solid #e5e7eb;
}
[role="tab"] {
padding: 0.75rem 1rem;
background: transparent;
border: 0;
color: #6b7280;
position: relative;
cursor: pointer;
}
[role="tab"][aria-selected="true"] {
color: #111827;
}
[role="tab"][aria-selected="true"]::after {
content: "";
position: absolute;
left: 1rem; right: 1rem; bottom: -1px;
height: 2px;
background: #2563eb;
}
Style arrondi
[role="tab"] {
padding: 0.5rem 0.9rem;
border-radius: 9999px;
border: 0;
background: transparent;
}
[role="tab"][aria-selected="true"] {
background: #2563eb;
color: #fff;
}
Focus au clavier visible
Affichez toujours un anneau de focus lorsque le focus arrive via le clavier :
[role="tab"]:focus-visible {
outline: 2px solid #60a5fa;
outline-offset: 2px;
}
Le JavaScript
En gros :
const tabs = document.querySelectorAll('[role="tab"]');
tabs.forEach(tab => {
tab.addEventListener('click', () => activate(tab));
tab.addEventListener('keydown', e => {
const i = [...tabs].indexOf(tab);
if (e.key === 'ArrowRight') tabs[(i + 1) % tabs.length].focus();
if (e.key === 'ArrowLeft') tabs[(i - 1 + tabs.length) % tabs.length].focus();
if (e.key === 'Home') tabs[0].focus();
if (e.key === 'End') tabs[tabs.length - 1].focus();
});
});
function activate(tab) {
tabs.forEach(t => {
const panel = document.getElementById(t.getAttribute('aria-controls'));
const active = t === tab;
t.setAttribute('aria-selected', active);
t.setAttribute('tabindex', active ? '0' : '-1');
panel.hidden = !active;
});
tab.focus();
}
Trente lignes au total, zéro dépendances.
Onglets vs. accordéons
Sur les écrans étroits, les rangées d’onglets deviennent encombrées. Modèle courant : onglets sur bureau, accordéon sur mobile. Utilisez une requête de conteneur ou une requête média pour changer le traitement visuel sans changer les rôles ARIA.
Questions fréquentes
Pour des onglets accessibles, oui. Sans role="tablist" et role="tab", les lecteurs d’écran traitent les boutons comme des boutons ordinaires et les utilisateurs perdent la convention de navigation. L’alternative est un accordéon <details> / <summary> simple, qui a une sémantique intégrée.
L’activation automatique (l’onglet s’active lorsque le focus se déplace) est acceptable lorsque le contenu de chaque onglet est léger à rendre. L’activation manuelle (le focus se déplace, Entrée active) est préférable lorsque le changement d’onglets déclenche un travail lourd comme le chargement ou le rendu d’un grand formulaire.
Pour les onglets contenant du contenu (documentation, onglets de produits), oui, utilisez un hash (#specs) ou un paramètre de requête afin que les liens puissent pointer vers un onglet spécifique et que l’onglet actif persiste entre les rechargements. Pour les onglets UI (panneaux de paramètres), l’URL est optionnelle.
Seulement avec le hack checkbox/radio, qui manque de navigation par touches fléchées et d’états ARIA. Pour une mise en œuvre réellement accessible, le petit extrait JS en vaut la peine. Si vous avez besoin de solutions de secours rendues par le serveur, liez chaque onglet à une URL unique et rendez le panneau correspondant côté serveur.
Outils similaires
Référence de la table ASCII
Table ASCII complète de 0 à 127 avec décimal, hexadécimal, octal, binaire et référence numérique HTML pour chaque caractère, y compris les codes de contrôle comme NUL, LF et DEL.
Référence des caractères HTML
Liste consultable des entités HTML, de leurs codes nommés et numériques, et un copier-coller en un clic pour les caractères et symboles spéciaux.
Générateur de carte CSS
Créez le CSS d’un conteneur de carte : fond, bordure, rayon des angles, espacement intérieur et ombre douce, avec aperçu immédiat et code à copier-coller.
Référence des raccourcis clavier
Recherchez les raccourcis par défaut documentés de VS Code, Chrome et Bash avec GNU Readline sous macOS, Windows et Linux.
Générateur d’accordéon CSS
Créez un accordéon de trois sections avec details et summary. Personnalisez textes, couleurs, espacements, icône et ouverture, puis copiez ou téléchargez le code.
Recherche de nom de couleur
Trouvez la couleur nommée CSS standardisée la plus proche d’une valeur HEX, RGB ou HSL grâce à l’écart CIEDE2000.
Outil disponible dans d’autres langues
- ตัวสร้างแท็บส์ CSS [TH]
- CSSタブジェネレーター [JA]
- Generador de Pestañas CSS [ES]
- CSS Tab Generatörü [TR]
- CSS 탭 생성기 [KO]
- CSS标签生成器 [ZH]
- Trình tạo tab CSS [VI]
- CSS Tabs Generator [EN]
- Generator Tab CSS [ID]
- CSS-flikgenerator [SV]
- CSS-Tabs-Generator [DE]
- مولد علامات التبويب CSS [AR]
- CSS Tabs Generator [NL]
- Generator kart (tabs) CSS [PL]
- Gerador de Abas CSS [PT]
- Generatore di schede CSS [IT]
- Генератор вкладок CSS [RU]