CSS十六进制代码扩展

CSS十六进制代码扩展,css,browser,Css,Browser,在CSS中,我们可以使用完整的6位十六进制代码作为颜色,也可以使用3位快捷键 浏览器如何从3位快捷键计算6位十六进制 F F F / | \ / | \ / | \ FF FF FF 简单的连接似乎有点粗糙(这里有一个非常粗糙的例子) 2位数部分是否根据单个数字的数值计算得出 如何通过计算从二进制值为1101的十六进制D到二进制值为11011101的DD 一种方法是将每个十六进制数字乘以11(十六进制),得到结果。因此D*11

在CSS中,我们可以使用完整的6位十六进制代码作为颜色,也可以使用3位快捷键

浏览器如何从3位快捷键计算6位十六进制

   F   F  F
  /    |  \
 /     |   \
/      |    \
FF     FF    FF
简单的连接似乎有点粗糙(这里有一个非常粗糙的例子)

2位数部分是否根据单个数字的数值计算得出

如何通过计算从二进制值为
1101
的十六进制
D
到二进制值为
11011101
DD

一种方法是将每个十六进制数字乘以11(十六进制),得到结果。因此
D*11
产生
DD

这就给我们留下了一个问题:在浏览器中究竟是如何做到这一点的?这仅仅是一个两位数的例子,还是他们使用了另一个等式


第二,为什么要采用这种三位数系统?是什么激发了这一决定?

速记网页颜色利用了三倍于两倍的颜色。速记颜色代码只能与可加倍的值一起使用。因此

#fff > #ffffff
#909 > #990099

简单的回答是你不能

与6位十六进制代码相比,3位十六进制代码只包含较少的字节。这意味着可能的色调种类较少。只有在颜色完全匹配的情况下,才能进行向下转换。以将颜色转换为3位数值为例:

#000000 -> #000
#336699 -> #369
#123456 -> #123456
#01aa01 -> #01aa01
#a1a1a1 -> #a1a1a1
#0aa11a -> #0aa11a

前两个是成功的,因为每对红、绿和蓝都是相同的值,因此它是6位值的缩写。但是,接下来的几个示例无法转换为3位数的值,因为它们将变成不同的阴影。所有3位十六进制代码都是预定义的网络安全颜色,并且都有匹配的颜色对。

嗯,很简单。每个十六进制字符对应4位

如何从二进制值为1101的十六进制D到带有 通过计算1101 1101的二进制值

伪代码:

color4Bit := 0xD /* D in hex */
color8Bit := hex<<4 | hex /* bit shifting to the left with 4 positions, then apply either binary OR, or add the original 4 bits */
color4Bit:=0xD/*D十六进制*/

color8Bit:=这会因浏览器而异吗?这毕竟是一个实现细节。该规范说每个数字只需两倍,但没有说明实现是否应该通过串联、位翻转或乘法来实现。可能是的。如果没有一种标准的方法,我很想看看实现这一目标的各种方式。这似乎是合理的,关于:设计决策。剩下的只是某种来源,但鉴于这可以追溯到CSS1,我不确定是否可以找到来源。我想你误解了这个问题。问题是6位数的值是如何从3位数的值中派生出来的。我知道。我只是说,在这一点上没有人真正关心它是#808080还是#818181或#828282等等,也可能是#888888或更短#888。我上面描述的伪代码非常清楚地说明了这一点。
color4Bit := 0xD /* D in hex */
color8Bit := hex<<4 | hex /* bit shifting to the left with 4 positions, then apply either binary OR, or add the original 4 bits */