Juste un petit point sur les tabindex; ça sera rapide, je n'ai pas la verve d'Eric ou de Vincent ;-)

En fait, je me demandais la différence entre des valeurs 0 et -1 pour un tabindex. Un collègue bien connu m'a assuré que la valeur 0 était illégale.

Or, étant donné qu'il n'a tort que très rarement, surtout dans ce domaine, je me vois ravi de l'exposer publiquement à votre ire. En effet, la valeur 0 n'est pas illégale ! Ce qui ne répond pas, pour l'instant, à ma question, je l'avoue.

J'ai donc trouvé une explication bien complète, et j'ai même été fouiller dans les spec HTML 4 et HTML 5, et voici ce qu'il en ressort :

  • un tabindex à la valeur -1 signifie que l'élément où il s'applique ne pourra pas obtenir le focus avec la touche TAB (comme on dit chez nous: il ne sera pas tabulable)
  • un tabindex à la valeur 0 signifie que l'élément sera tabulable, mais il se trouvera après tous ceux ayant déjà un tabindex. Cela signifie qu'en HTML4, tout se passe comme si le tabindex n'était pas spécifié; en revanche, en HTML5, cela permet de rendre un élément tabulable, alors qu'il ne l'est normalement pas.

Attention, en HTML4, l'attribut tabindex n'est valable que sur certains éléments. En HTML5, il est valable partout. Ce comportement est déjà implémenté dans plusieurs navigateurs (dont Firefox, et IE6), je laisse le soin à mes excellents visiteurs de compléter en commentaire (en utilisant le test fourni sur la page du Fluid Project).

Oui, je sais, j'ai mis accessibilité dans le titre, attisant par là votre curiosité malsaine. J'y viens, j'y viens.

En fait, sur les interfaces dynamiques, on peut avoir des choses du style : des div qui apparaissent et disparaissent (par exemple une boîte de dialogue), des images avec juste des évènements dessus, etc. Oui, c'est mal, mais ça arrive. Pour améliorer l'accessibilité, on va rendre certains éléments tabulables en utilisant un attribut tabindex.

Pour une boîte de dialogue, on va même lui donner le focus... en effet, autrement, un utilisateur de lecteur d'écran ne la verra pas, car elle sera ajoutée tout à la fin du DOM, ce qui est super pratique pour quelqu'un qui navigue au clavier.

Des remarques ?