Cómo comprobar el contraste de colores para la accesibilidad

· 7 min de lectura

Aproximadamente 1 de cada 12 hombres y 1 de cada 200 mujeres tienen alguna forma de deficiencia de vision de color. Millones mas tienen baja vision, ojos envejecidos, o estan viendo pantallas bajo el sol brillante. Si su texto no tiene suficiente contraste contra su fondo, estas personas no pueden leerlo. El contraste de color no es solo algo bueno, es un requisito basico de accesibilidad. Un verificador de contraste basado en navegador maneja todo el trabajo localmente sin subir ningun color o dato a un servidor.

Lo que WCAG requiere

Las Pautas de Accesibilidad para el Contenido Web (WCAG) definen ratios minimos de contraste entre texto y su fondo:

NivelTexto normalTexto grandeUI no-texto
AA (minimo)4.5:13:13:1
AAA (mejorado)7:14.5:13:1

«Texto grande» significa 18px negrita o 24px regular o mas. El ratio de contraste va desde 1:1 (sin contraste, blanco sobre blanco) hasta 21:1 (contraste maximo, negro sobre blanco).

Como verificar el contraste

  1. Seleccione sus colores: ingrese los colores de primer plano (texto) y fondo usando codigos HEX, valores RGB o selectores de color.
  2. Verifique los resultados: la herramienta muestra instantaneamente el ratio de contraste y si su combinacion pasa WCAG AA y AAA para texto normal y grande.
  3. Ajuste si es necesario: si el contraste falla, oscurezca el texto o aclare el fondo (o viceversa) hasta que pase el nivel requerido.

Una breve historia de los estandares de contraste de color

Antes de WCAG, la accesibilidad web era un mosaico de reglas especificas de proveedor. El W3C publico WCAG 1.0 en 1999, con orientacion sobre contraste pero sin ratio especifico. WCAG 2.0 (2008) introdujo la formula 4.5:1 / 7:1 basada en la ciencia del color de la Dra. Lillian Yetenekian y el laboratorio de IBM Research, con aportes de investigadores de baja vision. La formula esta disenada para que una persona con vision 20/40 (baja vision leve) pueda leer texto conforme con AA, y una persona con vision 20/80 (baja vision significativa) pueda leer texto conforme con AAA.

WCAG 2.1 (2018) anadio requisitos de contraste para componentes UI (3:1 para no-texto), objetos graficos e indicadores de foco. WCAG 2.2 (2023) anadio mas requisitos en torno a tamanos de objetivo y visibilidad de foco.

El borrador de trabajo actual de WCAG 3.0 propone una nueva formula de contraste (APCA, Accessible Perceptual Contrast Algorithm) que coincide mejor con la percepcion humana, especialmente para texto mas oscuro. APCA aun no es una recomendacion del W3C pero ya esta soportada por algunas herramientas como vista previa.

La adopcion legal de WCAG ha sido constante:

Para la mayoria de los sitios web de cara al publico, WCAG 2.1 AA es el minimo legal de facto.

Como se calcula el ratio de contraste

El ratio de contraste se calcula usando la luminancia relativa de cada color:

  1. Convertir cada color de sRGB a RGB lineal (correccion gamma)
  2. Calcular luminancia relativa: L = 0.2126 R + 0.7152 G + 0.0722 B
  3. Contraste = (L_mas_claro + 0.05) / (L_mas_oscuro + 0.05)

El resultado es un numero de 1 (sin contraste) a 21 (contraste maximo). Los desplazamientos de 0.05 evitan la division por cero y modelan ligeramente la contribucion de la luz ambiente al contraste percibido.

La formula fue disenada deliberadamente para ser determinista y computable, de modo que los mismos colores siempre produzcan el mismo ratio. No toma en cuenta:

Por eso las verificaciones WCAG son necesarias pero no suficientes. La revision visual con usuarios diversos (incluidos los daltonicos) captura el resto.

Errores comunes de contraste

Texto gris claro sobre blanco: #999999 sobre #ffffff tiene un ratio de solo 2.8:1. Esto falla WCAG AA. Puede verse «limpio» para un disenador con vision perfecta, pero es ilegible para muchas personas.

Texto coloreado sobre fondos coloreados: un boton azul con texto blanco a menudo pasa, pero un boton verde con texto blanco puede no pasar. Siempre verifique, no puede juzgar el ratio de contraste a simple vista.

Texto de marcador de posicion: los marcadores de posicion de campos de formulario son notoriamente de bajo contraste. Aunque WCAG no requiere estrictamente que los marcadores de posicion cumplan con los ratios de contraste, los usuarios aun necesitan leerlos.

Modo oscuro: los disenadores a menudo usan texto gris medio sobre fondos gris oscuro para un aspecto «sutil». Esto falla frecuentemente las verificaciones de contraste.

