Html 为什么在Internet EXPLORER中对3位十六进制颜色代码值的解释不同?

Html 为什么在Internet EXPLORER中对3位十六进制颜色代码值的解释不同?,html,internet-explorer,colors,Html,Internet Explorer,Colors,Internet Explorer究竟是如何解释它们的?根据哪一条准则或一套标准 例如: #FFF 例如,在Google Chrome中它看起来像白色,而在Internet Explorer中(我在8和9上测试过)它看起来像黑色 我用来测试的代码如下: vs. (我知道bgcolor已被弃用,它只是为了方便我手头的工作) 我也知道这是一个bug,通过在hexcode中添加几个数字(总共6个)就可以很容易地修复它,但如果有解释的话,我只想看看它发生的背后的科学原理。我也能够在IE11中重新创建它。

Internet Explorer究竟是如何解释它们的?根据哪一条准则或一套标准

例如:

#FFF

例如,在Google Chrome中它看起来像白色,而在Internet Explorer中(我在8和9上测试过)它看起来像黑色

我用来测试的代码如下:

vs.

(我知道
bgcolor
已被弃用,它只是为了方便我手头的工作)


我也知道这是一个bug,通过在hexcode中添加几个数字(总共6个)就可以很容易地修复它,但如果有解释的话,我只想看看它发生的背后的科学原理。

我也能够在IE11中重新创建它。正如您所知,它是一个不推荐使用的属性。我假设您的网页&浏览器试图将代码解释为HTML5,但在处理这一问题时,它们的优雅降级中存在一个缺陷。所以它就断了

正如@Aaron Vanston指出的,使用内联样式或CSS,您仍然可以使用速记十六进制来应用颜色

我甚至不会浪费时间把
bgcolor
作为属性写出来。如果我在我正在做的事情中遇到它,我会删除它,以支持它

style="background-color: #fff"
或者CSS替代方案

body {
    background-color: "#fff";
}
既然你“有兴趣了解它发生的原因背后的科学,如果有解释的话”

TLDR:

“颜色值”不是“通用的”

缩写/速记三位十六进制
#RGB
格式在CSS规范中描述,而不是在HTML中描述。 因此,在某些浏览器中,“style”以外的属性中或
标记中的三位数形式不会被解释为有效颜色。



深度:

我从(因为它引入了一些术语/概念,所以我不必重复)开始,它指定:

颜色是关键字或数字RGB规范

BODY {color: black; background: white }
H1 { color: maroon }
H2 { color: olive }
建议的关键字颜色名称列表为:aqua、black、blue、, 紫红色、灰色、绿色、青柠色、栗色、海军蓝色、橄榄色、紫色、红色、银色、, 蓝绿色、白色和黄色。这16种颜色取自窗户 VGA调色板,且其RGB值未在此中定义 规格

BODY {color: black; background: white }
H1 { color: maroon }
H2 { color: olive }
RGB颜色模型用于数字颜色规范。 这些示例都指定了相同的颜色:

EM { color: #f00 }              /* #rgb */
EM { color: #ff0000 }           /* #rrggbb */
EM { color: rgb(255,0,0) }      /* integer range 0 - 255 */
EM { color: rgb(100%, 0%, 0%) } /* float range 0.0% - 100.0% */
以十六进制表示法表示的RGB值的格式为“
#
” 紧接着是三个或六个十六进制字符。 三位RGB符号(
#RGB
)转换为六位形式 (
#rrggbb
)通过复制数字,而不是添加零。例如
#fb0
扩展为
#ffbb00
。这样可以确保白色(
#ffffff
)可以 使用短符号(
#fff
)指定,并删除任何依赖项 显示的颜色深度

函数表示法中RGB值的格式为“
RGB(
” 后跟以逗号分隔的三个数值列表(或 0-255范围内的三个整数值或三个百分比值 在0.0%到100.0%的范围内,后跟“
”。空白字符 允许在数值周围使用

数值范围之外的值应进行剪裁。三条规则 因此,以下是等效的:

EM { color: rgb(255,0,0) }       /* integer range 0 - 255 */
EM { color: rgb(300,0,0) }       /* clipped to 255 */
EM { color: rgb(110%, 0%, 0%) }  /* clipped to 100% */
RGB颜色在sRGB颜色空间中指定。UAs在不同的环境中可能会有所不同 它们表示这些颜色的逼真度,但使用sRGB 提供了一个明确且客观可测量的定义 颜色应符合国际标准

在CSS方面,关于浏览器支持,我能找到的唯一两件“有趣”的事情是:

  • 所有支持样式表的浏览器(版本3及以上,IE3 Mac除外)都支持这种三字符的十六进制颜色速记形式(来源:,“优化CSS颜色”,由King A.B.)提供)
    请注意该文本的历史时间框架。。IE3。。。在Mac上。。。像FireFox 1或Chrome这样的浏览器在那时还不存在
  • 这两个
    rgb()
    方法因Internet Explorer 3不支持而受到影响
    资料来源:(读得很好)


根据
bgcolor
仅适用于
。(因此,就遗留规范而言,例如,不能在
上使用它。)

它们都是
CDATA
-类型:
%颜色
其内容如下:


这里的神奇短语是:“使用:#RRGGBB作为十六进制值的颜色”

如果我戴着规范实施者的帽子阅读本文,我必须同意,我没有看到指定的速记3位数
#RGB
符号,我也不会实现它(我也不会实现
RGB(DDD,DDD,DDD)

对于所有先前(HTML4)指定的元素(见上文)。
这意味着,就规格而言,有效“颜色代码”的格式不会很快改变



结论:

仅接受HTML属性
bgcolor
上的命名颜色(来自指定/支持的列表)或“十六进制三元组”(格式
#RRGGBB
)sRGB颜色值不是错误;这是根据规格
跨浏览器解决方案:。。参见规格☺

如果在不支持该值的解析/渲染引擎上错误地为
bgcolor
指定了一个简短的颜色值,那么要么什么也不会发生,要么可能会显示意外的颜色;实际上,您已输入..
对于MS IE和MS Outlook来说,最明显的是,颜色看起来几乎是黑色的。例如:
#ff0
(shortha