由于任何 RGB 值都只是一个 24 位整数,因此将颜色表示为单个十六进制数是完全有意义的。既然约定的十六进制数字前缀是 0x,为什么我们要为颜色引入 new 前缀 (#)?
据我所知,十六进制表示法源自 X11(X Window System),其历史可以追溯到 1987 年,甚至在 Linux 和 WWW 存在之前。
这是 Xlib 手册中的相关页面:
最终选择它的原因,可能是因为基于 Unix 的系统是当时学术界选择的操作系统,他们熟悉这种表示法,并考虑使用已经支持的东西,而不是重新发明轮子。
当第一个网络浏览器问世时,它只是纯文本。某些浏览器允许您设置背景和文本颜色的选项,但它不是网页的一部分。但有些人想要背景颜色:
“Mosaic 能够更改页面背景颜色 首选项。我问 NCSA 他们的程序是否可以读取“页面” color”标签,然后适当地设置页面颜色。他们告诉我 会改变 HTML 规范,只有这样他们才会支持它。”
Bradford Bohonus(1994 年 9 月 22 日)
当然,HTML 背后的整个想法是分离结构和表示,因此这种情况不会发生。在 HTML 2.0 发布之前(1995 年),stylesheets 的想法很快就出现了。
有许多关于样式表的提案,其中一项早期提案实际上确实使用了
0x
十六进制表示法:
Rob Raisch ([email protected])
Thu, 10 Jun 1993 15:23:20 -0400
...
(fo) foreground= COLOR DEFAULT:''
Describes the recommended foreground color representation
for a character. Colors are specified as 'inherit', text
names, (eg. black, white, magenta), or as RGB color
values in hexidecimal, (eg. 0x000000, 0xffffff, 0xff00ff)
(ba) background= COLOR DEFAULT:''
Describes the recommended background color representation
for a character. Colors are specified as 'inherit', text
names, (eg. black, white, magenta), or as RGB color
values in hexidecimal, (eg. 0x000000, 0xffffff, 0xff00ff)
...
另一项名为“HTML 样式表”的提案(Joe English,1994)提出了以下建议:
样式表使用的所有颜色都必须在(可选)COLORS元素中声明。该元素包含一个或多个 COLOR 元素,每个元素指定一种颜色。
COLOR元素有两个必需的属性:ID(唯一标识符)和RGB(定义 颜色。颜色由 ID 引用。
颜色由红色、绿色和蓝色成分定义,使用 X11 十六进制表示法:磅 符号后跟 3、6、9 或 12 个十六进制数字。这些数字被解释为三组 1、2、 3 或 4 个半字节,第一个指定红色分量,第二个指定绿色,第三个指定蓝色。十六进制 数字 A 到 F 可以是大写或小写。
<colors> <color id=red rgb="#F00"> <color id=green rgb="#00FF00"> <color id=blue rgb="#000000000FFFFF"> <color id=grey rgb="#c0c0c0"> <color id=white rgb="#FFFFFF"> </colors>
虽然没有直接归因于 Joe English,但最终 #RGB 和 #RRGGBB 十六进制符号出现在 CSS1 草案和最终推荐中,您可以在这里看到:https://www.w3.org/Style/CSS /history.html.
就我个人而言,我认为这可能与使用词法分析以特定规则(#RGB 与 #RRGGBB)解析文本有关,而不是像 C/C++ 源代码那样表示原始数据。在CSS规范草案中,它定义了解析“hexcolor”所需的规则:
h [0-9a-fA-F]
hexcolor #{h}{h}{h}|#{h}{h}{h}{h}{h}{h}|#{h}{h}{h}{h}{h}{h}{h}{h}{h}
所以基本上他们想要一个表示颜色代码的文本定义,而现有的 X11 规范符合要求。由于像
0xCAFE
、$CAFE
或 CAFEh
这样的十六进制符号用于表示不伦不类的原始数据,因此对那些已经存在的符号施加更严格的规则可能会导致混乱。