Texto sobre imagenes: el texto colocado sobre una imagen heroe a menudo pasa cuando la imagen es oscura y falla cuando la imagen es clara. Use una capa de gradiente oscura/clara o un telon de fondo solido detras del texto sobre imagenes.

Desplazamientos de color de marca: la identidad corporativa a menudo dicta un color principal de marca. Si ese color falla como texto del cuerpo, uselo para encabezados (texto grande, umbral 3:1) y use un tono mas oscuro para el cuerpo.

Colores de enlace: los enlaces deben ser distinguibles del texto circundante. WCAG requiere un ratio de 3:1 entre el enlace y el texto del cuerpo, mas otro indicio visual (subrayado, negrita o icono).

Indicadores de foco: el contorno alrededor de un boton o enlace enfocado debe cumplir 3:1 de contraste contra su fondo. Los anillos de foco por defecto del navegador suelen ser seguros; los estilos de foco personalizados a menudo fallan.

Errores comunes

Mas alla de WCAG: APCA y el contraste perceptivo moderno

El Algoritmo Accesible de Contraste Perceptivo (APCA) es una formula mas nueva propuesta por Andrew Somers para WCAG 3.0. A diferencia de la formula WCAG 2, APCA:

Las puntuaciones APCA van aproximadamente de -108 a +108. Una puntuacion de 60 (positiva o negativa) es aproximadamente equivalente al 4.5:1 de WCAG 2. APCA aun no es legalmente requerido en ningun lugar, pero esta siendo adoptado por sistemas de diseno como Material Design e IBM Carbon como un estandar mirando hacia adelante.

Para la mayoria de los propositos practicos hoy, WCAG 2.1 AA (4.5:1 / 3:1) sigue siendo el estandar legal e industrial. Algunos equipos usan APCA en paralelo como verificacion de calidad.

Herramientas e integraciones

HerramientaCaso de uso
Browser DevTools (Chrome, Firefox)Inspeccionar elemento muestra el ratio de contraste en tiempo real
axe DevToolsAuditoria WCAG automatizada incluyendo contraste
WAVE (WebAIM)Extension de navegador visualizando errores de contraste
Stark (plugin de Figma)Verificacion de contraste en tiempo de diseno
Color Contrast Analyser (TPGi)App de escritorio con cuentagotas
Lighthouse (Chrome)Auditoria de accesibilidad integrada incluyendo contraste
ARC Toolkit (Deque)Extension de navegador de accesibilidad completa
PolypaneNavegador para disenadores con herramientas de contraste integradas
GitHub Action: a11y-actionsVerificaciones automatizadas a nivel PR
CI: pa11y, axe-core/cliBloquear PRs que introducen fallos de contraste

Integre al menos una herramienta automatizada en CI para que los fallos de contraste no puedan enviarse sin ser detectados.

Consejos

Privacidad y datos de diseno

El verificador de contraste de color se ejecuta completamente en su navegador. Los colores y valores que ingresa, los calculos y los resultados de contraste se quedan todos en su dispositivo. Nada se sube a un servidor, se registra o se comparte con nadie.

Esto importa menos para colores individuales (no son secretos) y mas para la verificacion por lotes o el trabajo de sistema de diseno donde podria pegar una paleta de marca completa, colores internos de mockup de producto, o especificaciones de UI de producto no lanzadas. Las herramientas de contraste en la nube registran cada pegado en sus registros de solicitud, a veces los retienen para «mejora del servicio», y podrian filtrar colores de marca no lanzados o disenos UI. Un verificador basado en navegador tiene exposicion cero: los colores nunca salen de su maquina.

La verificacion de contraste basada en navegador tambien funciona sin conexion una vez cargada la pagina, util para revisiones de diseno en aviones, en entornos seguros sin acceso a internet, o en cualquier lugar donde no pueda o no deba compartir datos de diseno con un servicio de terceros.

Preguntas frecuentes

¿A qué relación de contraste apuntar?

Para texto normal, apunta al menos a 4,5 : 1 (WCAG AA). Para texto grande (18 px negrita o 24 px regular), 3 : 1 basta. Para el nivel de accesibilidad más alto (AAA), apunta a 7 : 1 para texto normal.

¿Esto solo se aplica al texto?

No. WCAG 2.1 también exige un contraste suficiente para los componentes de interfaz y los objetos gráficos (iconos, bordes de campos, indicadores de foco). El mínimo para los elementos no textuales es 3 : 1.

¿Y en modo oscuro?

El modo oscuro requiere las mismas comprobaciones de contraste. Texto blanco sobre fondo oscuro suele pasar fácilmente, pero texto gris sobre fondo gris oscuro suele fallar. Prueba ambos modos.

¿El contraste de color es un requisito legal?

En muchas jurisdicciones, sí. La ADA (EE. UU.), EN 301 549 (UE) y leyes similares imponen la accesibilidad digital. La conformidad WCAG es el estándar reconocido para cumplirlos.