Estudio de Caso: Construyendo Componentes Reutilizables y Accesibles de React en GitHub

Rate this content
Bookmark

Los influencers de Twitter te harían creer que si solo usas la etiqueta html semántica para los elementos en lugar de un div, tus componentes serán accesibles. ¡pero hay mucho más que entra en juego!
Vamos a acercarnos a un componente de GitHub (¡uno que probablemente hayas usado antes!) y ver todas las consideraciones de accesibilidad involucradas y los desafíos interesantes al implementarlas.

This talk has been presented at React Day Berlin 2024, check out the latest edition of this React Conference.

Siddharth Kshetrapal
Siddharth Kshetrapal
22 min
16 Dec, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hola, soy Sid, y trabajo en el equipo de sistemas de diseño en GitHub. Hablemos sobre la construcción de componentes accesibles de React con un enfoque en los lectores de pantalla. Usa el elemento HTML correcto para la accesibilidad. Por ejemplo, en GitHub, hay tres pestañas con opciones. Estas pestañas están hechas usando botones. Veamos cómo una persona con discapacidad visual que usa un lector de pantalla accedería a este sitio web. ¿Qué ven? Voy a habilitar el lector de pantalla y guiarte a través de lo que sucede. Al encender el lector de pantalla, establece el contexto y te dice dónde estás. Por ejemplo, en la aplicación de React, un botón etiquetado como 'Code' tiene el foco y un menú emergente. Dentro del menú emergente, hay varios botones con diferentes etiquetas. Algo interesante sucede. Si no puedo ver la interfaz de usuario, estoy escuchando botones pero no pestañas. Los lectores de pantalla no pueden inferir cosas como pestañas a partir del diseño visual. Para proporcionar esta información, podemos usar la especificación ARIA y sus roles. Al agregar un rol de lista de pestañas al div y un rol de pestaña a cada botón, se transmiten los semánticos. El rol anula los semánticos de HTML. El lector de pantalla identifica las pestañas, pronuncia 'code spaces'. El comportamiento predeterminado de una pestaña es el autoenfoque. Podemos agregar el atributo aria-selected para especificar la selección. Usando React, estoy usando una expresión para establecer aria-selected basado en la pestaña seleccionada. La navegación en el panel de pestañas es desorientadora. Hay grupos separados para la lista de pestañas y el panel de pestañas, y hay una necesidad de navegación entre ellos. Usa las teclas de flecha para navegar dentro del widget. Elimina las pestañas del índice de pestañas, solo la pestaña seleccionada debe ser enfocada. Implementa las teclas de flecha para la navegación. Presiona tab para entrar en el panel de pestañas. Presiona shift tab para volver arriba. La navegación por teclado es un patrón común extraído en un hook. Decide qué teclas vincular según el tipo de widget. Cambia la pestaña seleccionada al enfocarse. Considera la guía de prácticas de autoría de ARIA para interacciones de teclado. Diferencia entre pestañas instantáneas y activadas. Sigue la especificación ARIA y usa el APG como un recurso informativo. Los lectores de pantalla pueden no seguir siempre la guía de prácticas de autoría de ARIA. Usa los elementos HTML correctos, agrega roles, propiedades y estados ARIA. Implementa la navegación por teclado. Usa un ejemplo de GitHub de configuraciones de notificación con elementos semánticos adecuados. Al seleccionar canales de notificación, las opciones se presentan en un menú emergente. El foco está en la primera casilla de verificación, indicando que es la primera opción. El lector de pantalla lee el estado de cada opción. Después de seleccionar la opción deseada, el formulario puede ser enviado. El cambio se guarda y se notifica al usuario. El foco se recontextualiza en el botón del menú emergente colapsado. No renderizar la cuarta opción en ciertas condiciones la oculta de los usuarios de pantalla. Eliminar la condicional y deshabilitar la cuarta casilla de verificación hasta que sea necesario elimina este problema. Usar IR disabled en lugar de disabled hace que el elemento sea accesible para los usuarios de lectores de pantalla y teclado sin afectar el estilo o la cancelación de clics. Tienes que agregar tu propio nombre de clase y asegurarte de que esté deshabilitado. Es accesible por teclados. Voiceover en Mac usa 'dimmed' para significar IR disabled. Agregar otro span que requiera al menos un canal. Se pueden agregar descripciones adicionales usando aria-describeby. LECTOR DE PANTALLA Solo notificar para flujos de trabajo fallidos. Requiere al menos un canal para ser seleccionado. Atenuado sin marcar. Casilla de verificación. Ahora conoces la etiqueta, por qué está deshabilitada y que está atenuada. Y veamos si es lo que quiero decir. Nunca. Menú emergente colapsado. Este flujo parece más intuitivo. Conoces todas tus opciones por adelantado. Una opción estaba deshabilitada, habilitaste otra cosa, y se habilitó de nuevo. Mucho más claro. Se siente como una mejor interfaz de usuario. Necesitamos diseñar con la accesibilidad en mente. La accesibilidad no es algo que puedas simplemente espolvorear al final. Tenemos que llevarlo mucho antes en la etapa. Ten cuidado al deshabilitar elementos. Usa RLDisabled. Lista corta de seis cosas a considerar. Enlaces en mi sitio web. Sígueme en Blue Sky.

