「green」为啥不是 #00FF00?

今日,@Zch 提起了一件很有趣的事:在 CSS 里颜色的代号之中,red 对应的 RGB 值是 #FF0000,blue 对应的是 #0000FF,而 green 对应的却是 #008000

也就是,CSS 里面的 green,是只由 RGB 里 50% 的的 G(green)组成的。

如果从 CSS 支持的一百多种颜色代号中列出相关的来,这种差异会更加滑稽:

#FF0000
red
#00FF00
lime
#0000FF
blue
#800000
maroon
#008000
green
#000080
navy

嗯……所以 50% 的绿是 green,而 100% 的绿是 lime——黄绿色?!逗我呢。我盯了半天 #00FF00,却没看出一点黄来,倒是怀疑起自己是不是色弱。

本着一切荒谬都事出有因的原则,我们进行了一些小小的调查。

首先是要弄明白,CSS 里面一百多种颜色的代号是谁取的。在维基百科的网页颜色一文中,可以看到在 1999 年通过的 HTML 4.01 规范中,只定义了 16 种颜色;而当时,green 与 lime 的差异就已经赫然在目了。2001 年制定的 SVG 标准里也包含了这两个值,自此被浏览器广泛接受。

那么 HTML 4.01 是否就是这个设计源头呢?其实继续往上追溯,在 1997 年的 HTML 3.2 规范中,就已经规定了 green 和 lime 等十六种颜色了。而且规范里明确地说到,这十六种颜色是取自 Windows VGA 调色板(Windows VGA Palette)的。根据维基百科上相关页面的信息,的确在十六色时代,Windows 就将 #00FF00 称作 lime,而将 #008000 称为 green。

不过 Windows 干嘛要这么做呢?总所周知,作为一个专利产品,Windows 有相当多的历史谜团,或许这也是其中一个。没人知道某个微软工程师的脑瓜子里怎么想的,起了个这样的名字;或许 Windows 也是借鉴的另一个天才的点子?

天无绝人之路,某个维基下面的一条参考链接,至少提供了一点点思路。这是一个邮件列表的网页版存档,生产于 2002 年,带有熟悉的陈旧气息,内容正是有人询问 SVG 标准的 green(#008000)和 X11 标准的 green(#00FF00)不一致的问题。

SVG 1.0 和 XFree86 自带的 /usr/lib/X11/rgb.txt 中,颜色表达的值存在几处冲突。我不知道哪一种才是「正确」的。

……

在我看来,其中最严重的冲突是「green」的含义,因为绿色是 RGB 中的一种原色。


早在 HTML 3.2 的年代,「green」就被定义为绿原色的一半强度,之后继承到了 HTML 4、CSS1、CSS2,最后到了 XSL 与 SVG。完整强度的绿原色被称作「lime」。就像 maroon 被定义为一半强度的红原色。

早在标准化之前,这些数值就已经被浏览器广泛采用了。你可以在 Netscape 1、MSIE 1 和 Opera 1 中发现这些定义。

这些值代表的是颜色,而非数值。我的意思是它们与特定显示器的色彩空间、传递函数以及观察条件息息相关。它们是可以用颜色的国际标准进行进行测量的,而这些标准可追溯至 1931 年。

……

说实话,我没咋看懂,除了把这个谜团推向了更遥远的年代。不过我还是看了一下那个 1931 年的颜色国际标准:CIE 1931 色彩空间。

那是一个带有彩色显示器的电脑远未发明的年代,但科学家已经在研究如何用数学方式定义色彩空间。纯色的光,只是单一的波长。但普通人感知色彩的视觉细胞只有三种,三种原色不同程度的叠加可以让人感受到连续的光谱。CIE 1931 便描述了各种波长的光应当如何由三种原色叠加而成。

按维基上 CIE 1931 中某段所描述的,在实验的过程中,科学家发现在相同的亮度(功率)下,人眼认为绿色的光比红色与蓝色更为明亮。

这是否就是 green 只采用绿原色 50% 亮度的原因呢?因为 #00FF00 并不像 #FF0000 像红色那般像绿色?再回到页首的颜色表,似乎也的确觉得,#00FF00 的部分较左右两边亮度更高。

答案究竟为何,依然不得而知,恐怕永远不得而知。就算事实如此,是谁先想到这么个点子、#00FF00 又为什么起名 lime,那也是一个永远的谜。

#FF0000
red
#008000
green
#0000FF
blue

你是否觉得这样的红绿蓝更为自然呢?

发表评论

电子邮件地址不会被公开。 必填项已用*标注