CSS十六进制RGBA?


199

我知道你可以写...

background-color: #ff0000;

...如果您想要红色的东西。

你可以写...

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

...如果您想要红色和半透明的东西。

有什么简洁的方法可以用十六进制书写部分透明的颜色?我想要类似的东西:

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

... 要么 ...

background-color: #ff0000 50%;

我将所有颜色都转换为十六进制,并且不得不将它们全部转换为十进制0-255。


1
您可能会尝试使用不同的表示法,但是我没有成功。rgb(0xff,\x80,#44)惊人的八进制表示似乎纽约一点点rgb(0100, 0200,0300)#4080C0
yunzen

您可能需要使用ColorPic,它显示了所选择颜色的小数位数iconico.com/colorpic
yunzen 2011年

2
正如Slomojo所建议的那样,您可以在LESS中进行背景颜色设置:#ff0000 + rgba(0,0,0,.8); 它将为您转换十六进制并仍然应用透明度,但这不能使用本机CSS来完成。
fl3x7

1
为了完整起见,如Slomojo和fl3x7所讨论的,可以在Sass中轻松完成此操作background-color: opacify(#ff0000, 0.5);或者background-color: transparentize(#ff0000, 0.5);您也可以为这些Sass函数提供Sass十六进制颜色变量。
亚当·卡维尼斯

Answers:


112

CSS颜色模块级别4 可能会支持4和8位十六进制RGBA表示法!

三周前(2014年12月18日),CSS颜色模块4级编辑器的草案已提交给CSS W3C工作组。尽管这在很大程度上容易受到变化的状态下,文件的当前版本意味着,在一定程度上不久的将来CSS将同时支持4位和8位十六进制RGBA符号。

注意:以下引号中有不相关的部分被删节,在您阅读本文时,源可能已被重大修改(如上所述,这是编辑的草稿,而不是定稿的文件)。
如果情况发生了重大变化,请发表评论告知我,以便我更新此答案!

§4.2。RGB十六进制表示法:#RRGGBB

a的语法<hex-color><hash-token>令牌,其值由3、4、6或8个十六进制数字组成。换句话说,十六进制颜色被写为哈希字符“#”,后跟一些数字0-9或字母a-f(字母的大小无关紧要- #00ff00与相同#00FF00)。

8位数字

前6位数字的解释与6位数字的解释相同。最后一对数字(解释为十六进制数字)指定颜色的Alpha通道,其中00代表完全透明的颜色而ff代表完全不透明的颜色。

示例3
换句话说,#0000ffcc表示与rgba(0, 0, 100%, 80%)(略透明的蓝色)相同的颜色。

4位数

这是8位数字表示法的较短变体,以与3位数字表示法相同的方式“扩展”。第一位解释为十六进制数,指定颜色的红色通道,其中0代表最小值,f代表最大值。接下来的三个数字分别代表绿色,蓝色和Alpha通道。

这对CSS颜色的未来意味着什么?

这意味着,假设这是没有完全从4级文档中删除,我们很快就可以定义我们的RGBA颜色(或颜色HSLA,如果你是一个那些家伙)在浏览器中以十六进制格式支持的颜色模块级别4的语法。

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. */
}

什么时候可以在面向客户的产品中使用它?

滚滚杂草是唯一的真实反应。

撇开所有笑话:目前仅是2015年初,因此在相当一段时间内,任何浏览器都将不支持这些功能-即使您的产品仅设计为在最新的浏览器上运行,您也可能会很快将不会在生产浏览器中看到这一点。

查看当前浏览器对#RRGGBBAA颜色表示法的支持

但是,就是说CSS的工作方式意味着我们实际上可以从今天开始使用它们!如果您真的想立即开始使用它们,只要添加一个回退,所有不支持的浏览器都将忽略新属性,直到它们被视为有效:

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>

只要您在支持CSS中的backgroundcolor属性的浏览器上查看此答案,<figure>上述代码段中的元素看起来都将与此非常相似:

代码段结果图像

使用Windows上的最新版本的Chrome(v39.0.2171)检查我们的<figure>元素,我们将看到以下内容:

元素检查器示例

这些rgba()值会覆盖6位数的十六进制回退值,而我们的8位数的十六进制值会被忽略,因为Chrome的CSS解析器目前认为它们无效。只要我们的浏览器支持这些8位数的值,这些值就会覆盖它们rgba()

更新2018-07-04: Firefox,Chrome和Safari现在支持此表示法,但Edge仍不见了,但可能会跟随(https://caniuse.com/#feat=css-rrggbbaa)。


1
我记得最迟在大约一年前在邮件列表中看到了这一点(使用4- / 8位十六进制的想法并不新鲜)。很高兴看到它现在已经进入Colors 4。
BoltClock

希望@BoltClock也能留在这里!
James Donnelly 2015年

Firefox Nightly刚刚实施了该步骤:)
Florrie

/* Fall... foward? */»我建议向前跳。后退和跳转:^ p
WoodrowShigeru '18

只需添加一个有用的链接。链接以十六进制形式包含不透明度值列表。gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
Ashish Kumar,

33

发布问题的增强功能后,我找到了答案。抱歉!

MS Excel帮助!

只需将十六进制前缀添加到十六进制颜色值即可添加透明度与%值等效的Alpha。

(如上所述,在rbga中,不透明度百分比以小数表示)

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

不要依赖理解。你的意思#FF00000C等于rgba(255,0,0,0.05)吗?
yunzen 2011年

它是前缀而不是后缀。表示您将其添加到6位数十六进制颜色值的前面将#000000变为#7F000000
T9b

7
@ T9b:CSS3不支持此表示法。故事结局。
PointedEars 2011年

@PointedEars在两个方面都错了。OP没有特别提到CSS3,我认为这个问题可能与IE特定问题有关,我们都知道这是困难的。IE仍会在CSS中同时使用CSS和十六进制透明度值。
T9b 2011年

4
@ T9b废话。OP有一个关于RGBA值的CSS问题。CSS3之前的CSS不支持RGBA。如果IE / MSHTML支持您的表示法,则该表示法是专有的,不兼容的,并且本质上是不可靠的。当然,您不建议使用客户端脚本来使该表示法起作用,是吗?因为那将是不兼容的,并且也不可靠。
PointedEars 2011年

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 2011年

2
如果您来自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'17

14

看到这里http://www.w3.org/TR/css3-color/#rgba-color

这是不可能的,很可能是因为0xFFFFFFFF大于32位整数的最大值


28
#ffffff(六个十六进制数字)实际上是一个24位颜色值;0xFFFFFFFF实际上是2³²−1,可以表示为无符号 32位整数。我认为#ffffffff未指定(八位十六进制数字)的原因是CSS颜色植根于sRGB色彩空间,而八进制十六进制数字表示法与支持32位色深的显示设备不明确。请记住,仍然存在#fff,这意味着rgb(100%, 100%, 100%)-白色-两种颜色深度均为8位(256种颜色)和16位(65536或64K颜色)。
PointedEars 2011年

5
实际上,这正是32位整数所能容纳的。2个十六进制数字最多可容纳8个二进制数字。或者... 8个十六进制数字最多可容纳32个二进制数字。
Pijusn

尽管没有主要理由应该从一开始就不应该这样设计CSS函数(以及rgba(0.0,0.5,1.0)浮动以使法线与其他颜色函数匹配)。至于32位显示颜色支持,这从6位数RGB开始就不存在,实际上是边缘情况。我学习不同的格式没有问题,但是在某些情况下,您可能会得到十六进制的动态颜色,并且需要在运行时从中创建CSS。如果要向其中添加alpha,这需要多余的步骤,即从十六进制转换为十进制,这很麻烦。
2015年

13

Chrome 52+ 支持 alpha十六进制:

background: #56ff0077;

4
我很高兴看到这一点,然后在Chrome 55的devtools中对其进行了尝试。没有骰子,它会因为无效的属性值而出错...¯\_(ツ)_/¯
ericsoco

1
看起来有很多问题,这里是功能的状态页面。
比利(Billy)

Chrome已删除支持,Safari和Firefox已支持。不要使用这个。
案例

5
截至2019年7月,全球有84.5%的浏览器支持此功能。caniuse.com/#search=rrggbbaa
安德烈·库尔曼


7

恐怕不可能。rgba您知道的格式是唯一的格式。


1
@mdmullinax:但是谁用HSL表示法指定十六进制颜色?
BoltClock

1
我将生活中的所有事物与HSLA表示法联系在一起,这是联觉的一种形式:)
MikeM 2011年

