Elementos Interactivos Anidados: Una Pesadilla en Accesibilidad

Rate this content
Bookmark

En los últimos años se han desarrollado numerosas experiencias de usuario (UX) notables, como tarjetas que muestran una variedad de productos y elementos de lista clicables con opciones de menú dinámicas, entre otros. Sin embargo, solo unos pocos son conscientes de los desafíos involucrados en la construcción de estructuras con elementos interactivos anidados, y desafortunadamente, algunos de ellos son completamente inaccesibles.


En la charla de hoy, exploraremos algunos de estos patrones de UX web prevalentes y profundizaremos en los desafíos ocultos que presentan. Si bien podemos mitigar algunos de estos problemas, otros sirven como historias de advertencia en cuanto a accesibilidad.

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

Cat Johnson
Cat Johnson
9 min
18 Jun, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Los Elementos Interactivos Anidados en la Accesibilidad pueden causar problemas con lectores de pantalla y otras herramientas de asistencia, lo que dificulta que los usuarios interactúen con los sitios web. Las estrategias de mitigación incluyen desanidar elementos, usar superposición CSS y tener precaución al modificar roles. Se recomienda involucrar a los usuarios de herramientas de asistencia en grupos de enfoque y compartir soluciones en línea.

1. Introducción a los Elementos Interactivos Anidados

Short description:

Bienvenidos a todos. Hoy voy a hablar sobre los Elementos Interactivos Anidados en la Accesibilidad de Nightmare. Los Elementos Interactivos Anidados son elementos interactivos anidados dentro de otros elementos, como un enlace dentro de un enlace o un botón dentro de un botón. Esta estructura es problemática porque es un HTML incorrecto y puede causar problemas con lectores de pantalla y otras herramientas de asistencia, lo que dificulta que los usuarios interactúen con su sitio web. Simplemente eliminar el atributo de rol o usar un div HTML genérico no solucionará el problema y puede ocultar elementos interactivos de ciertas herramientas de asistencia, degradando la experiencia del usuario.

Bienvenidos a todos. Gracias por unirse a mí aquí hoy. Hoy voy a hablar sobre los Elementos Interactivos Anidados en la Accesibilidad de Nightmare. Solo tenemos un tiempo limitado para esta charla, así que vamos a empezar rápidamente. Pero antes de comenzar realmente, déjenme contarles un poco sobre mí. Mi nombre es Kat Johnson. Soy una ingeniera senior de front-end en Khan Academy y me encanta hablar sobre la accesibilidad y cómo crear sitios web accesibles. Así que vamos a sumergirnos en el tema. Pero antes de adentrarnos en cómo solucionar este problema, hablemos de qué son los Elementos Interactivos Anidados. Es posible que no hayan escuchado hablar de ellos. Los Elementos Interactivos Anidados, en términos muy simplificados, son elementos interactivos anidados dentro de otros elementos. Por ejemplo, tener un enlace dentro de otro enlace o un botón dentro de otro botón. Aquí hay un pequeño fragmento de código que muestra esto. La razón por la que esta estructura es problemática es porque es un HTML incorrecto. En los primeros días de los sitios web y la web, no tenía mucho sentido anidar botones dentro de botones o enlaces dentro de enlaces. Realmente no había un caso de uso para esto. Pero a medida que la web ha evolucionado, estamos viendo esto cada vez más en muchas de nuestras experiencias de usuario en la web, desde Google hasta este sitio web que me gusta usar llamado The Mountaineers. Encontrarán muchos botones o enlaces dentro de enlaces y algunos de estos pequeños menús de botones. Pero es posible que se pregunten, ¿cuál es el problema? Puede que sea incorrecto semánticamente en HTML, pero como usuario, nunca tuve problemas al usar esta experiencia. Puedo hacer clic, navegar y usar muchos de estos botones anidados. Así que no parece ser un gran problema. El problema real es que, al ser un HTML incorrecto, afecta mucho a los lectores de pantalla y otras herramientas de asistencia. Debido a que es un HTML incorrecto, muchos lectores de pantalla y otras herramientas de asistencia, cuando leen su HTML, no saben cómo leer esa información y transmitirla al usuario. Esto suele causar muchos errores y una gran falta de comunicación para muchas herramientas de asistencia, lo que dificulta mucho que los usuarios interactúen con su sitio web. Entonces, ahora deben estar pensando, bueno, podría solucionar esto. Simplemente eliminaré el atributo de rol igual a botón o usaré un div HTML genérico y dejaré la funcionalidad de clic. Eso debería solucionar este problema de accesibilidad, ¿verdad? Bueno, están equivocados. No hagan esto. Es posible que estén solucionando el problema de los elementos interactivos anidados, pero ahora están ocultando elementos interactivos de otros lectores de pantalla y otras herramientas de asistencia. Entonces, cuando un usuario navega por su sitio web con Narrator o NVDA, pasarán por este elemento en su HTML y no anunciará que es un botón en el que necesitan hacer clic. Ocultarán esa información y realmente degradarán la experiencia de su sitio web y

2. Mitigación de Elementos Interactivos Anidados

Short description:

Si tienes elementos interactivos anidados en tu sitio web, hay formas de mitigar el problema. Puedes desanidar los elementos y hacer que sean elementos interactivos separados. Si no puedes desanidarlos, puedes usar propiedades CSS para superponer los elementos, creando el efecto visual de anidamiento sin el anidamiento semántico. Ten cuidado al modificar los roles para evitar ocultar la funcionalidad de clic. Se recomienda realizar grupos de enfoque con usuarios de herramientas de asistencia y compartir tus aprendizajes y soluciones en línea.

