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.


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 ).


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

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+')';

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


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;

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);

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.


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));

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).



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.


-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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.