Componentes accesibles en sistemas de diseño

Desarrollo Web

Guía para crear componentes accesibles: semántica, contraste, foco, ARIA, pruebas y gobernanza en tu Design System.

Si un componente base falla en accesibilidad, el mismo fallo se copia en todo el producto. Así de simple.

Yo resumiría el tema en cinco puntos:

  • La accesibilidad no va al final: debe entrar en diseño, código, contenido y pruebas desde el primer día.

  • Los fallos más repetidos están en contraste, foco, teclado, semántica y nombres accesibles.

  • Los datos son claros: en 2025, WebAIM detectó casi 60 millones de errores en 1 millón de páginas, y el 94,8 % tenía al menos un fallo WCAG.

  • En España y la UE ya no es opcional: EN 301 549 aplica al sector público y la EAA amplía esta exigencia desde junio de 2025.

  • La base mínima pasa por usar HTML semántico, foco visible, contraste correcto, reglas de contenido y pruebas con herramientas como axe-core, teclado y lector de pantalla.

En otras palabras: yo no intentaría “arreglar” la accesibilidad pantalla por pantalla. La pondría dentro de la biblioteca de componentes para cortar el problema de raíz. Si el botón, el modal o el campo de formulario nacen bien, el sistema deja de repetir errores en cada entrega.

Qué me llevaría de este artículo:

  • un componente accesible no depende solo del aspecto visual;

  • ARIA no sustituye al HTML nativo;

  • sin documentación de uso, cada equipo aplica el componente a su manera;

  • sin pruebas en el pipeline, las regresiones acaban en producción;

  • sin responsables claros, el nivel baja con el tiempo.

Si yo tuviera que dejar una sola idea, sería esta: un sistema de diseño accesible no se corrige al final; se construye bien desde el inicio y se revisa en cada cambio.

Cómo tratar la accesibilidad en un Design System

Los fallos de accesibilidad más comunes en los componentes de un sistema de diseño

Los fallos de accesibilidad suelen empezar en un componente base. A partir de ahí, se copian una y otra vez en cada producto que lo reutiliza. Por eso el problema escala tan deprisa. En general, estos fallos se mueven en tres frentes: visual, teclado y contenido.

Contraste deficiente, temas inaccesibles y foco invisible

Muchas paletas de marca no llegan al ratio mínimo de 4,5:1 que pide WCAG 2.1 AA para texto normal, y los estados deshabilitados o de error suelen empeorar aún más la legibilidad. El tropiezo no está solo en el color del texto. También aparece en los estados de foco: si se eliminan o apenas se ven, quien navega solo con teclado pierde la pista de dónde está dentro de la interfaz.

Aquí es donde un sistema de diseño se la juega. Si el componente base no deja reglas claras, cada equipo acaba resolviéndolo como puede. Y cuando el paso de diseño a código no incluye contraste, foco, semántica y uso por teclado, llega la improvisación.

Flujos de teclado rotos y semántica incorrecta

Hay componentes que van bien con ratón y, sin embargo, se rompen por completo con teclado. Pasa mucho más de lo que parece. Los modales que no gestionan el foco, los menús que no responden a las flechas o los controles interactivos montados con div o span en vez de usar elementos HTML nativos son casos muy comunes.

La idea aquí es simple: el HTML semántico resuelve gran parte de la accesibilidad básica. ARIA no está para sustituirlo, sino para completar lo que HTML no cubre.

Reglas de contenido ausentes, documentación escasa y sin base de pruebas

También hay errores que nacen del contenido. Botones con solo un icono y sin aria-label, textos de enlace genéricos como "pulsa aquí" o imágenes informativas sin alt crean deuda de accesibilidad desde el primer día. Puede parecer un detalle menor, pero no lo es. Si el componente no dice bien qué hace, la experiencia se vuelve confusa.

A esto se suma otro problema: muchos sistemas de diseño no traen notas de accesibilidad por componente ni criterios de aceptación ligados a WCAG. Sin esa guía, cada equipo aplica el componente a su manera. Y si además no hay pruebas automatizadas en el pipeline, como axe-core, las regresiones terminan llegando a producción.

La corrección pasa por meter tokens, semántica y pruebas desde el inicio. No como parche, sino como parte del propio sistema.

Estos errores no suelen venir solos. Lo normal es que se mezclen y se hagan más graves entre sí.

Tipo de fallo

Manifestación habitual

Impacto

Visual

Texto con bajo contraste; foco invisible

No leen ni navegan

