Códigos de color HEX y RGB: cómo leerlos, convertirlos y usarlos

#2a9d8f y rgb(42, 157, 143) son el mismo verde azulado escrito de dos formas. Te enseñamos a leer los códigos a simple vista, a convertir entre HEX, RGB y HSL y a comprobar si un texto cumple el contraste WCAG.

10 min de lectura ToolsBasic
Códigos de color HEX y RGB: cómo leerlos, convertirlos y usarlos

Los códigos de color son la manera de describir un color con números para que lo entiendan el navegador, el editor de diseño y la hoja de estilos. En la web predominan dos: HEX, como #2a9d8f, y RGB, como rgb(42, 157, 143). Ambos indican cuánta luz roja, verde y azul se mezcla, con un valor de 0 a 255 por canal; HEX lo escribe en base 16 y RGB en base 10. HSL describe ese mismo valor como tono, saturación y luminosidad. El píxel que pinta el navegador es idéntico en los tres casos.

El selector de color te muestra a la vez el valor HEX y el RGB del tono que elijas. Si necesitas localizar valores dentro de un CSS minificado, la herramienta para formatear CSS lo vuelve legible línea a línea. Para llevar una hoja existente a Sass, convertir CSS a SCSS anida las reglas (las variables las defines tú después), y convertir SCSS a CSS calcula funciones como darken() o rgba() y devuelve valores finales.

Cómo leer los códigos de color HEX

Un código HEX es una almohadilla seguida de tres pares de dígitos hexadecimales: #RRGGBB. El sistema hexadecimal usa del 0 al 9 y de la a a la f (de 10 a 15), así que cada par va de 00, que es 0, a ff, que es 255. Con 256 valores por canal salen 16.777.216 combinaciones posibles.

Fíjate en #2a9d8f. Sus pares son 2a, 9d y 8f: poco rojo y bastante verde y azul en proporciones parecidas, es decir, un verde azulado. Con algo de práctica, la mayoría de valores se leen así, sin convertir nada:

CódigoQué indica el patrónResultado
#ffffffLos tres canales al máximoBlanco
#757575Tres pares igualesGris medio
#d62828Domina el rojoRojo intenso
#2a9d8fVerde y azul altos, rojo bajoVerde azulado
#f4a261Rojo alto, verde medio, azul bajoNaranja arena
#264653Todo bajo, con algo más de azulAzul petróleo oscuro

Cuando los tres canales son iguales, el resultado siempre es un gris. Y si rojo y verde están altos a la vez sale amarillo: la pantalla mezcla luz, no pintura.

HEX abreviado de tres dígitos

Si los dos dígitos de cada par coinciden, el código se puede escribir con tres y el navegador duplica cada uno: #fa0 equivale a #ffaa00 y #333 a #333333. Un valor como #2a9d8f no admite abreviatura, y si lo intentas obtienes otro distinto: #298 se expande a #229988. Las mayúsculas dan igual al navegador, pero elegir una sola forma de escribir facilita buscar y comparar dentro del proyecto.

HEX de ocho dígitos con transparencia

El nivel 4 del módulo de color de CSS (CSS Color Module Level 4) añadió un cuarto par opcional para el canal alfa: #RRGGBBAA. Con ff el resultado es opaco y con 00, invisible. #2a9d8f80 es el verde azulado a un 50 % aproximado de opacidad, porque 128 entre 255 da 0,5. También existe la versión corta de cuatro dígitos: #fa08 significa #ffaa0088.

RGB y RGBA en CSS

RGB escribe los mismos tres canales en decimal. La sintaxis clásica separa con comas y usa rgba() para la transparencia, con un cuarto valor entre 0 y 1; la sintaxis moderna separa con espacios y añade el alfa tras una barra:

background: rgb(42, 157, 143);
background: rgba(42, 157, 143, 0.12);
background: rgb(42 157 143 / 12%);