causar más problemas de accesibilidad. Así que si tu sitio web tiene botones y enlaces, por favor asegúrate de que estén indicados como botones y enlaces en tu HTML. Entonces, realmente tendremos que encontrar otra forma de solucionar este problema. Pero no te preocupes, porque he experimentado este problema. En un sitio web anterior en el que trabajé, después de desarrollar gran parte de la funcionalidad en la biblioteca de componentes de React, nos dimos cuenta de que teníamos este problema en todas partes, desde nuestros componentes de tarjetas hasta diferentes listas y otros campos de formulario dentro de nuestro sitio web. Había elementos interactivos anidados por todas partes, lo que causaba problemas con todas nuestras herramientas de asistencia. Entonces, la gran pregunta es, ¿cómo mitigamos este problema? ¿Cómo lo solucionamos? ¿Cómo mejoramos esto para nuestros usuarios? Bueno, hay varias formas de abordar este problema. Primero, si aún no has comenzado tu sitio web o no has desarrollado tu biblioteca de componentes, hay muchas cosas que puedes hacer antes de comenzar. Lo primero que puedes hacer es, si es posible, desanidar estos elementos interactivos. Asegúrate realmente de que no estén dentro uno del otro. Muévelos fuera de los elementos interactivos anidados y haz que sean un elemento interactivo separado por sí mismos. Y si tienes una biblioteca de componentes, algo que recomendaría es que, al comenzar, limites las configuraciones de los desarrolladores para tu biblioteca de componentes. Como establecer el strong typing y las propiedades de rol para que si alguien pasa alguna funcionalidad, realmente estés limitando el alcance y asegurando que no se creen muchos problemas de accesibilidad. Pero probablemente te estés preguntando, ¿qué pasa si ya he escrito todo mi sitio web? ¿Qué pasa si ya he escrito todo mi sitio web o toda mi biblioteca de componentes y está por todas partes y no sé cómo solucionarlo para mi empresa sin que sea muy costoso? Bueno, hay algunas otras cosas que podemos hacer aquí. Veamos el ejemplo de Google. Digamos que tu diseñador dice que este diseño debe verse exactamente así, que realmente necesitamos tener esta experiencia de tarjeta interactiva con un botón dentro de ella para un menú desplegable y no podemos cambiar realmente la experiencia de usuario para eso. Bueno, una cosa que puedes intentar es desanidar primero esos elementos y luego puedes usar propiedades CSS para superponer realmente ese botón uno encima del otro. Creará el efecto visual de que están anidados, pero en cuanto a la semántica, no están anidados y están separados en la estructura del DOM. Así reducirás el problema de crear errores de accesibilidad en tu sitio web. Pero digamos que no puedes desanidarlos por alguna razón. Bueno, y te animo a tener mucho cuidado aquí, puedes intentar modificar algunos de los roles. Ahora, quiero que tengas mucho cuidado con esto porque podrías ocultar accidentalmente mucha funcionalidad de clic en tu sitio web. Pero con este ejemplo, lo que pudimos hacer es dentro de ese menú desplegable, ya había un objetivo de clic para activar toda la tarjeta. Entonces, pudimos establecer el div externo como un rol genérico de grupo o incluso podríamos eliminar completamente el rol y hacer que el objetivo de clic sea muy genérico. Pero sabiendo que los usuarios que usan lectores de pantalla u otras herramientas de asistencia pueden usar ese botón desplegable para hacer clic en la acción del botón completo. Así que hay algunas cosas con las que puedes experimentar. Pero cuando juegues con los roles, te animo a tener mucho cuidado. Pero en general, si estás probando alguna de estas funcionalidades, cualquiera que sea la opción que elijas, te animo a realizar grupos de enfoque con usuarios que utilicen diferentes herramientas de asistencia. Te darán comentarios sobre si es realmente claro, si es realmente conciso, si funciona con tu herramienta o funcionalidad, y podrán navegar fácilmente por tu sitio web sin problemas. Y en general, sin importar qué opción elijas, te animo a compartir tus aprendizajes sobre qué enfoque tomaste. Escribe documentación dentro de tu empresa, comparte tus aprendizajes en línea porque en general, las soluciones accesibles están en constante evolución. Sé que cuando me encontré con este problema hace años, no había documentación en línea sobre cómo resolver este problema. Entonces, cualquiera que sea la opción que elijas para tu empresa o para tu sitio web, por favor documenta y compártelo en línea para que podamos crear constantemente soluciones mejores y más accesibles. Y si realmente disfrutaste de mi presentación y quieres ver más, mi nombre es Kat Johnson, y espero que te pongas en contacto y me sigas en mi sitio web, katinamachines.com, o en mi LinkedIn. Muchas gracias por acompañarme en esta presentación, y espero que tengas un excelente resto de tu tiempo en la Cumbre de React. Gracias.

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.
Menos desorden, más poder: Aprovecha el poder de la plataforma web
C3 Dev Festival 2024C3 Dev Festival 2024
30 min
Menos desorden, más poder: Aprovecha el poder de la plataforma web
This talk focuses on the powerful features of CSS and HTML that can level up developer skills and enhance web UI. Scroll-driven animations, popover API, and anchor positioning are explored as ways to create dynamic effects, improve performance, and increase accessibility. The talk also emphasizes the benefits of building presentations with CSS and HTML, separating logic from styling, and leveraging core platform features. Wishlist features for the web platform and the challenges of pushing updates across browsers are discussed.
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.
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.