CSS hexadecimal RGBA?

199

Sé que puedes escribir ...

background-color: #ff0000;

... si quieres algo que sea rojo.

Y puedes escribir ...

background-color: rgba(255, 0, 0, 0.5);

... si quieres algo rojo y translúcido.

¿Hay alguna forma concisa de escribir colores parcialmente transparentes en hexadecimal? Quiero algo como:

background-color: #ff000088; <--- the 88 is the alpha

... o ...

background-color: #ff0000 50%;

Estoy obteniendo todos mis colores en hexadecimal, y tener que convertirlos a la escala decimal 0-255 es molesto.

Li Haoyi
fuente
1
Puede experimentar con diferentes anotaciones, pero no tuve éxito. rgb(0xff,\x80,#44)asombrosamente representación octal parece York un poco rgb(0100, 0200,0300)se#4080C0
yunzen
Es posible que desee usar ColorPic, que muestra las cifras decimales para un color seleccionado iconico.com/colorpic
yunzen
2
Como sugirió Slomojo, en MENOS puede hacer color de fondo: # ff0000 + rgba (0, 0, 0, .8); que convertirá el hexadecimal para usted y aún aplicará la transparencia, pero esto no se puede hacer usando CSS nativo.
fl3x7
1
Para completar, como discuten Slomojo y fl3x7, esto se puede hacer en Sass fácilmente : background-color: opacify(#ff0000, 0.5);o también background-color: transparentize(#ff0000, 0.5);puede suministrar variables de color hexadecimal de Sass a esas funciones de Sass.
Adam Caviness

Respuestas:

112

¡El Módulo de color CSS Nivel 4 probablemente admitirá la notación hexadecimal RGBA de 4 y 8 dígitos!

Hace tres semanas (18 de diciembre de 2014) el borrador del editor del Módulo de color CSS Nivel 4 se presentó al Grupo de trabajo CSS W3C. Aunque en un estado que es muy susceptible a cambios, la versión actual del documento implica que en un futuro próximo CSS admitirá la notación hexadecimal RGBA de 4 y 8 dígitos.

Nota: la siguiente cita tiene fragmentos irrelevantes recortados y la fuente puede haber sido muy modificada en el momento de leer esto (como se mencionó anteriormente, es un borrador del editor y no un documento finalizado).
Si las cosas han cambiado mucho, ¡deje un comentario para informarme para que pueda actualizar esta respuesta!

§ 4.2. Las notaciones hexadecimales RGB: #RRGGBB

La sintaxis de a <hex-color>es un <hash-token>token cuyo valor consta de 3, 4, 6 u 8 dígitos hexadecimales . En otras palabras, un color hexadecimal se escribe como un carácter hash, "#", seguido de cierto número de dígitos 0-9o letras a-f(el caso de las letras no importa, #00ff00es idéntico a #00FF00).

8 dígitos

Los primeros 6 dígitos se interpretan de manera idéntica a la notación de 6 dígitos. El último par de dígitos, interpretado como un número hexadecimal, especifica el canal alfa del color, donde 00representa un color totalmente transparente y ffrepresenta un color totalmente opaco.

Ejemplo 3
En otras palabras, #0000ffccrepresenta el mismo color que rgba(0, 0, 100%, 80%)(un azul ligeramente transparente).

4 dígitos

Esta es una variante más corta de la notación de 8 dígitos, "expandida" de la misma manera que la notación de 3 dígitos. El primer dígito, interpretado como un número hexadecimal, especifica el canal rojo del color, donde 0representa el valor mínimo y frepresenta el máximo. Los siguientes tres dígitos representan los canales verde, azul y alfa, respectivamente.

¿Qué significa esto para el futuro de los colores CSS?

Esto significa que suponiendo que esto no se elimine por completo del documento de Nivel 4, pronto podremos definir nuestros colores RGBA (o colores HSLA, si usted es uno de esos tipos) en formato hexadecimal en navegadores que admiten el Color Módulo de sintaxis de nivel 4.

Ejemplo

elem {
    background: rgb(0, 0, 0);           /* RGB notation (no alpha). */
    background: #000;                   /* 3-digit hexadecimal notation (no alpha). */
    background: #000000;                /* 6-digit hexadecimal notation (no alpha). */
    background: rgba(0, 0, 0, 1.0);     /* RGBA notation. */

    /* The new 4 and 8-digit hexadecimal notation. */
    background: #0000;                  /* 4-digit hexadecimal notation. */
    background: #00000000;              /* 8-digit hexadecimal notation. */
}

¿Cuándo podré usar esto en mis productos orientados al cliente?

Tumble Weed es la única respuesta real ...

Dejando a un lado todas las bromas: actualmente es solo el comienzo de 2015, por lo que todavía no serán compatibles con ningún navegador durante bastante tiempo, incluso si su producto solo está diseñado para funcionar en los navegadores más actualizados, probablemente No veré esto en acción en un navegador de producción en el corto plazo.

Ver la compatibilidad actual del navegador para la notación de color #RRGGBBAA

Sin embargo, dicho esto, la forma en que funciona CSS significa que podemos comenzar a usarlos hoy. Si realmente desea comenzar a usarlos en este momento, siempre que agregue una reserva, los navegadores que no sean compatibles simplemente ignorarán las nuevas propiedades hasta que se consideren válidas:

figure {
  margin: 0;
  padding: 4px;
  
  /* Fall back (...to browsers which don't support alpha transparency). */
  background: #FEFE7F;
  color: #3F3FFE;
  
  /* Current 'modern' browser support. */
  background: rgba(255, 255, 0, 0.5);
  color: rgba(0, 0, 255, 0.75);
  
  /* Fall... foward? */
  background: #ffff007F; /* Or, less accurately, #ff08 */
  color: #0000ffbe;      /* Or #00fc */
}
<figure>Hello, world!</figure>

Mientras esté viendo esta respuesta en un navegador que admita las propiedades backgroundy coloren CSS, el <figure>elemento resultante del fragmento anterior se verá muy similar a esto:

Imagen de resultado de fragmento de código

Usando la versión más reciente de Chrome en Windows (v39.0.2171) para inspeccionar nuestro <figure>elemento, veremos lo siguiente:

Ejemplo de inspector de elementos

Los rgba()valores anulan el retroceso hexadecimal de 6 dígitos , y nuestros valores hexadecimales de 8 dígitos se ignoran ya que el analizador CSS de Chrome los considera actualmente inválidos. Tan pronto como nuestro navegador admita estos valores de 8 dígitos, estos anularán los valores rgba().

ACTUALIZACIÓN 2018-07-04: Firefox, Chrome y Safari son compatibles con esta notación ahora, Edge todavía falta pero probablemente seguirá ( https://caniuse.com/#feat=css-rrggbbaa ).

James Donnelly
fuente
1
Recuerdo haber visto esto en las listas de correo hace aproximadamente un año a más tardar (la idea de tener un hexadecimal de 4/8 dígitos no es nada nuevo). Me alegra ver que ha entrado en Colors 4 por ahora.
BoltClock
¡@BoltClock con suerte también se quedará aquí!
James Donnelly
Firefox Nightly acaba de implementar esto :)
Florrie
/* Fall... foward? */»Sugiero saltar hacia adelante. Fallback y jumpforward: ^ p
WoodrowShigeru
Solo agrego un enlace útil. El enlace contiene una lista de valores de opacidad en hexadecimal. gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
Ashish Kumar
33

Encontré la respuesta después de publicar la mejora de la pregunta. ¡Lo siento!

MS Excel ayudó!

simplemente agregue el prefijo Hex al valor de color hexadecimal para agregar un alfa que tenga la opacidad equivalente como el valor de%.

(en rbga, el porcentaje de opacidad se expresa como un decimal como se mencionó anteriormente)

Opacity %   255 Step        2 digit HEX prefix
0%          0.00            00
5%          12.75           0C
10%         25.50           19
15%         38.25           26
20%         51.00           33
25%         63.75           3F
30%         76.50           4C
35%         89.25           59
40%         102.00          66
45%         114.75          72
50%         127.50          7F
55%         140.25          8C
60%         153.00          99
65%         165.75          A5
70%         178.50          B2
75%         191.25          BF
80%         204.00          CC
85%         216.75          D8
90%         229.50          E5
95%         242.25          F2
100%        255.00          FF
T9b
fuente
No lo entiendo realmente. ¿Quieres decir que #FF00000Ces equivalente a rgba(255,0,0,0.05)?
Yunzen
Es un prefijo, no un sufijo. Lo que significa que lo agrega al frente de su valor de color hexadecimal de 6 dígitos se #000000convierte #7F000000.
T9b
8
@ T9b: CSS3 no admite esta notación. Fin de la historia.
PointedEars
@PointedEars está mal en ambos aspectos. El OP no menciona específicamente CSS3, y esta pregunta que habría pensado es probable que esté más relacionada con problemas específicos de IE que todos sabemos que son difíciles. No obstante, IE utiliza valores de transparencia CSS y Hex en su CSS.
T9b
44
@ T9b Tonterías. El OP tiene una pregunta CSS sobre los valores RGBA. No hay soporte RGBA en CSS antes de CSS3. Si IE / MSHTML admite su notación, entonces eso es propietario , no compatible e inherentemente poco confiable. Y seguramente no está sugiriendo utilizar secuencias de comandos del lado del cliente para que esa notación funcione, ¿verdad? Porque eso no sería compatible y tampoco sería confiable.
PointedEars
22
RGB='#ffabcd';
A='0.5';
RGBA='('+parseInt(RGB.substring(1,3),16)+','+parseInt(RGB.substring(3,5),16)+','+parseInt(RGB.substring(5,7),16)+','+A+')';
James Alarie
fuente
var rgb = '#ffabcd'; var a = '0.5'; var matches = rgb.match(/#([\da-f]{2})([\da-f]{2})([\da-f]{2})/i); var rgba = 'rgba(' + matches.slice(1).map(function(m) { return parseInt(m, 16); }).concat(a) + ')';
PointedEars
2
Si vienes de un mundo de React:<div style={ { backgroundColor: `rgba(${ parseInt(color.substring(1,3),16) }, ${ parseInt(color.substring(3,5),16) }, ${ parseInt(color.substring(5,7),16) }, 0.5)` } }></div>
Atul Yadav el
14

Ver aquí http://www.w3.org/TR/css3-color/#rgba-color

No es posible, probablemente porque 0xFFFFFFFF es mayor que el valor máximo para enteros de 32 bits

Grifo
fuente
28
#ffffff(seis dígitos hexadecimales) es en realidad un valor de color de 24 bits ; 0xFFFFFFFF es en realidad 2³² − 1, y se puede representar como un entero de 32 bits sin signo. Creo que la razón por la que #ffffffffno se especifican (ocho dígitos hexadecimales) es que los colores CSS están enraizados en el espacio de color sRGB y que una notación de ocho dígitos hexadecimales sería ambigua con un dispositivo de visualización que admite una profundidad de color de 32 bits. Recuerde que todavía hay, de #fffmodo que significa rgb(100%, 100%, 100%)- blanco - ambos con una profundidad de color de 8 bits (256 colores) y 16 bits (65536 o 64K colores).
PointedEars
55
En realidad, eso es exactamente lo que un entero de 32 bits es capaz de contener. 2 dígitos hexadecimales pueden contener tantos valores como 8 dígitos binarios. O ... 8 dígitos hexadecimales pueden contener tantos valores como 32 dígitos binarios.
Pijusn
Aunque no hay una razón importante por la cual la función CSS no debería haber sido diseñada de esta manera desde el principio (así como los flotadores rgba (0.0, 0.5, 1.0) para que las normales coincidan con las otras funciones de color). En cuanto al soporte de color de pantalla de 32 bits, esto no existe con RGB de 6 dígitos para empezar y es realmente un caso extremo. No tengo problemas con el aprendizaje de diferentes formatos, pero hay casos en los que puede obtener un color dinámico en hexadecimal y necesita crear CSS a partir del tiempo de ejecución. Esto requiere el paso adicional de convertir de hexadecimal a decimal si desea agregarle alfa, que es torpe.
Beejor
13

Chrome 52+ es compatible con alpha hex:

background: #56ff0077;
Oded Breiner
fuente
44
Yo estaba emocionado de ver esto, y luego probado en devtools en Chrome 55. No hay dados, él los errores como un valor de propiedad no válido ...¯\_(ツ)_/¯
ericsoco
1
Parece que ha tenido varios problemas, aquí está la página de estado de la función.
Billy
Chrome ha eliminado el soporte, Safari y Firefox tienen soporte. No uses esto.
Caso del
55
A partir de julio de 2019, hay un 84.5% de todos los navegadores que admiten esta función a nivel mundial. caniuse.com/#search=rrggbbaa
André Kuhlmann
10

Uso red, green, bluepara convertir a RGBA:

background-color: rgba(red($color), green($color), blue($color), 0.2);
Jeremy Lynch
fuente
44
SASS admite color de fondo: rgba ($ color, .2);
djibe
esos no son métodos CSS válidos, debe mencionar eso
Piotr Karbownik
7

Me temo que eso no es posible. el rgbaformato que conoces es el único.

El fantasma de Madara
fuente
1
@mdmullinax: ¿Pero quién especifica los colores hexadecimales en notación HSL?
BoltClock
1
Asociado todo en la vida con la notación HSLA, es una versión de sinestesia :)
MikeM
@mdmullinax: ¡Oh, eso es realmente increíble!
BoltClock
66
@mdmullinax: Esto puede deleitarte si aún no lo has visto: mothereffinghsl.com
BoltClock
@BoltClock Me gusta ese sitio, Paul Irish es ganador
MikeM
5

Si puede usar MENOS, hay una función de desvanecimiento.

@my-opaque-color: #a438ab;
@my-semitransparent-color: fade(@my-opaque-color, 50%);

background-color:linear-gradient(to right,@my-opaque-color, @my-semitransparent-color); 

// result: 
background-color: linear-gradient(to right, #a438ab, rgba(164, 56, 171, 0.5));
Julian Mann
fuente
y sass / scss tiene una función equivalente:rgba(base-color, 0.5)
LocustHorde
2

Principe azul:

Solo Internet Explorer permite el color hexadecimal de 4 bytes en el formato de ARGB, donde A es el canal alfa. Se puede usar en filtros de gradiente, por ejemplo:

filter  : ~"progid:DXImageTransform.Microsoft.Gradient(GradientType=@{dir},startColorstr=@{color1},endColorstr=@{color2})";

Donde dir puede ser: 1 (horizontal) o 0 (vertical) Y las cadenas de color pueden ser colores hexadecimales (# FFAAD3) o colores hexadecimales argb (# 88FFAAD3).

Lajos Meszaros
fuente
0

Bueno, diferentes anotaciones de color es lo que tendrás que aprender.
Kuler te da una mejor oportunidad de encontrar color y en múltiples anotaciones.
Hex no es diferente de RGB, FF = 255 y 00 = 0, pero eso es lo que sabes. Entonces, en cierto modo, tienes que visualizarlo.
Yo uso Hex, RGBA y RGB. A menos que se requiera una conversión en masa, hacerlo manualmente lo ayudará a recordar unos 100 colores extraños y sus códigos.
Para la conversión en masa, escriba un guión como el proporcionado por Alarie. Diviértete con los colores.


fuente
-2

por qué no usar background-color: #ff0000; opacity: 0.5; filter: alpha(opacity=50); /* in IE */

Si apuntas un color para un texto o probablemente un elemento, esto debería ser mucho más fácil de hacer.

Principe azul
fuente
9
-1 opacidad afecta todo el contenido, no solo el color de fondo
yunzen
entonces el objeto puede duplicarse, uno debe ser el elemento contenedor, el otro debe ser el que está dentro del contenedor que tiene opacidad. porque de la pregunta el usuario quiere otro método que el rgba convencional.
Encantador Príncipe
1
Él todavía quiere el mismo resultado, y será mejor que use rgba () o cualquier otra notación que modificar HTML.
FelipeAls
esta es la respuesta que estaba buscando, deje los colores hexadecimales solos y cambie la opacidad usando la opacitypropiedad css.
aquí el