0Pricing
HTML Academy · Leçon

tabindex et accesskey

Contrôlez l’ordre de navigation au clavier et les raccourcis.

tabindex et accesskey est une leçon HTML Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage HTML Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours HTML Academy comprend 4 leçons au total.

Navigation au clavier

Les utilisateurs sans souris s’appuient sur Tab pour parcourir les éléments interactifs :

  • Naturellement accessibles au focus : <a href>, <button>, <input>, <select>, <textarea>
  • Les éléments non interactifs (<div>, <span>) ne font pas partie de l’ordre de tabulation
  • tabindex contrôle si un élément apparaît dans l’ordre de tabulation et à quelle position

tabindex="0"

tabindex="0" ajoute un élément non interactif à l’ordre de tabulation naturel :

<div tabindex="0" role="button" onclick="handleClick()">
  Custom Button
</div>
<!-- Now Tab navigates to this div -->
<!-- It receives focus at the natural position in the DOM -->

<!-- Better: use a real button instead! -->
<button onclick="handleClick()">Real Button</button>

tabindex="-1"

tabindex="-1" permet de placer programmatiquement le focus sur un élément, mais le retire de l’ordre de tabulation :

<div id="modal" tabindex="-1" role="dialog">
  <!-- modal content -->
</div>

<script>
// Open modal and send focus to it:
document.getElementById('modal').focus();
// Modal is now focused but not in the normal tab sequence
</script>

Valeurs positives de tabindex — à éviter

Les valeurs positives de tabindex (par exemple tabindex="3") définissent un ordre de tabulation personnalisé — évitez-les :

<!-- BAD: positive tabindex creates unpredictable order -->
<input tabindex="3">
<input tabindex="1">
<input tabindex="2">

<!-- The tab order becomes: 1, 2, 3, then all tabindex=0 elements -->
<!-- This almost always confuses users and fails WCAG 2.4.3 -->

<!-- Fix the DOM order instead of using positive tabindex -->

Gestion du focus dans les SPA

Les applications monopages doivent gérer le focus manuellement :

// When navigating to a new route:
document.querySelector('#main-content').focus();

// When opening a modal:
const modal = document.getElementById('modal');
modal.removeAttribute('hidden');
modal.querySelector('[autofocus], button, [tabindex]').focus();

// When closing a modal: return focus to the trigger
document.getElementById('open-btn').focus();

Piège de focus dans les modales

Confinez le focus dans une modale ouverte afin que Tab y reste :

function trapFocus(element) {
  const focusable = element.querySelectorAll(
    'a, button, input, textarea, select, [tabindex]:not([tabindex="-1"])'
  );
  const first = focusable[0];
  const last = focusable[focusable.length - 1];

  element.addEventListener('keydown', e => {
    if (e.key === 'Tab') {
      if (e.shiftKey && document.activeElement === first) {
        e.preventDefault(); last.focus();
      } else if (!e.shiftKey && document.activeElement === last) {
        e.preventDefault(); first.focus();
      }
    }
  });
}

L’attribut accesskey

L’attribut accesskey attribue un raccourci clavier à un élément :

<button accesskey="s">Submit</button>
<!-- On Windows: Alt+S focuses/activates the button -->
<!-- On Mac: Control+Option+S -->
<!-- On Firefox: Shift+Alt+S -->

<a href="/" accesskey="h">Home</a>

Limites de accesskey

accesskey présente des problèmes importants :

  • Les touches d’activation varient selon les navigateurs et les systèmes d’exploitation
  • Conflits avec les raccourcis du navigateur (par exemple, Alt+F = menu Fichier)
  • Non annoncé par défaut par les lecteurs d’écran
  • Rarement utilisé en pratique — documentez-le si vous l’utilisez

Indicateurs de focus visibles

Ne masquez jamais les contours du focus — ils sont essentiels pour les utilisateurs du clavier :

/* BAD: removes focus outline for everyone */
* { outline: none; }

/* Better: style focus outlines, don't remove them */
:focus-visible {
  outline: 2px solid #0070f3;
  outline-offset: 2px;
  border-radius: 3px;
}

/* :focus-visible only shows outline for keyboard navigation -->
/* Mouse clicks do not trigger :focus-visible in modern browsers */

Modèle de lien d’évitement

Un lien d’évitement permet aux utilisateurs du clavier de passer directement au-delà d’une navigation répétitive :

<a href="#main-content" class="skip-link">Skip to main content</a>

<nav>... long navigation ...</nav>

<main id="main-content" tabindex="-1">... content ...</main>

<!-- CSS: -->
<!--
.skip-link {
  position: absolute;
  top: -100%;
}
.skip-link:focus {
  top: 0;
}
-->

Attribut autofocus

L’attribut autofocus place le focus sur un élément au chargement de la page :

<input type="search" autofocus placeholder="Search...">
<!-- Useful on search pages or forms with a single primary field -->
<!-- Use sparingly: it can disrupt users who rely on the page top for orientation -->
<!-- Only one element per page should have autofocus -->

Vérification rapide

Quelle valeur de tabindex permet de placer le focus sur un élément avec JavaScript, tout en l’excluant de la navigation normale avec Tab ?

Récapitulatif : tabindex et accesskey

Points essentiels de l’accessibilité au clavier :

  • tabindex="0" — ajouter à l’ordre de tabulation naturel
  • tabindex="-1" — accessible au focus par programmation, mais absent de l’ordre de tabulation
  • Évitez les valeurs positives de tabindex
  • Ne supprimez jamais les contours :focus-visible
  • Implémentez des liens d’évitement pour les utilisateurs du clavier
  • accesskey est disponible, mais rarement pratique en raison des conflits

Questions Fréquemment Posées

La leçon « tabindex et accesskey » est-elle gratuite ?

Oui — le texte complet de « tabindex et accesskey » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours HTML Academy, passe à CoddyKit PRO. Le cours HTML Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « tabindex et accesskey » ?

Contrôlez l’ordre de navigation au clavier et les raccourcis. Tu pratiques HTML Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer HTML Academy ?

Aucune expérience préalable n'est requise. HTML Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « tabindex et accesskey » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon HTML Academy ?

Oui. Chaque leçon HTML Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. id, class, style et title
  2. L’attribut hidden
  3. tabindex et accesskey
  4. Attributs de données personnalisés data-*
← Retour à HTML Academy