为什么十六进制颜色以#而不是0x为前缀?

问题描述 投票:0回答:1

由于任何 RGB 值都只是一个 24 位整数,因此将颜色表示为单个十六进制数是完全有意义的。既然约定的十六进制数字前缀是 0x,为什么我们要为颜色引入 new 前缀 (#)?

hex
1个回答
3
投票

据我所知,十六进制表示法源自 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
这样的十六进制符号用于表示不伦不类的原始数据,因此对那些已经存在的符号施加更严格的规则可能会导致混乱。

© www.soinside.com 2019 - 2024. All rights reserved.