Internet Explorer究竟是如何解释它们的,以及在哪个指南或标准集下?
例如:
#FFF
在Google Chrome浏览器中显示为白色,而在Internet Explorer中(我在8和9上测试过它)显示为黑色。
我用来测试的代码如下:
<body bgcolor="#ffffff"> vs. <body bgcolor="#fff">
(我知道bgcolor
已被弃用,这对我手边的工作来说非常方便。
我也知道这是一个错误,并且可以通过在十六进制代码中附加几个数字(总共6个)来轻松修复它,但我只是想看看为什么它会发生的背后的科学,如果有解释的话。
答案 0 :(得分:16)
因为你&#34;有兴趣看到它背后的科学原因,如果有解释它&#34; ......
<强> TLDR:强>
&#39;颜色值&#39;不是普遍的&#39;。
缩写/简写三位十六进制#RGB
形式在CSS规范中描述,而不是在HTML中描述。
因此,除了&#34; style&#34;之外的属性中的三位数形式。或者在某些浏览器中,<style>
标记内部不会被解释为有效颜色
https://en.wikipedia.org/wiki/Web_colors
深度:
我从CSS 1 spec, Color units (6.3)开始(因为它介绍了一些我不必重复的术语/概念),它指定:
颜色是关键字或数字RGB规范。
建议的关键字颜色名称列表为:浅绿色,黑色,蓝色, 紫红色,灰色,绿色,石灰,栗色,海军蓝,橄榄色,紫色,红色,银色, 蓝绿色,白色和黄色。这16种颜色取自Windows 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值格式为&#39;
#
&#39; 紧接着是三个或六个十六进制字符。 三位RGB符号(#rgb
)将转换为六位数形式 (#rrggbb
)复制数字,而不是添加零。例如,#fb0
扩展为#ffbb00
。这可以确保白色(#ffffff
)可以 使用短符号(#fff
)指定并删除所有依赖项 关于显示器的颜色深度。功能表示法中RGB值的格式为&#39;
rgb(
&#39; 然后是逗号分隔的三个数值列表(或者 三个整数值,范围为0-255或三个百分比值 在0.0%到100.0%的范围内)然后是)
&#39;。空白字符 允许在数值周围。应修剪数值范围之外的值。三条规则 因此,下面是相同的:
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的背景下,关于浏览器支持,唯一的2&#39;有趣的&#39;我能找到的东西是:
rgb()
方法受到Internet Explorer 3不支持的影响
来源:2(非常好读)
根据1 bgcolor
仅针对<body>
,<table>
,<tr>
,<th>
和<td>
。 (因此就遗留规范而言,例如,不能在<div>
上使用它。)
所有这些都属于CDATA
- 类型:%Color;
这是HTML4 spec, the attribute:
<!ENTITY % Color "CDATA" -- a color using sRGB: #RRGGBB as Hex values -->
<!-- There are also 16 widely known color names with their sRGB values:
Black = #000000 Green = #008000
Silver = #C0C0C0 Lime = #00FF00
Gray = #808080 Olive = #808000
White = #FFFFFF Yellow = #FFFF00
Maroon = #800000 Navy = #000080
Red = #FF0000 Blue = #0000FF
Purple = #800080 Teal = #008080
Fuchsia= #FF00FF Aqua = #00FFFF
-->
这里的神奇短语是:&#34; 使用defined的颜色: #RRGGBB 作为十六进制值&#34;。
如果我戴着规范实施者的帽子读到这个,我必须同意我没有看到指定的简短的3位数#RGB
符号,我不会实现它(我也没有实现RGB(DDD,DDD,DDD)
)。
至于所有以前(HTML4)指定元素的sRGB(见上文) 这意味着,就规范而言,有效“颜色代码”的格式是有效的。不会很快改变..
结论:
仅接受 指定颜色(来自指定/支持的列表)或“十六进制”三元组&#39; (格式#RRGGBB
)HTML属性bgcolor
上的sRGB颜色值不是错误;这是按规格!
跨浏览器解决方案:..请参阅规格☺
如果在解析/渲染引擎上错误地为bgcolor
指定了一个不支持该值的短手颜色值,那么要么没有任何反应,要么显示出非预期的颜色;实际上你输入了HTML5, the bgcolor
attribute is obsoleted ..
最值得注意的是,对于MS IE和MS Outlook,颜色看起来几乎是黑色。例如:#ff0
(速记)将变为#0f0f00
(而不是#ffff00
)。另一个例子:#07c
将成为#00070c
等。
然而其他一些实现将#ff0
变为#000ff0
,将#07c
变为#00007c
!!
如果错误地为RGB(RRR,GGG,BBB)
指定bgcolor
值,则会出现各种颜色,例如RGB(255,255,255)
可能会变成非常暗的绿色 'Chuck Norris'-land 等。
所以这里我们有一个有趣的例子,微软的Internet Explorer(包括IE11在内的所有已知版本)都遵循规范,很多人仍在抱怨..
我找到了无数关于&#34; 3位数色值速记&#39; bug&#39;对于例如MS IE解决的bgcolor
- 属性&#34; (跨越15年),使用MS IE HTML解析/呈现引擎的替代浏览器以及大多数基于本地app / web的电子邮件 - 客户端包括Gmail,(所有版本)Outlook(-Express),Lotus Notes,Android等等。(例如source,1,2, 3,4等。)
为什么投诉/错误支持?
因为其他一些浏览器(如FireFox,Chrome)以其他格式支持颜色值,然后在HTML&#39}属性#RRGGBB
上bgcolor
。
为什么其他人会支持它?
我只有2个猜测:(a)它是&#34; BrowserWar 1&#34;的剩余部分。其中一场战斗是围绕着#34;我的浏览器可以让人感觉到&#39;更大的cr @ p-code然后是竞争对手&#34;,但更有可能的是(b)重用CSS颜色值解析器中的代码... 最终我会这样做好吧
的额外:强>
为什么2015年的任何人仍然关心bgcolor
?
为什么这仍然会产生如此多的bug-rapports和问题?
答案是 HTML电子邮件 ...
理论上(对于毫无戒心的网络开发者),它只是HTML和CSS&#39; ..
在实践中,它是非常难以理解的(5)。想一想:所有跨浏览器的问题都存在于3的强大之中!
它必须在众多平台上运行更多电子邮件客户端(实际上仍在使用的传统&#39;应用程序的负载),它还必须在基于Web的客户端中工作如Gmail,AOL,Yahoo,Hotmail等
他们不仅必须编码可以想象的最低公分母(很多技术在十年前已经被认为是古老的),他们甚至必须尝试适应“#10;与一些基于Web的客户的布局/风格。
他们的典型结构是一个大背景表,然后是一个div,然后是一个主表,如果需要,还有嵌套表...
根据{{3}}(anno 2014),将事情放到更深入的角度来看:
&#34; 事实证明,最可靠的编码背景颜色的方法是使用HTML bgcolor
属性,在表格和td级别上使用6位十六进制代码&#34 ;
显然,这个混乱&#39;不会很快消失,对于网络开发者来说,常见的事情就是编写/设计HTML电子邮件...因此,我认为完全理解(并回答此问题)仍然非常重要2015年和不久的将来。
希望这有帮助!
PS:MS IE&#39; filter: progid:DXImageTransform.Microsoft.gradient
也不接受3位十六进制速记颜色值,但现在提醒人们注意“颜色值不是”的概念环球&#39;,这不是一个惊喜(而不是1,除非它被指定它会接受这样的值。)
答案 1 :(得分:2)
我也能够在IE11中重新创建它。如您所知,它是一个已弃用的属性。我假设你的网页&amp;浏览器正在尝试将代码解释为HTML5,并且它们的优雅降级存在一个错误来处理这个问题。所以它就是休息。
正如@Aaron Vanston指出的那样,使用内联样式或CSS,您仍然可以使用速记十六进制来应用颜色。
我甚至不会浪费时间写出bgcolor
作为属性。如果我在我正在处理的事情中遇到它,我会删除它以支持
style="background-color: #fff"
或CSS替代
body {
background-color: "#fff";
}