Cómo controlar el enfoque con tabindex

Los elementos HTML estándar, como <button> o <input>, tienen accesibilidad de teclado integradas y deben usarse siempre que sea posible. Sin embargo, si necesitas compilar elementos interactivos personalizados, puedes crear el comportamiento esperado del usuario Se está agregando tabindex.

Navegadores compatibles

  • Chrome: 1.
  • Límite: 12.
  • Firefox: 1.5
  • Safari: ≤4.

Origen

Solo agrega tabindex al contenido interactivo. Incluso si el contenido es importante, como una imagen clave, los usuarios de lectores de pantalla pueden entenderla sin agregar enfoque.

¿Qué es tabindex?

En la ocasión en que necesites modificar el orden de tabulación predeterminado que proporciona la app puedes usar el atributo HTML tabindex para establecer explícitamente la posición de pestaña del elemento.

tabindex se puede aplicar a cualquier elemento, aunque solo debe aplicarse a elementos interactivos y toma un rango de valores enteros. Con tabindex, puedes especificar un orden explícito para los elementos de página enfocables insertar un elemento que de otro modo no podría enfocarse en el orden de tabulación y quitar los elementos del orden de tabulación. Por ejemplo:

tabindex="0": Inserta un elemento en el orden natural de pestañas. El elemento puede Para enfocar el elemento, presiona Tab, y el elemento se puede enfocar llamando su método focus()

tabindex="-1": Quita un elemento del orden natural de pestañas, pero el elemento aún puede enfocarse llamando al método focus()

tabindex="5": Cualquier tabindex superior a 0 coloca ese elemento en primer plano. del orden natural de tabulación. Si hay varios elementos con un tabindex mayor que 0, el orden de tabulación empieza desde el valor más bajo que sea superior a cero y va subiendo. El uso de un tabindex superior a 0 se considera una antipatrón.

Asegúrate de que se pueda acceder a los controles con el teclado

Una herramienta como Lighthouse es genial para detectar automáticamente ciertos aspectos de Sin embargo, algunas pruebas aún deben realizarse de forma manual por una persona.

Intenta presionar la tecla Tab para navegar por tu sitio. ¿Puedes llegar todos los controles interactivos de la página? De lo contrario, es posible que debas usar tabindex para mejorar la enfoque de esos controles.

Administrar el enfoque a nivel de la página

A veces, tabindex ayuda a crear una experiencia del usuario fluida. Por ejemplo: si creas una sola página robusta con diferentes secciones de contenido, en las que algunas el contenido está oculto en diferentes puntos de la carga de la página. Esto podría significar los vínculos de navegación cambian el contenido visible, sin tener que actualizar la página.

En este caso, identifica el área de contenido seleccionada y asígnale una tabindex de -1 y llama a su método focus. Esto garantiza que el contenido no aparezca en el orden natural de tabulación. Esta técnica, llamada administración de foco, mantiene la el contexto percibido por el usuario en sincronización con el contenido visual del sitio.

Cómo administrar el enfoque en los componentes

En algunos casos, también deberás administrar el foco a nivel de control, por ejemplo, con Elementos personalizados.

Saber qué comportamientos del teclado implementar puede ser difícil. El Autoridad de Aplicaciones de Internet enriquecidas accesibles (ARIA) Prácticas enumera los tipos de componentes y los tipos de acciones de teclado que admiten.

Cómo insertar un elemento en el orden de tabulación

Inserta un elemento en el orden natural de pestañas con tabindex="0". Por ejemplo:

<div tabindex="0">Focus me with the TAB key</div>

Para enfocar un elemento, presiona la tecla Tab o llama al método focus() del elemento.

Cómo quitar un elemento del orden de pestañas

Quita un elemento con tabindex="-1". Por ejemplo:

<button tabindex="-1">Can't reach me with the TAB key!</button>

Esto quita un elemento del orden natural de pestañas, pero el elemento aún puede enfocado llamando a su método focus().

Aplicar tabindex="-1" a un elemento no afecta a sus elementos secundarios. si están en el orden de tabulación naturalmente o debido a un valor de tabindex. permanecerán en el orden de tabulación. Para quitar un elemento y todos sus elementos secundarios del orden de tabulación, considera usar El polyfill inert de WICG. El polyfill emula el comportamiento de un atributo inert propuesto. que impide que las tecnologías de asistencia seleccionen o lean los elementos.

Evita tabindex > 0

Cualquier tabindex mayor que 0 salta al elemento al principio de la pestaña natural. en el orden personalizado. Si hay varios elementos con un tabindex mayor que 0, la pestaña orden empieza con el valor más bajo mayor que cero y va subiendo.

El uso de un tabindex mayor que 0 se considera un antipatrón porque los lectores de pantalla navegan por la página en orden DOM, no en orden de tabulación. Si necesitas elemento aparezca antes en el orden de tabulación, debe moverse a un lugar anterior en el DOM.

Con Lighthouse, puedes identificar elementos con un tabindex > 0. Ejecuta el Auditoría de accesibilidad (Lighthouse > Opciones > Accesibilidad) y busca resultados de "Ningún elemento tiene un valor [tabindex] superior a 0" auditoría de Cloud.

Usar "roving tabindex"

Si estás compilando un componente complejo, es posible que debas agregar teclado más allá del enfoque. Cuando sea posible, usa el elemento select integrado. Es enfocable y permite que las teclas de flecha expongan opciones seleccionables opciones de estado.

Para implementar funciones similares en tus componentes, usa una técnica conocida como "roving tabindex". El tabindex itinerante funciona estableciendo tabindex en -1 para todas las secundarias, excepto la que está activa en ese momento. Luego, el componente usa un teclado objeto de escucha de eventos para determinar qué tecla presionó el usuario.

Cuando esto sucede, el componente establece el tabindex del elemento secundario enfocado anteriormente. a -1, establece en 0 el tabindex del elemento secundario que se debe enfocar y llama a focus(). en él.

Antes

<div role="toolbar">
  <button tabindex="-1">Undo</button>
  <button tabindex="0">Redo</button>
  <button tabindex="-1">Cut</button>
</div>

Después

<div role="toolbar">
  <button tabindex="-1">Undo</button>
  <button tabindex="-1">Redo</button>
  <button tabindex="0">Cut</button>
</div>

Recetas de acceso al teclado

Si no estás seguro de qué nivel de compatibilidad de teclado podrían tener tus componentes personalizados, que necesitas, puedes consultar el Prácticas de creación de ARIA 1.1. En esta guía se enumeran patrones comunes de la IU e identifica qué claves que los componentes deben admitir.