¿El texto es legible sobre el fondo?
Sepa si un texto será legible sobre su fondo: #111827 sobre blanco a 16 px tiene un contraste de 17.74 y cumple AA y AAA. El tamaño y el grosor de la letra deciden si se aplica el mínimo para texto grande. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Color
- #111827
- Fondo
- #ffffff
- Tamaño
- 16
- Unidad de tamaño
- Px
- Tamaño (pt)
- 12
- Tamaño (px)
- 16
- Escala del texto
- normal
Diseñadores e ingenieros suelen necesitar una respuesta sí o no a una pregunta engañosamente simple: ¿este color de texto, a este tamaño, es de verdad legible sobre ese fondo? Una razón de contraste por sí sola no zanja el caso, porque las Pautas de Accesibilidad para el Contenido Web tratan el tipo grande con más indulgencia que el cuerpo. Este comprobador toma un color hexadecimal de texto, un color hexadecimal de fondo y un tamaño de fuente, clasifica la muestra como normal o large con la regla publicada de dieciocho puntos o catorce puntos en negrita, y compara la razón oficial de contraste por luminancia relativa con el mínimo del nivel que usted pidió. El veredicto es un booleano llamado legible, más la razón, el umbral y la clase de escala para que pueda mostrar la aritmética junto a la respuesta.
Cómo se decide la legibilidad WCAG según el tamaño
Las Pautas de Accesibilidad para el Contenido Web no tratan cada glifo igual. El cuerpo a dieciséis píxeles tiene un deber de contraste más estricto que un titular a veinticuatro píxeles, porque las formas más grandes siguen siendo legibles con un hueco de luminancia menor. Este comprobador convierte esa regla en un solo booleano.
Analiza el color del texto y el del fondo como hex sRGB opaco, lineariza cada canal de ocho bits con la curva oficial por tramos y construye la luminancia relativa con los pesos 0.2126, 0.7152 y 0.0722. La razón de contraste es la luminancia más clara más 0.05 dividida entre la más oscura más 0.05.
En paralelo convierte el tamaño suministrado a puntos CSS, donde un punto equivale a cuatro tercios de un píxel, y clasifica la muestra como large cuando alcanza al menos dieciocho puntos, o al menos catorce puntos y va marcada en negrita. El tipo grande necesita un mínimo de tres a uno para AA y de cuatro coma cinco a uno para AAA; el tipo normal necesita cuatro coma cinco y siete. El nivel solicitado elige uno de esos cuatro pisos.
La razón sin redondear se compara con el piso para que un 4.50 mostrado no cuelé un 4.499 por debajo de AA. Nada se infiere de CSS, capturas o una página en vivo: usted nombra el par y el tamaño, y obtiene un veredicto reproducible para tickets, tokens de diseño y puertas automatizadas.
Dónde rinde una comprobación sí o no según el tamaño
Los equipos de producto se topan con esta pregunta cuando un gris de marca luce elegante en una diapositiva pero falla como cuerpo de dieciséis píxeles sobre una tarjeta blanca, o cuando un titular a veinticuatro píxeles aprobaría AA mientras el mismo par fallaría en una etiqueta de formulario. Los diseñadores pegan un hex de token, la superficie detrás y el tamaño de la escala, y leen un único indicador legible antes de fijar el par.
Los ingenieros conectan el contrato a comprobaciones de pull request que bloquean un token de cuerpo cuando el tipo regular de dieciséis píxeles cae por debajo de 4.5 a 1, y aún permiten que un titular hero a dieciocho puntos use el piso de texto grande de 3 a 1. Los especialistas de calidad y accesibilidad adjuntan la razón numérica, la escala clasificada y el booleano a los tickets para que se corrija el par y el tamaño reales, no una conjetura de captura.
Los equipos de marketing verifican los hex de campaña contra el fondo del sitio al tamaño real del pie de foto, no a un tamaño de encabezado supuesto. En esta página el trabajo corre por completo en su navegador. Combine este veredicto con un escáner de accesibilidad de página completa cuando deba rastrear marcado en vivo, y con una matriz de razones de contraste cuando quiera todas las banderas AA y AAA de ambas escalas a la vez.
Use esta página cuando la intención de búsqueda sea, en concreto, si ese texto, a ese tamaño, es seguro sobre ese fondo.
Qué puede hacer con ella
Cuerpo frente a titular con el mismo par hex
Compruebe si un token gris sobre blanco que falla a 16px de cuerpo aún aprueba como texto grande a 24px antes de reutilizarlo en un hero.
Puertas de CI que conocen la escala tipográfica
Rechace una pull request cuando un color primario de cuerpo a 16px regular baje de AA 4.5:1, mientras los titulares usen el piso de texto grande.
Prueba en el ticket con un veredicto sí o no
Adjunte el booleano, la razón y la escala clasificada a un fallo de accesibilidad para que la corrección apunte al tamaño real, no a una captura.
Preguntas frecuentes
¿Cómo sé si un texto es legible sobre un fondo?
Envíe el hex del texto, el hex del fondo y el tamaño de fuente.
¿Qué cuenta como texto grande?
El texto a gran escala según WCAG tiene al menos 18 point, o al menos 14 point y negrita. Esta herramienta convierte píxeles CSS con 1pt = 4/3 px, de modo que 24px regular y 18.67px negrita son large.
¿Qué mínimo de contraste se aplica?
Texto normal: AA 4.5:1 y AAA 7:1. Texto grande: AA 3:1 y AAA 4.5:1. El nivel pedido (aa por defecto) elige un piso; las banderas usan la razón sin redondear.
¿Cuánto cuesta comprobar si el texto es seguro sobre el fondo?
Es gratis en su navegador en esta página.
¿Por qué un titular aprueba y los mismos colores fallan en el texto corrido?
El texto grande tiene un mínimo más bajo: 3 a 1 para AA en vez de 4.5 a 1. Un titular de 24 píxeles cuenta como grande con 18 puntos, mientras que el texto de 16 píxeles es normal y debe cumplir el mínimo más estricto.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/color/safe-on-background \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"color":"#111827","background":"#ffffff","size":16}'const res = await fetch("https://api.kit.forhosting.com/color/safe-on-background", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"color": "#111827",
"background": "#ffffff",
"size": 16
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/safe-on-background",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"color": "#111827",
"background": "#ffffff",
"size": 16
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/safe-on-background", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"color":"#111827","background":"#ffffff","size":16}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"color":"#111827","background":"#ffffff","size":16}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/safe-on-background", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"color": "#111827",
"background": "#ffffff",
"size": 16
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.safe_on_background",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_color_chars | 32 |
max_size | 500 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
La misma función pura corre gratis en el navegador y en la API a $0.002 por llamada exitosa. Un hex inválido, un tamaño ausente o un tamaño no positivo fallan con invalid_input y no se facturan.
Cómo se decide la legibilidad WCAG según el tamaño
El payload informa entonces legible, la razón redondeada a dos decimales, el mínimo aplicado, si la escala clasificada aprobaría AA y AAA, y una etiqueta de método wcag_relative_luminance.
Contrato de entrada, unidades y validación
Ambos deben ser #RGB o #RRGGBB, con o sin la almohadilla inicial, sin distinguir mayúsculas, y de no más de treinta y dos caracteres. La validación fallida no se factura. Envíe un objeto JSON con tres campos obligatorios. color es el hex del texto; también se acepta como text_color, foreground, fg o text. background es el hex de la superficie; también se acepta como background_color o bg. Los sufijos alfa, las funciones rgb(), las funciones hsl() y los colores CSS con nombre se rechazan con invalid_input que nombra el campo. size es un número finito positivo no mayor que quinientos; font_size es un alias. size_unit vale px por defecto (píxeles CSS) y puede fijarse a pt (puntos CSS). La conversión es exacta: dieciocho puntos son veinticuatro píxeles, y catorce puntos son dieciocho y dos tercios de píxel. bold vale false por defecto y acepta un booleano o las cadenas true y false; a catorce puntos o más, la negrita pasa la muestra a la clase de texto grande. level vale aa por defecto y debe ser aa o aaa. Si hay éxito, la respuesta ecoa los hex en minúsculas normalizados, el tamaño que usted envió, size_pt y size_px, bold, text_scale como normal o large, el nivel pedido, minimum_ratio, contrast_ratio, passes_aa, passes_aaa y el booleano legible. No hay llamada de red, ni reloj, ni muestra aleatoria: el mismo trío de color, background y size produce siempre el mismo veredicto en la herramienta gratuita del navegador y en la API.
Dónde rinde una comprobación sí o no según el tamaño
Por la API cada consulta exitosa cuesta $0.002; la entrada inválida no se cobra; no se guarda nada tras devolver la respuesta.
Preguntas técnicas
¿Qué formatos de color se aceptan?
Solo hex: #RGB o #RRGGBB, con o sin la almohadilla inicial. rgb(), hsl(), colores con nombre y hex con alfa se rechazan con invalid_input.