Las tres funcionan en los navegadores actuales. Si tu proyecto todavía da soporte a navegadores muy antiguos, quédate con la forma con comas. RGB tiene una ventaja práctica sobre HEX: los cálculos (aclarar, oscurecer, añadir transparencia) se razonan mejor con números decimales.

HSL: tono, saturación y luminosidad

HSL describe el color como lo haría una persona. El tono es un ángulo en la rueda cromática: 0 es rojo, 120 verde y 240 azul. La saturación mide la viveza, de gris (0 %) a tono puro (100 %). La luminosidad va del negro (0 %) al blanco (100 %), con el tono pleno en el 50 %. Nuestro verde azulado, #2a9d8f, es hsl(173, 58%, 39%).

Su gran ventaja aparece cuando necesitas variantes de una misma base. Si mantienes tono y saturación y mueves solo la luminosidad, los estados normal, hover y pulsado de un botón quedan coherentes entre sí. Las funciones darken() y lighten() de Sass hacen exactamente eso:

$primario: #2a9d8f;
.boton:hover { background: darken($primario, 10%); }
.aviso { background: rgba($primario, 0.12); }

Al compilarlo obtienes background: #1f756a; para el hover y background: rgba(42, 157, 143, 0.12); para el aviso: la luminosidad baja diez puntos y el tono no se mueve.

Convertir códigos de color entre HEX, RGB y HSL

Pasar de una notación a otra no pierde información, porque es el mismo valor escrito de otra forma. El selector te da HEX y RGB de una vez; si quieres entender el cálculo, hazlo a mano al menos una vez:

  1. Separa el HEX en pares: #f4a261 da f4, a2 y 61.
  2. Convierte cada par multiplicando el primer dígito por 16 y sumando el segundo: f4 = 15 × 16 + 4 = 244; a2 = 10 × 16 + 2 = 162; 61 = 6 × 16 + 1 = 97.
  3. Escribe el resultado: rgb(244, 162, 97).
  4. Para volver, divide cada número entre 16: el cociente es el primer dígito y el resto, el segundo. 162 entre 16 da 10 y resto 2, es decir, a2.
  5. Para HSL, divide los canales entre 255 y busca el mayor y el menor: la luminosidad es su media, y la saturación y el tono salen de la distancia entre ambos y de qué canal domina. En este caso, hsl(27, 87%, 67%).
NombreHEXRGBHSL
Verde azulado#2a9d8frgb(42, 157, 143)hsl(173, 58%, 39%)
Naranja arena#f4a261rgb(244, 162, 97)hsl(27, 87%, 67%)
Azul petróleo#264653rgb(38, 70, 83)hsl(197, 37%, 24%)
Rojo intenso#d62828rgb(214, 40, 40)hsl(0, 69%, 50%)

Como HSL se redondea a números enteros, ir y volver puede desviarse una unidad. Guarda siempre el valor HEX o RGB como referencia en tus variables de diseño.

Contraste accesible con los códigos de color: WCAG 4,5:1 y 3:1

Una paleta bonita no sirve si el texto no se lee. Las Pautas de Accesibilidad para el Contenido Web (WCAG 2.1 y 2.2) del W3C miden la diferencia entre texto y fondo con una razón que va de 1:1, mismo valor, a 21:1, negro sobre blanco. Los umbrales que conviene memorizar son:

  • Texto normal, nivel AA: 4,5:1 como mínimo (criterio de conformidad 1.4.3).
  • Texto grande, nivel AA: 3:1. Se considera grande a partir de 18 puntos (unos 24 px) o 14 puntos en negrita (unos 18,66 px).
  • Componentes de interfaz y gráficos: 3:1 frente a los colores adyacentes; incluye bordes de campos, indicadores de foco e iconos con significado (criterio 1.4.11).
  • Nivel AAA: 7:1 para texto normal y 4,5:1 para texto grande (criterio 1.4.6).

Cómo se calcula la razón de contraste