@mdmullinax:噢,那真是太棒了!
BoltClock

6
@mdmullinax:如果您还没看过,这可能会让您感到高兴:mothereffinghsl.com
BoltClock

@BoltClock我喜欢那个网站,Paul Irish赢了
MikeM 2011年

5

如果可以使用LESS,则有渐变功能。

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

sass / scss具有等效功能:rgba(base-color, 0.5)
LocustHorde

2

白马王子:

只有Internet Explorer允许采用ARGB格式的4字节十六进制颜色,其中A是Alpha通道。例如,它可用于渐变过滤器:

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

dir可以是:1(水平)或0(垂直),并且颜色字符串可以是十六进制颜色(#FFAAD3)或argb十六进制颜色(#88FFAAD3)。


0

好吧,您将需要学习不同的颜色符号。
Kuler为您提供了更好的机会来找到颜色并使用多种符号。
十六进制与RGB相同,FF = 255和00 = 0,但这就是您所知道的。因此,在某种程度上,您必须对其进行可视化。
我使用十六进制,RGBA和RGB。除非需要进行质量转换,否则手动执行此操作将帮助您记住一些奇怪的100种颜色及其代码。
对于大规模转换,请编写一些脚本,例如Alarie给出的脚本。充满色彩。


-2

为什么不使用 background-color: #ff0000; opacity: 0.5; filter: alpha(opacity=50); /* in IE */

如果您将颜色指定为文本或元素的颜色,则应该容易得多。


9
-1不透明度会影响所有内容,而不仅是背景色
yunzen 2011年

那么该对象可以加倍,一个应该是包含元素,另一个应该是容器内部具有不透明度的对象。因为出于这个问题,用户希望使用一种不同于常规rgba的方法。
迷人的王子

1
他仍然希望获得相同的结果,与修改HTML相比,我最好使用rgba()或任何其他符号。
FelipeAls 2011年

这就是我想要的答案,不使用十六进制颜色,而是使用opacitycss属性更改不透明度。
这里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.