Html 为什么在Internet EXPLORER中对3位十六进制颜色代码值的解释不同?
Internet Explorer究竟是如何解释它们的?根据哪一条准则或一套标准 例如: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中重新创建它。
#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这样的浏览器在那时还不存在 - 这两个
方法因Internet Explorer 3不支持而受到影响rgb()
资料来源:(读得很好)
根据
bgcolor
仅适用于
、
、
、
和
。(因此,就遗留规范而言,例如,不能在
上使用它。)
它们都是CDATA
-类型:%颜色代码>
其内容如下:
这里的神奇短语是:“使用:#RRGGBB作为十六进制值的颜色”
如果我戴着规范实施者的帽子阅读本文,我必须同意,我没有看到指定的速记3位数#RGB
符号,我也不会实现它(我也不会实现RGB(DDD,DDD,DDD)
)
对于所有先前(HTML4)指定的元素(见上文)。
这意味着,就规格而言,有效“颜色代码”的格式不会很快改变
结论:
仅接受HTML属性bgcolor
上的命名颜色(来自指定/支持的列表)或“十六进制三元组”(格式#RRGGBB
)sRGB颜色值不是错误;这是根据规格
跨浏览器解决方案:。。参见规格☺
如果在不支持该值的解析/渲染引擎上错误地为bgcolor
指定了一个简短的颜色值,那么要么什么也不会发生,要么可能会显示意外的颜色;实际上,您已输入..
对于MS IE和MS Outlook来说,最明显的是,颜色看起来几乎是黑色的。例如:#ff0
(shortha