为什么十六进制数字以#而不是0x开头?

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

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

hex
1个回答
1
投票

据我所知,十六进制表示法是从X11(X窗口系统)派生而来的,它可以追溯到1987年,甚至在Linux和WWW出现之前。

这是Xlib手册中的相关页面:

enter image description here


之所以最终选择它的原因,很可能是因为当时基于Unix的系统是学术界选择的OS,并且他们熟悉该表示法,并考虑使用已经支持的东西,而不是重新发明轮子。

[当第一个Web浏览器问世时,它只是纯文本。一些浏览器为您提供了设置背景和文本颜色的选项,但是它不是网页的一部分。但是有些人想要背景色:

“ Mosaic可以更改页面中的背景颜色偏好。我问NCSA,他们的程序是否有可能阅读“颜色”标签,然后适当设置页面颜色。他们告诉我将对HTML规范进行更改,然后他们才会支持。” Bradford Bohonus(1994年9月22日)

当然,HTML背后的整个想法是将结构和表示形式分开,因此这不会发生。 stylesheets的想法很快出现,早于HTML 2.0的发布(在1995年)。

样式表的建议很多,一个早期的建议实际上确实使用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组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$CAFECAFEh之类的十六进制表示法来表示未描述的原始数据,因此可能会导致混淆,将更加严格的规则强加于那些已经存在的表示法上。

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