El Atributo TABINDEX

Permite controlar el orden de enfoque y la accesibilidad de los elementos HTML cuando un usuario navega con el teclado (usando la tecla Tab).
El atributo tabindex
permite controlar el orden de enfoque y la accesibilidad de los elementos HTML cuando un usuario navega con el teclado (usando la tecla Tab
). Aquí te explicamos cómo usarlo correctamente para mejorar la experiencia de usuarios y cumplir con estándares de accesibilidad.
1. ¿Qué es tabindex
?
-
Propósito:
Determinar si un elemento puede recibir enfoque y definir su posición en el orden de navegación secuencial. -
Valores aceptados:
-
tabindex="-1"
: El elemento no es accesible medianteTab
, pero puede enfocarse programáticamente (con JavaScript). -
tabindex="0"
: El elemento se agrega al orden natural deTab
(según su posición en el DOM). -
tabindex="≥1"
(no recomendado): Define un orden manual (prioriza elementos con valores más altos).
-
2. Sintaxis y Comportamiento
Aplica tabindex
a cualquier elemento HTML:
<elemento tabindex="valor">...</elemento>
Ejemplo 1: Elemento no enfocable por defecto
<div tabindex="0">Este div ahora es enfocable con Tab</div>
Ejemplo 2: Priorizar un botón
<button tabindex="1">Primero en el orden</button> <button tabindex="2">Segundo en el orden</button>
⚠️ Advertencia: Usar valores mayores a 0
crea órdenes confusos. Evítalo en la mayoría de casos.
3. Casos de Uso y Ejemplos
3.1. Enfocar elementos no interactivos
Haz que un <div>
o <span>
sea enfocable para usarlo en widgets personalizados (ej.: modales):
<div tabindex="0" role="button" onclick="abrirModal()" > Abrir modal </div>
3.2. Excluir elementos del flujo de Tab
Evita que elementos innecesarios interrumpan la navegación:
<img src="decoracion.jpg" alt="" tabindex="-1">
3.3. Componentes dinámicos
Enfocar programáticamente un elemento oculto (ej.: mensaje de error):
document.getElementById("error").focus();
<div id="error" tabindex="-1" style="display: none;"> Campo obligatorio. </div>
4. Mejores Prácticas
-
Usa elementos semánticos:
Prefiere<button>
,<a>
,<input>
, etc., que son enfocables por defecto. -
Evita
tabindex="≥1"
:
Rompe el orden natural del DOM y confunde a usuarios. -
Accesibilidad:
-
Si usas
tabindex="0"
en elementos no interactivos, agrega roles ARIA (ej.:role="button"
) y maneja eventos de teclado (comoEnter
). -
Nunca elimines el
outline
CSS de elementos enfocables sin ofrecer una alternativa visual.
-
-
Orden lógico:
El orden deTab
debe seguir la estructura visual y semántica de la página.
5. Errores Comunes
-
Abusar de
tabindex="0"
:
Enfocar elementos no interactivos sin una razón clara (ej.:<div>
decorativos). -
Desordenar el flujo con valores positivos:
<!-- ❌ Evitar --> <input tabindex="2"> <input tabindex="1">
-
-
Omitir teclado en widgets personalizados:
Si creas un menú desplegable con<div>
, asegúrate de manejar las teclas↑
,↓
,Enter
, etc.
6. Pruebas de Accesibilidad
-
Navega solo con
Tab
:
Verifica que el orden sea lógico y todos los elementos interactivos sean accesibles. -
Usa herramientas:
-
Lighthouse: Audita accesibilidad.
-
Screen Readers (NVDA, VoiceOver): Comprueba cómo se anuncia el contenido.
-
7. Ejemplo Integrado
<!DOCTYPE html> <html> <head> <title>Ejemplo de tabindex</title> <style> .custom-button { padding: 10px; background: #007bff; color: white; cursor: pointer; } .custom-button:focus { outline: 3px solid orange; } </style> </head> <body> <!-- Orden natural --> <input type="text" placeholder="Nombre"> <input type="email" placeholder="Correo"> <!-- Widget personalizado --> <div class="custom-button" tabindex="0" role="button" onclick="alert('¡Haz clic!')" onkeydown="if (event.key === 'Enter') alert('¡Enter presionado!')" > Botón personalizado (usa Tab + Enter) </div> <!-- Elemento excluido --> <img src="deco.jpg" alt="" tabindex="-1"> </body> </html>
Conclusión
El atributo tabindex
es esencial para:
-
Mejorar la accesibilidad de usuarios que dependen del teclado.
-
Controlar el enfoque en componentes interactivos complejos.
-
Evitar errores de navegación en interfaces personalizadas.
Recuerda:
-
Prioriza el orden natural del DOM.
-
Valida siempre con herramientas de accesibilidad.
-
¡Un sitio accesible es un sitio usable para todos! ????️♿
Con este tutorial, podrás implementar una navegación coherente y accesible en tus proyectos web.