作为主要使用英式英语的人,CSS 不接受colour作为有效属性的事实是相当令人厌烦的,尤其是当它接受grey(及其偏差)作为有效值时。为什么 CSS 允许在值中使用英式英语,而不是在属性中使用?
根据W3 CSS颜色规范,CSS值的官方color拼写是gray:
然而,它也可以很好地接受grey(及其偏差):
.gray {
color: gray;
}
.grey {
color: grey;
}Run Code Online (Sandbox Code Playgroud)
<span class="gray">gray</span>
<span class="grey">grey</span>Run Code Online (Sandbox Code Playgroud)
这也是有道理的,因为X11 颜色名称(CSS Colors Level 3改编自)将grey拼写列为有效的替代项。
但为什么 CSS Colors Level 3 不允许colour作为属性呢?
.color {
color: red;
}
.colour {
colour: red;
}Run Code Online (Sandbox Code Playgroud)
<span class="color">color</span>
<span class="colour">colour</span>Run Code Online (Sandbox Code Playgroud)
规范的创建者允许替代值而不是属性是否有特定的原因?
Kai*_*ido 12
非常有趣的是,这种选择的历史是有详细记录的。
CSS 规范中有这个问题讨论了这一点。其中 Tab Atkins(tabatkins) 链接到Alex Sexton 提供的 JSConf视频,内容涉及 CSS 命名颜色背后的(相当有趣且有趣的)历史。
根据 Sexton 的说法,该grey值最初被添加到 MIT 的 rgb.txt文件中,指定“X11 颜色”,因为
惠普的一些程序员不记得哪一个是正确的。
几年后,Chris Lilley(svgeesus) 将这些值添加到 SVG 颜色中,最后 CSS3(早在 2001 年)将遵循 Ian Hickson(Hixie) 的说法,
[...] 只是为了编纂当前的做法。几乎每个浏览器都支持它们,并且这一点不会改变(因为它会破坏许多网站 [...]
现在,这并没有告诉我们为什么没有属性colour。为此,让我们回到 CSS 问题,其中tabatkins 给出了这是一个重复请求的提示。当时将命名颜色添加到 SVG 的同一个svgeesus也介入了这个线程并解释说
国际英语灰色和美国英语灰色的别名作为属性值问题最少(但如果今天提出这些关键字,可能仍然不会被采用)。作为一个函数符号,它会更有问题;如果两者都被指定,则需要优先级和去重复规则。
color对于将属性别名为colour(并且所有属性都相同)更是如此*-color*。抱歉,这会增加更多问题,而不是解决更多问题。