0Pricing
React Academy · Lección

Accesibilidad para widgets de autocompletado

Aplicar aria-autocomplete, aria-expanded, role=listbox y role=option para que el widget sea compatible con lectores de pantalla

Accesibilidad para widgets de autocompletado es una lección gratuita de React Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

El patrón ARIA de combobox

El patrón de combobox de WAI-ARIA define un conjunto específico de roles y propiedades para los widgets de autocompletado. Un combobox es un elemento de entrada asociado a una ventana emergente listbox. El patrón garantiza que los lectores de pantalla anuncien correctamente el comportamiento interactivo, las opciones disponibles y la selección actual a los usuarios que no pueden ver la interfaz visual.

role=combobox en el contenedor

Envuelva el campo de entrada en un div con role="combobox". Esto indica a las tecnologías de asistencia que el campo de entrada tiene asociada una lista emergente. Establezca aria-expanded={isOpen} en este contenedor para indicar a los lectores de pantalla si la lista de sugerencias está visible u oculta.

Atributos ARIA del campo de entrada

El propio elemento de entrada debe tener: aria-autocomplete="list" (la ventana emergente contiene una lista de sugerencias), aria-haspopup="listbox" (al hacer clic o escribir se abre un listbox), aria-expanded={isOpen} y aria-controls="suggestion-list-id", que apunte al id del elemento de la lista desplegable.

aria-activedescendant

aria-activedescendant en el campo de entrada apunta al id de la opción resaltada actualmente. Cuando selectedIndex es 0, establezca aria-activedescendant="option-0". Los lectores de pantalla usan este atributo para anunciar qué elemento está activo sin mover el foco real del campo de entrada. Cuando no haya ningún elemento seleccionado, quite el atributo o establézcalo en una cadena vacía.

La lista de sugerencias: role=listbox

El elemento contenedor de la lista desplegable debe tener role="listbox" y un id único que coincida con el aria-controls del campo de entrada. Este rol indica en el árbol de accesibilidad que el elemento es una lista de opciones seleccionables. El listbox recibe el foco indirectamente mediante aria-activedescendant en el campo de entrada.

Cada sugerencia: role=option

Cada elemento de sugerencia debe tener role="option" y un id único, como option-0, option-1, etc. Añada aria-selected={index === selectedIndex} para indicar qué elemento está resaltado actualmente. Los lectores de pantalla anuncian tanto el contenido de la opción como si está seleccionada cuando el usuario navega con las teclas de flecha.

Anuncio del lector de pantalla

Cuando el usuario presiona ArrowDown y aria-activedescendant se actualiza a option-1, VoiceOver anuncia algo como "hooks de React, 2 de 5". El lector de pantalla lee automáticamente el texto de la opción y su posición en la lista a partir del marcado ARIA. No se necesitan regiones activas adicionales para la navegación con el teclado.

Pruebas con VoiceOver y NVDA

Realice pruebas con VoiceOver en macOS (Cmd+F5 para activarlo o desactivarlo) y con NVDA en Windows (descarga gratuita). Vaya al campo de entrada y empiece a escribir. Compruebe que el lector de pantalla anuncie el rol de combobox, la cantidad de resultados encontrados y cada opción mientras se desplaza por ellas con las teclas de flecha. Compare el comportamiento con los ejemplos de WAI-ARIA Authoring Practices Guide.

Región activa para la carga asíncrona

Cuando las sugerencias se carguen de forma asíncrona, añada un div oculto visualmente con aria-live="polite" y aria-atomic="true". Actualice su contenido de texto cuando termine la carga: "5 resultados encontrados" o "No se encontraron resultados". El lector de pantalla anuncia este mensaje después de terminar el mensaje actual, de modo que mantiene informados a los usuarios sin interrumpirlos.

WAI-ARIA Authoring Practices Guide

La WAI-ARIA Authoring Practices Guide (APG), disponible en w3.org/WAI/ARIA/apg, contiene una página específica sobre el patrón de combobox, con ejemplos de código funcionales y especificaciones detalladas sobre la interacción con el teclado. Consulte siempre la APG al implementar widgets interactivos como autocompletados, diálogos o pestañas para garantizar el cumplimiento de todos los requisitos de accesibilidad.

aria-label y placeholder

Proporcione un aria-label en el campo de entrada si no existe un elemento de etiqueta visible: aria-label="Search suggestions". No dependa únicamente de placeholder para las etiquetas: los marcadores de posición desaparecen cuando el usuario escribe y no todos los lectores de pantalla los anuncian de forma uniforme. Un elemento label visible con htmlFor siempre es la mejor opción.

Propósito de aria-activedescendant

¿Cuál es el propósito del atributo aria-activedescendant en un campo de entrada de autocompletado?

Resumen de la lección: accesibilidad del autocompletado

Use role="combobox" en el contenedor, aria-autocomplete="list" en el campo de entrada, además de aria-expanded, aria-controls y aria-activedescendant, para vincular el campo de entrada con la lista de sugerencias. Cada opción necesita role="option", un id único y aria-selected. Añada una región aria-live para anunciar la cantidad de resultados asíncronos.

Preguntas frecuentes

¿La lección «Accesibilidad para widgets de autocompletado» es gratis?

Sí — el texto completo de «Accesibilidad para widgets de autocompletado» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Accesibilidad para widgets de autocompletado»?

Aplicar aria-autocomplete, aria-expanded, role=listbox y role=option para que el widget sea compatible con lectores de pantalla Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Accesibilidad para widgets de autocompletado»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Input controlado con lista de sugerencias
  2. Navegación con teclado en listas de sugerencias
  3. Sugerencias asíncronas con debounce
  4. Accesibilidad para widgets de autocompletado
← Volver a React Academy