El atributo tabindex es un atributo global de HTML que te permite controlar si un elemento puede recibir el foco del teclado y cómo participa en la navegación secuencial por teclado (generalmente utilizando la tecla Tab para avanzar y Shift+Tab para retroceder). Es una herramienta fundamental para mejorar la accesibilidad de tu sitio web, especialmente para usuarios que no utilizan un ratón.
tabindex?El comportamiento del atributo tabindex varía significativamente según el valor numérico que le asignes:
tabindex="0"<div>, <span>, <p>) pueda recibir el foco.Tab.<div>, un menú desplegable, etc.). Al añadir tabindex="0", los haces accesibles mediante el teclado. HTML<div role="button" tabindex="0" onclick="miAccion()" onkeypress="miAccion()"> Haz clic o pulsa Enter </div>tabindex="-1"elemento.focus()), pero lo excluye de la secuencia de navegación por tabulación natural.Tab directamente.<div id="notificacionError" tabindex="-1" role="alert">Error: El campo es obligatorio.</div> <button onclick="document.getElementById('notificacionError').focus()">Mostrar y enfocar error</button>tabindex con un valor positivo (ej. tabindex="1", tabindex="5", tabindex="10")tabindex positivo recibirán el foco antes que cualquier elemento con tabindex="0" o elementos enfocables por defecto. El orden entre ellos será de menor a mayor valor de tabindex (primero los tabindex="1", luego los tabindex="2", etc.).tabindex puede crear una experiencia de navegación por teclado muy confusa y poco intuitiva para los usuarios, ya que el orden del foco puede no coincidir con el orden visual de los elementos en la página. Esto es un anti-patrón de accesibilidad. Es mucho mejor estructurar tu HTML de forma lógica para que el orden natural de tabulación sea el correcto y usar tabindex="0" y tabindex="-1" solo cuando sea estrictamente necesario.Recuerda que muchos elementos HTML son enfocables por defecto y se incluyen automáticamente en el orden de tabulación sin necesidad de tabindex. Estos incluyen:
<a> con atributo href)<button>)<input>, <select>, <textarea>)contenteditable establecido en true.tabindex="0" con moderación: Solo para elementos personalizados que realmente necesitan ser interactivos y no tienen una alternativa nativa. Asegúrate de que también respondan a eventos de teclado como Enter o Espacio si actúan como botones.tabindex="-1" estratégicamente: Para la gestión del foco mediante JavaScript en componentes dinámicos.tabindex con valores positivos (> 0) en la medida de lo posible.Dominar el uso de tabindex es un aspecto importante para crear sitios web que sean accesibles para todos los usuarios, independientemente de cómo interactúen con la web.