¿Qué es RGB?
Las siglas RGB significan Rojo (red), verde (green) y azul (blue) y es un modelo para representar colores basados en la combinación de estos tres colores primarios. La idea es sencilla: dependiendo de la cantidad de cada color, obtendrás otro color diferente. Veamos algunos ejemplos:
- Si tienes el canal de rojo al máximo, y el verde y azul al mínimo, obtendrás el color rojo.
- Si tienes el canal rojo y verde al máximo, y el azul al mínimo, obtendrás el amarillo.
- Si tienes todos los canales al máximo, obtendrás el blanco.
- Si tienes todos los canales al mínimo, obtendrás el negro.
La función rgb()
moderna
La forma de indicar colores en CSS mediante el modelo RGB es utilizar la función rgb()
. Para ello, tenemos que conocer la sintaxis, que no es más que lo siguiente:
Función RGB | Descripción |
---|---|
rgb(r g b) | Valores numéricos |
rgb(r g b / a) | Se añade un valor correspondiente al grado de transparencia, separado por / . Ver canales alfa |
Los valores anteriormente indicados como r
, g
y b
significan rojo, verde y azul, respectivamente, y hacen referencia a la cantidad de color que poseen estos canales para generar otro color. Para especificarlo se puede hacer de dos formas:
Como números, desde el 0
al255
, siendo el primero el más oscuro y el segundo el más claro.Como porcentajes, desde el 0%
al100%
, siendo el primero el más oscuro y el segundo el más claro.
Como se puede ver en la siguiente imagen, donde utilizamos el formato de rgb(0 0 0)
de cada canal, obtenemos el color negro (todos los canales están en su valor menos intenso). En cambio, si utilizamos una cantidad rgb(255 0 0)
, obtendremos el color rojo (solo el canal rojo está en el más intenso). De esta forma, mezclando las cantidades de cada canal, se puede obtener prácticamente cualquier color:
Veamos un fragmento de código CSS donde utilicemos la función rgb()
con sus respectivos parámetros en cada canal. La utilizaremos con una propiedad como color
o background-color
:
.element {
background-color: rgb(125 80 10);
background-color: rgb(55% 25% 75%);
}
El desarrollador puede elegir si prefiere utilizar la nomenclatura con 100%
y puede resultar más sencillo de calcular que usar valores numéricos con valor máximo en 255
.
Canal alfa o transparencia
Como se comentó en el capítulo anterior, es posible que queramos que los colores tengan un grado de transparencia y no sean totalmente opacos. Para eso, se suele utilizar el denominado canal alfa. Utilizando la función rgb()
se puede indicar el canal alfa simplemente separando con un slash /
:
Método | Descripción |
---|---|
rgb(r g b / a) | Idéntico a rgb(r g b) pero se añade el porcentaje del canal alfa separado por un / . |
De la misma forma que los canales r
, g
y b
, el canal alfa
puede ser indicado de dos formas:
- Con un valor
, donde el valor mínimo es 0
, el valor máximo es1
y se pueden usar decimales. - Con un valor
, donde el valor mínimo es 0%
y el valor máximo es100%
.
Veamos algunos ejemplos:
.element {
background-color: rgb(100% 50% 25% / 50%);
background-color: rgb(100% 50% 25% / 0.5);
background-color: rgb(0 0 0 / 50%);
}
Ten en cuenta que aunque también puedes utilizar la antigua función
rgba()
, se recomienda utilizarrgb()
.
Notación antigua (legacy)
Quizás, si llevas algún tiempo con CSS habrás encontrado que la sintaxis que menciono en los apartados anteriores (sintaxis moderna) es diferente a la que ya conocías. Antiguamente, se utilizaban otras sintaxis como las que se pueden ver en la siguiente tabla.
Aunque hoy en día sigue siendo posible utilizarlas, se consideran «sintaxis legacy», es decir, una sintaxis que debería evitarse a favor de la sintaxis moderna que se explicó más arriba.
Estas sintaxis a evitar son las siguientes:
Función RGB | Descripción |
---|---|
rgb(r, g, b) | Valores numéricos |
rgb(r, g, b, a) | Se añade al anterior un valor correspondiente al canal alfa, separado por coma. Ver canales alfa |
rgba(r, g, b, a) | Idem al anterior, pero indicando rgba() en lugar de rgb() . |
La sintaxis legacy solía ser molesta, ya que si por error omitíamos las comas o la a
de rgba()
, el navegador no procesaba el código y no mostraba el color:
.element {
background-color: rgb(125, 80, 10); /* ❌ Evitar */
background-color: rgb(55%, 25%, 75%); /* ❌ Evitar */
background-color: rgb(0, 0, 0, 0.5); /* ❌ Evitar */
background-color: rgba(0, 50, 150, 0.5); /* ❌ Evitar */
}
Nuevamente, la función rgba()
, aunque antiguamente era necesaria para indicar un canal alfa, ya no lo es.