1. Introducción a la Accesibilidad en React

Short description:

Hola, soy Sid, y trabajo en el equipo de sistemas de diseño en GitHub. Hablemos sobre cómo construir componentes accesibles de React con un enfoque en los lectores de pantalla. Usa el elemento HTML correcto para la accesibilidad. Por ejemplo, en GitHub, hay tres pestañas con opciones. Estas pestañas están hechas usando botones. Veamos cómo una persona con discapacidad visual que usa un lector de pantalla accedería a este sitio web.

Hola, soy Sid, y trabajo en el equipo de sistemas de diseño en GitHub. Quiero hablar contigo sobre algo que hacemos en Primer, y la mayoría del código del que hablo hoy es de código abierto. Puedes encontrarlo en GitHub.com barra Primer barra React.

Hablemos sobre cómo construir componentes accesibles de React con un enfoque en los lectores de pantalla. Así que, una advertencia justa primero. No soy un experto en accesibilidad. Solo soy un chico tonto de React. Pero durante el último año y medio, he trabajado con muchos expertos en accesibilidad, y tal vez esta perspectiva de venir de un desarrollador de React en lugar de un ingeniero de accesibilidad, tal vez eso sea solo una mejor o más fácil introducción, una introducción más accesible, si se quiere, para una introducción a la accesibilidad.

Así que, cosas que necesitas para una experiencia accesible, si preguntas en Twitter, obtienes este consejo, que es simplemente no uses un div, usa un botón, y eso es todo. Usualmente viene acompañado de un fondo púrpura con alguna captura de pantalla de código. Así que, ese es el primer paso, supongo. Usa el elemento HTML correcto, y eso es todo. Pero, por supuesto, hay mucho más que entra en esto. Y ligeramente, aunque este consejo es correcto, que uses el elemento HTML correcto, lo encuentro un poco molesto porque es muy reductivo para todo el trabajo que hacen los ingenieros de accesibilidad.

Así que, por ejemplo, esta es una interfaz de usuario que puedes o no haber visto en GitHub. Si presionas el botón de código en el repositorio, obtienes estas tres opciones. Y es algo agradable. Hay estas tres pestañas que puedes alternar. Y cada una de ellas tiene sus propias opciones. Hay un panel debajo. Hemos visto este patrón tantas veces, ¿verdad? Y sabemos que estas son pestañas y que son clicables porque ves esta pequeña colina en la primera. Y la primera es más oscura. Tiene un borde. Así que, sabemos que esta es la seleccionada. Pero no hay nada en la página que diga que es solo un patrón de diseño que hemos visto tan a menudo que se convierte en algo establecido. Y para hacer estas pestañas, uso botones porque soy un profesional. Y, sí, así es cómo funciona. Usando algo de React para conectarlo. Y eso es lo que es. Así que, veamos qué ve alguien que tiene discapacidad visual y usa el lector de pantalla para acceder a este sitio web.

2. Understanding Screen Reader Behavior

Short description:

¿Qué ven? Voy a activar el lector de pantalla y guiarte a través de lo que sucede. Al encender el lector de pantalla, establece el contexto y te dice dónde estás. Por ejemplo, en la aplicación React, un botón etiquetado como 'Code' tiene el foco y un menú emergente. Dentro del menú emergente, hay varios botones con diferentes etiquetas. Algo interesante sucede.

alguien que tiene discapacidad visual y usa el lector de pantalla para acceder a este sitio web. ¿Qué ven? Entonces, voy a activar el lector de pantalla y guiarte a través de lo que sucede. VoiceOver en la aplicación.

