Accesibilidad en interacciones DOM con JavaScript

Implementa componentes interactivos que funcionen con teclado, lector de pantalla y gestión correcta del foco.

Interactividad sin accesibilidad es deuda técnica y deuda de producto.

JavaScript debe respetar orden de foco, feedback semántico y control por teclado.

Si cambias estado visual, también debes actualizar estado accesible.

Los patrones correctos evitan frustración y mejoran calidad global de la UI.

  • Todo componente interactivo debe poder usarse sin ratón.
  • Si un botón abre un panel, el foco debe moverse a un lugar útil. Si el panel se cierra, el foco debe volver al trigger.
  • Evita `div` clicables para acciones principales; usa elementos nativos (`button`, `a`) siempre que puedas.
  • Gestiona foco en abrir/cerrar modales.
  • Soporta Enter y Space en controles personalizados.

Foco y teclado: base obligatoria

Todo componente interactivo debe poder usarse sin ratón.

Si un botón abre un panel, el foco debe moverse a un lugar útil. Si el panel se cierra, el foco debe volver al trigger.

Evita `div` clicables para acciones principales; usa elementos nativos (`button`, `a`) siempre que puedas.

  • Gestiona foco en abrir/cerrar modales.
  • Soporta Enter y Space en controles personalizados.
  • No ocultes el focus ring con CSS.

Sincronizar estado visual y estado ARIA

Si cambia la UI, cambia también lo que 'lee' tecnología asistiva.

Errores JS frecuentes que rompen accesibilidad

Son comunes y evitables con una checklist corta.

  • Abrir modal sin mover foco al contenido.
  • Cerrar modal sin devolver foco al botón que lo abrió.
  • Ocultar contenido visualmente sin actualizar atributos.
  • Capturar teclas globalmente e impedir navegación natural.
JavaScript
29

Accesibilidad en interacciones DOM con JavaScript

Implementa componentes interactivos que funcionen con teclado, lector de pantalla y gestión correcta del foco.

Código del tema: focus management | aria-* | keyboard events

📘 Teoría

Foco y teclado: base obligatoria

Todo componente interactivo debe poder usarse sin ratón.

Si un botón abre un panel, el foco debe moverse a un lugar útil. Si el panel se cierra, el foco debe volver al trigger.

Evita `div` clicables para acciones principales; usa elementos nativos (`button`, `a`) siempre que puedas.

  • Gestiona foco en abrir/cerrar modales.
  • Soporta Enter y Space en controles personalizados.
  • No ocultes el focus ring con CSS.

Sincronizar estado visual y estado ARIA

Si cambia la UI, cambia también lo que 'lee' tecnología asistiva.

Errores JS frecuentes que rompen accesibilidad

Son comunes y evitables con una checklist corta.

  • Abrir modal sin mover foco al contenido.
  • Cerrar modal sin devolver foco al botón que lo abrió.
  • Ocultar contenido visualmente sin actualizar atributos.
  • Capturar teclas globalmente e impedir navegación natural.

🧪 Aprende probando

Ejemplo Ejemplo guiado: botón expandible accesible Control de panel con `aria-expanded` y `hidden`.

🏁 Retos

Reto Reto: soportar Escape para cerrar Añade manejo de teclado para cerrar un panel/modal.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre JavaScript.

Test de JavaScript
CodePen: eventos y DOM
Abrir en CodePen

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com