Primero se obtiene la luminancia relativa de cada valor. Cada canal se divide entre 255 y se linealiza: si queda en 0,04045 o menos se divide entre 12,92; si no, se calcula ((valor + 0,055) / 1,055) elevado a 2,4. Algunas versiones antiguas de las pautas usan 0,03928, sin efecto práctico con canales de 8 bits. La luminancia es 0,2126 × R + 0,7152 × G + 0,0722 × B; el verde pesa más porque el ojo es más sensible a él. La razón es (luminancia clara + 0,05) / (luminancia oscura + 0,05).

TextoFondoRazónVeredicto
Blanco#2a9d8f3,32:1Solo texto grande
Blanco#1f7a6f5,16:1AA para texto normal
#264653Blanco10,08:1AAA
#264653#f4a2614,89:1AA para texto normal
Blanco#f4a2612,06:1No pasa ni en texto grande
#757575Blanco4,61:1AA para texto normal

Las dos primeras filas muestran un caso muy común: un botón con el verde de marca y texto blanco se queda corto para texto normal, pero bajar la luminosidad unos puntos (#1f7a6f) lo resuelve sin cambiar la identidad visual. Con el naranja arena pasa lo contrario: el texto blanco no funciona y el azul petróleo, sí.

Errores de contraste que se escapan en las revisiones

  • El texto de ejemplo de los formularios. El gris claro del placeholder también es texto y casi nunca llega a 4,5:1.
  • Texto sobre fotos. Mide contra la zona más clara de la imagen o añade una capa oscura semitransparente detrás de las letras.
  • Estados hover y foco. Un enlace que cumple en reposo puede dejar de cumplir con su tono al pasar el ratón.
  • El tono como única señal. Marcar un error solo con un borde rojo no sirve a una persona con daltonismo; añade texto o un icono (criterio 1.4.1).

Los componentes inactivos y los elementos puramente decorativos están exentos del mínimo, pero esa excepción nunca cubre el texto que hay que leer.

Orden y coherencia en tu hoja de estilos

  • Define cada valor de marca una sola vez, como propiedad personalizada (--primario: #2a9d8f;) o como variable de Sass.
  • Elige una sola forma de escribirlos, por ejemplo HEX de seis dígitos en minúsculas.
  • Genera las versiones transparentes a partir de la misma variable, con rgba($primario, 0.12), en lugar de inventar tonos casi iguales.
  • Antes de auditar un CSS minificado, formatéalo: hacer inventario es mucho más fácil con una declaración por línea.

Cuando un proyecto crece sin estas reglas, el mismo azul acaba escrito de cinco maneras distintas y nadie sabe cuál es el oficial. Una variable bien nombrada ahorra esa discusión.

Preguntas frecuentes

¿HEX y RGB dan la misma calidad?

Sí. Los dos guardan 8 bits por canal y solo cambia la base numérica. #d62828 y rgb(214, 40, 40) pintan exactamente el mismo píxel.

¿Qué uso para la transparencia, HEX de ocho dígitos o rgba()?

Ambos funcionan. El HEX de ocho dígitos es más corto, pero el alfa en hexadecimal cuesta leerlo; rgb(42 157 143 / 12%) se entiende a la primera.

¿Por qué el mismo código se ve distinto en dos pantallas?

El código describe un valor en el espacio sRGB. La calibración, el brillo y las pantallas de gama amplia pueden mostrarlo de forma diferente, pero el navegador pide siempre lo mismo.

¿Un 4,48:1 se redondea a 4,5:1?

No. Las pautas no redondean, así que 4,48:1 no cumple y los validadores automáticos lo marcarán. Oscurecer el texto un paso suele bastar.

Si quieres saber cómo se guardan los rellenos y trazos dentro de un gráfico vectorial, lee qué es un archivo SVG. Para entender por qué el tamaño de la paleta influye en el peso de una imagen, tienes cómo elegir formato de imagen. Antes de publicar tus hojas de estilo, qué es minificar código explica el último paso, y si piensas incrustar iconos pequeños en el CSS, qué es Base64 te ayudará a decidir cuándo compensa.

Herramientas relacionadas

Catálogo

Artículos del blog