React app. Entonces, cada vez que enciendes el lector de pantalla, primero establece el contexto. Te dice dónde estás. En este caso, estoy en la aplicación React. Mi aplicación se llama React app. Y te dice dónde está el foco. Code. Menú emergente. Botón.

Tiene el foco del teclado. Entonces, sé que un botón con la etiqueta code tiene el foco. Y también sé que tiene un menú emergente, lo que significa que puedo presionar la tecla enter y debería abrir el menú emergente y luego puedo navegar dentro de él con mi tecla tab. Botón local. Coda spaces. Botón. Copilot. Botón. Copiar URL al portapapeles. Botón. HTTPS. GitHub. Abrir con GitHub desktop. Botón. Descargar zip. Botón. Local. Botón.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Accesibilidad en Discord
React Advanced 2021React Advanced 2021
22 min
Accesibilidad en Discord
This Talk discusses the accessibility efforts at Discord, focusing on keyboard navigation and the challenges faced with implementing focus rings and outlines. The speaker showcases a unified focus ring system and a saturation slider to address accessibility concerns. They also highlight the implementation of role colors and the use of CSS filters for accessibility improvements. The Talk concludes with insights on runtime accessibility checking and the development of a performant core runtime system for checking accessibility issues.
Configurando las Pruebas de Accesibilidad de Axe
TestJS Summit 2021TestJS Summit 2021
30 min
Configurando las Pruebas de Accesibilidad de Axe
Top Content
AXe is an accessibility engine for automated web UI testing that runs a set of rules to test for accessibility problems. It can be configured to disable or enable specific rules and run based on tags. Axe provides various options, but axe linter does not support all options. The importance of investing time and resources in accessibility is emphasized, as it benefits not only those with disabilities but improves the web for everyone. Manual testing is also highlighted as a necessary complement to automated tests for addressing accessibility issues.
Elementos Interactivos Anidados: Una Pesadilla en Accesibilidad
React Advanced 2023React Advanced 2023
23 min
Elementos Interactivos Anidados: Una Pesadilla en Accesibilidad
Nested interactive elements can cause accessibility issues on websites, and the speaker shares a personal experience with an accessibility bug involving a list component. Mitigating nested interactive structures involves limiting these patterns during development and restructuring existing elements. The speaker provides recommendations for improving accessibility, such as adjusting role properties and gathering user feedback. The conclusion emphasizes the importance of accessible solutions and encourages sharing resources to build more inclusive experiences.
Dilemas de los diálogos y travesuras modales: Un análisis profundo de las ventanas emergentes
JSNation 2023JSNation 2023
10 min
Dilemas de los diálogos y travesuras modales: Un análisis profundo de las ventanas emergentes
The Talk discusses the use of dialogues and popovers in web development. Dialogues can be modal or non-modal and are now accessibility-supported. Popovers are versatile and can be added to any element without JavaScript. They provide suggestions, pickers, teaching UI, list boxes, and action menus. Modal and non-modal dialogues and popovers have different behaviors and dismissal methods. Browser support for these features is expanding, but there are still open questions about positioning, semantics, and other use cases.
Construyendo un Sitio Web Rápido para Cada Visitante
React Advanced 2024React Advanced 2024
31 min
Construyendo un Sitio Web Rápido para Cada Visitante
This talk focuses on building a fast and accessible website for all users, highlighting the importance of performance and user experience optimization. It emphasizes the need for adaptive implementation to cater to different devices and user conditions. The talk also discusses the factors beyond the developer's control, such as screen size, browsers, devices, internet connection, and sitting position. It highlights the significance of optimizing image components for various devices and the role of browser support and rendering engines. The speaker discusses the use of future APIs and the challenges of browser compatibility, as well as optimizing image formats and bundler compatibility. The talk provides insights on controlling bundler and device compatibility, optimizing CPU usage, internet connection, and JavaScript form submission. It concludes with a proposal to respond with save data instead of effective type for limited internet connections and recommends using React with adaptive hooks for better user experiences. Overall, the talk covers essential aspects of building a fast and accessible website.
a11y y TDD: Una Combinación Perfecta
JSNation 2022JSNation 2022
24 min
a11y y TDD: Una Combinación Perfecta
This Talk explores the intersection of accessibility and test-driven development (TDD) in software development. TDD is a process that involves writing tests before writing production code, providing a safety net for code changes. The Talk demonstrates how to apply TDD principles to real-life examples, such as filling out a form, and emphasizes the importance of user-centric testing. By using atomic design principles, code can be organized in a clean and easy way. The Talk also discusses the use of labels and test IDs in tests for improved accessibility.