Teclado

Modales sin gestión de foco; botones no tabulables

Abandono de tareas críticas

Semántica

div como botón; input sin label

No anuncian rol ni estado

Contenido

Botones de icono sin nombre accesible; enlaces vagos

No entienden la acción

Cómo construir componentes accesibles: soluciones para cada fallo común

Métodos de Prueba de Accesibilidad: Cobertura, Esfuerzo e Impacto

Métodos de Prueba de Accesibilidad: Cobertura, Esfuerzo e Impacto

La clave no está en ir apagando fuegos uno a uno. Está en fijar reglas reutilizables para que el mismo fallo no vuelva a aparecer en todo el sistema. Si esas reglas viven en los tokens, la semántica, la documentación y las pruebas, el trabajo deja de ser parchear y pasa a ser prevenir.

Define sistemas de tokens e interacciones que pasen las comprobaciones de accesibilidad

Crea tokens semánticos para texto, fondo, borde y estados como error, éxito y advertencia. Después, valida cada uno con los ratios de WCAG 2.1 AA: 4,5:1 para texto normal y 3:1 para texto grande o componentes de interfaz como iconos y bordes.

También conviene dejar por escrito los estados de interacción: hover, foco, activo y deshabilitado. El foco debe verse con claridad. Para eso, define :focus-visible y usa un mínimo de 2 px. En pestañas y grupos de botones de opción, aplica roving tabindex para que la navegación con teclado siga una lógica clara y estable.

Cuando los tokens ya están bien resueltos, la base del componente debe apoyarse primero en la semántica y después en lo visual.

Usa HTML semántico primero y aplica ARIA solo donde añada valor

ARIA

El HTML nativo resuelve buena parte de la accesibilidad antes de tocar ARIA. Usa <button> para acciones y <a> para navegación. Marca las zonas de la página con <nav>, <header>, <main> y <footer>. Y, si tienes campos relacionados, agrúpalos con <fieldset> y <legend>.

ARIA entra en juego solo cuando HTML no llega. Por ejemplo:

  • aria-label en botones que solo muestran un icono

  • aria-describedby para enlazar un campo con su mensaje de error

  • aria-live="polite" para anunciar cambios dinámicos

Meter ARIA porque sí puede salir caro. A veces, en lugar de arreglar el problema, mete otros nuevos.

La accesibilidad no aguanta solo con buen marcado. Si la guía de uso y las pruebas no acompañan al componente, tarde o temprano algo se rompe.

Documenta el uso y prueba cada componente desde el inicio

Cada página de componente debería incluir, como poco, el nombre accesible que se exige, las reglas de contenido, ejemplos de uso correcto e incorrecto, y los atajos o teclas de uso, por ejemplo «Enter o Espacio para activar». Y las pruebas deben entrar en el ciclo desde el principio, no cuando ya está todo hecho.

Resumen de cobertura por método:

Método de prueba

Cobertura

Esfuerzo

Tipos de problemas detectados

Automatizado (axe-core)

~30-40 % de los criterios WCAG

Bajo (integración en CI/CD)

Contraste, texto alternativo, ARIA básica

Manual (teclado y lector de pantalla)

Alta

Medio

Foco, trampas de teclado, anuncios

Pruebas con usuarios

Máxima

Alto

Carga cognitiva, barreras reales

Lo normal es combinar pruebas automáticas, manuales y con usuarios según la criticidad del componente. Así cierras el control de calidad antes de publicarlo.

Gobernanza y flujo de trabajo: cómo los equipos mantienen los componentes accesibles con el tiempo

Cuando un componente ya está documentado y probado, el trabajo no se acaba ahí. A partir de ese momento, lo importante es mantener ese nivel en cada entrega. Si no hay un proceso claro de revisión y aprobación, el contraste, el foco y la semántica acaban deteriorándose poco a poco.

Asigna responsabilidades de revisión entre diseño, desarrollo y accesibilidad

La forma más simple de evitarlo es repartir bien la responsabilidad desde el principio:

Rol

Responsabilidad principal

Entregables clave

Diseñador

Interacción y estado visual

Ratios de contraste, estados de foco, flujos de teclado, objetivos táctiles

Desarrollador

HTML semántico y gestión del foco

Etiquetas HTML5, atributos ARIA, código de gestión del foco

QA / especialista

Auditoría y regresiones

Auditorías WCAG 2.1/2.2 AA, pruebas con lector de pantalla, regresiones

Product Manager

Gobernanza y flujo de trabajo