Workshops on related topic

Accesibilidad web para Ninjas: Un enfoque práctico para crear aplicaciones web accesibles
React Summit 2023React Summit 2023
109 min
Accesibilidad web para Ninjas: Un enfoque práctico para crear aplicaciones web accesibles
Workshop
Asaf Shochet Avida
Eitan Noy
2 authors
En este masterclass práctico, te proporcionaremos las herramientas y técnicas que necesitas para crear aplicaciones web accesibles. Exploraremos los principios del diseño inclusivo y aprenderemos cómo probar nuestros sitios web utilizando tecnología de asistencia para asegurarnos de que funcionen para todos.
Cubriremos temas como el marcado semántico, los roles de ARIA, los formularios y la navegación accesibles, y luego nos sumergiremos en ejercicios de codificación donde podrás aplicar lo que has aprendido. Utilizaremos herramientas de prueba automatizadas para validar nuestro trabajo y asegurarnos de cumplir con los estándares de accesibilidad.
Al final de este masterclass, estarás equipado con el conocimiento y las habilidades para crear sitios web accesibles que funcionen para todos, y tendrás experiencia práctica utilizando las últimas técnicas y herramientas para el diseño inclusivo y las pruebas. ¡Únete a nosotros en este increíble masterclass de codificación y conviértete en un ninja de la accesibilidad web y el diseño inclusivo!
Pruebas automatizadas de accesibilidad con jest-axe y Lighthouse CI
TestJS Summit 2021TestJS Summit 2021
85 min
Pruebas automatizadas de accesibilidad con jest-axe y Lighthouse CI
Workshop
Bonnie Schulkin
Bonnie Schulkin
¿Incluyen tus pruebas automatizadas verificaciones de accesibilidad? Este masterclass cubrirá cómo comenzar con jest-axe para detectar violaciones de accesibilidad basadas en código, y Lighthouse CI para validar la accesibilidad de las páginas completamente renderizadas. Ninguna cantidad de pruebas automatizadas puede reemplazar las pruebas manuales de accesibilidad, pero estas verificaciones se asegurarán de que tus probadores manuales no estén haciendo más trabajo del necesario.
Accesibilidad web en aplicaciones JavaScript
React Summit 2022React Summit 2022
161 min
Accesibilidad web en aplicaciones JavaScript
Workshop
Sandrina Pereira
Sandrina Pereira
A menudo vemos que JavaScript daña la accesibilidad de un sitio web. En esta masterclass, aprenderás cómo evitar errores comunes y cómo utilizar JS a tu favor para mejorar la accesibilidad de tus aplicaciones web.
En esta masterclass exploraremos múltiples ejemplos del mundo real con problemas de accesibilidad, y aprenderás cómo hacer que funcionen para las personas que utilizan un mouse o un teclado. También aprenderás cómo se utilizan los lectores de pantalla, ¡y te mostraré que no hay razón para tener miedo de usar uno!
Únete a mí y déjame mostrarte cómo la accesibilidad no limita tus soluciones o habilidades. ¡Al contrario, las hace más inclusivas!
Al final, serás capaz de:- Comprender los principios de WCAG y cómo están organizados- Conocer casos comunes en los que JavaScript es esencial para la accesibilidad- Crear enlaces, botones y elementos conmutables inclusivos- Utilizar regiones en vivo para errores y estados de carga- Integrar la accesibilidad en el flujo de trabajo de tu equipo de inmediato- Darte cuenta de que crear sitios web accesibles no es tan difícil como parece ;)
Creando aplicaciones React Native accesibles
React Summit Remote Edition 2021React Summit Remote Edition 2021
91 min
Creando aplicaciones React Native accesibles
Workshop
Scott Vinkle
Scott Vinkle
React Native es un framework utilizado para crear aplicaciones nativas de iOS y Android de una manera con la que los desarrolladores web ya pueden estar familiarizados. Pero, ¿cómo asegurarse de que tus aplicaciones React Native sean inclusivas y utilizables para todos? Scott compartirá consejos sobre cómo probar y construir aplicaciones React Native con accesibilidad integrada.