Asignación de recursos, fechas de revisión de accesibilidad, hoja de ruta de cumplimiento

Cuando cada rol sabe qué le toca, es mucho más fácil detectar fallos antes de que lleguen a producción. Y también evita ese problema tan común: que todo el mundo piense que “ya lo revisará otro”.

Elige un modelo de gobernanza que mantenga la calidad a escala

Después, toca decidir quién aprueba los cambios y cómo se mantienen con el paso del tiempo. Aquí suele haber dos caminos:

Modelo

Consistencia

Velocidad

Esfuerzo de mantenimiento

Responsabilidad

Centralizado

Alta: una fuente única de verdad

Más lenta: puede convertirse en cuello de botella

Concentrado en un equipo dedicado

Clara: el equipo de DS responde de los fallos

Distribuido

Variable: requiere sincronización fuerte

Más rápida: cada equipo itera de forma autónoma

Repartido entre distintos equipos de producto

Compartida: cada equipo responde de sus componentes

El modelo centralizado suele encajar mejor cuando lo primero es la consistencia. Hay una sola referencia y queda claro quién decide. La pega es evidente: si todo pasa por el mismo equipo, ese equipo puede frenar el ritmo.

El modelo distribuido da más margen a cada equipo para avanzar por su cuenta. Va mejor cuando hay referentes de accesibilidad dentro de cada equipo, pero pide mucha coordinación. Si esa coordinación falla, aparecen diferencias entre componentes que deberían comportarse igual.

Conecta la accesibilidad entre el handoff de Figma, el desarrollo y el mantenimiento

Figma

El handoff no sirve de mucho si la especificación no deja claro qué tiene que respetar el código. No basta con enseñar el aspecto visual. La documentación debe indicar rol, estado y navegación, porque Figma no resuelve eso por sí solo.

También conviene trabajar con variantes y tokens ya aprobados, evitar cambios improvisados y revisar el comportamiento en cada actualización. Si no existe ese circuito de revisión, los mismos errores vuelven una y otra vez en cada entrega.

Conclusión: el sistema mínimo para evitar problemas de accesibilidad recurrentes

Después de revisar fallos, soluciones y gobernanza, la idea central queda bastante clara: un sistema de diseño accesible se decide desde el principio. No se arregla al final ni se deja para una revisión de última hora. Empieza con semántica correcta, buen contraste, interacción cuidada y pruebas desde el arranque.

Los errores, además, no aparecen en lugares raros. Se repiten una y otra vez en botones, formularios, enlaces y estados de foco, justo donde el sistema debería aguantar mejor.

En España, la accesibilidad no es opcional. Pasarla por alto hace que los mismos fallos vuelvan en cada entrega y en cada equipo que usa esos componentes. Es el típico problema que se arrastra sprint tras sprint.

La base mínima no tiene misterio:

  • semántica correcta

  • foco visible

  • contraste suficiente

  • documentación clara sobre uso con teclado y lectores de pantalla

  • pruebas repetidas con responsabilidades bien definidas

Si el componente nace bien, el sistema deja de ir sembrando errores por todas partes.

FAQs

¿Por dónde empezar si mi sistema ya tiene componentes con fallos?

Empieza por tratar la accesibilidad como una parte básica de la calidad, no como un añadido de última hora. El primer paso suele estar en lo más simple: revisar el HTML semántico y comprobar que el contraste de color de tus componentes sea correcto.

A partir de ahí, conviene pulir varios puntos que marcan la diferencia en el día a día:

  • navegación por teclado y gestión del foco

  • etiquetas ARIA con sentido

  • tratamiento accesible de los errores

  • validación automatizada en tu CI para evitar regresiones

Dicho de forma simple: si la base falla, todo lo demás cojea. Un botón que parece un botón, pero no lo es en el HTML, acaba dando problemas. Y un formulario con errores mal comunicados frustra al usuario en segundos.

¿Qué componentes conviene revisar primero?

Conviene revisar primero el HTML semántico, porque aporta cerca del 70 % de la accesibilidad casi “de serie”.

Además, deja una base firme antes de sumar otras capas, como ARIA.

¿Cada cuánto hay que auditar la accesibilidad?

Se recomienda revisar la accesibilidad de forma regular durante todo el proceso de diseño y desarrollo.

Así es mucho más fácil detectar fallos y corregirlos cuanto antes, en lugar de encontrarlos al final cuando todo cuesta más tiempo y más trabajo.

Publicaciones de blog relacionadas