在 HTML 中作为背景颜色输入时, 为什么某些随机字符串会产生颜色 ?

例如,bgcolor="chucknorris"a 生产量a红色背景红背景:

<body bgcolor="chucknorris"> test </body>

相反,bgcolor="chucknorr"a 生产量a黄色背景:

<body bgcolor="chucknorr"> test </body>

各种浏览器和平台都存在这种情况。


当前回答

原因是浏览器可以不理解并试图将它转化为能理解的东西,

chucknorris开始于c在十六进进制中被识别的字符, 也正在将所有未识别的字符转换成0!

chucknorris六进制格式改为:c00c00000000,所有其他字符成为0c仍然在他们所在的地方...

现在他们被除以3RGB(红色、绿色、蓝色)...R: c00c, G: 0000, B:0000...

但是我们知道对RGB来说 有效的十六进制是两个字符 意思是R: c0, G: 00, B:00

因此,真正的结果是:

bgcolor="#c00000";

我还添加了图像中的步骤,作为你们快速参考:

Why does HTML think “chucknorris” is a colour?

其他回答

缩略WHEWG HTML 规格有精确的算法用于解析遗留颜色值。

用于分析颜色字符串的 Netscape 经典代码是开源 :网外/流出/外派/外派/外派。 c.

例如,注意每个字符都以十六进制数字进行剖析,然后转换为32位整数未检查溢出溢出量。只有8个十六位数数字适合32位整数,这就是为什么只考虑最后8个字符的原因。在将六位数数字切换为32位整数之后,它们会通过将其除以16而将其切换为8位整数,直到将其切换为8位整数,这就是为什么忽略前位零的原因。

此代码不完全匹配规格中所定义的代码, 但唯一的区别是几行代码。 我想是的这些线条添加(在网景4中):

if (bytes_per_val > 4)
{
    bytes_per_val = 4;
}
  • 浏览器将尝试转换巧克力诺瑞斯chucknorris十六进制值。
  • c中唯一有效的十六ex 字符巧克力诺瑞斯chucknorris,值转换为:c00c00000000(无效的所有值为 0).
  • 浏览器然后将结果分为三类:Red = c00c, Green = 0000, Blue = 0000.
  • 由于 HTML 背景的有效十六进制值仅包含每个颜色类型的两位数字( ) 。r, g, b)))后的两位数从每组中截短,留下的RGB值为c00000是一个砖灰色的灰色灰色色。

很抱歉我不同意 但根据传统颜色的分解规则由Yuhong Bao张贴, chucknorris 等于等于#CC0000,而是#C00000,一个非常相似但稍稍不同的红色色调。火狐 颜色Zilla 添加来核实这一点。

规则规定:

  • 将字符串设置为乘以 3 的乘以 0 的长度:chucknorris0
  • 将字符串分隔为三等长字符串:chuc knor ris0
  • 将每个字符串短短到两个字符 :ch kn ri
  • 保留十六进制值,必要时加上 0:C0 00 00

我利用这些规则正确解释了以下条件:

  • LuckyCharms
  • Luck
  • LuckBeALady
  • LuckBeALadyTonight
  • GangnamStyle

最初的回答者说颜色是#CC0000其后编辑了答复,以列入更正。

浏览器正在试图转换chucknorris十六进制颜色代码,因为它不是一个有效的值。

  1. chucknorris,除c不是一个有效的十六进制值。
  2. 因此,它被转换为c00c00000000.
  3. 这分为3组,R G B(结尾处为0,如果不是3的倍数的话)
  4. 每个组中只选取两个字符,因为这是允许的。
  5. 终于变成# 千千万万 #红色的阴影

这似乎主要是与Internet 探索器歌剧院(12) 因为铬(31)和Firefox(26)都忽略了这一点。

P.S. 括号中的数字是我测试过的浏览器版本。

同样,拉伊尼坎特(印度恰克·诺里斯) 和黑色的阴影相反:

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

在较轻的音符上

Chuck Norris不符合网络标准。 网络标准符合他的要求。 #BADA55

原因是浏览器可以不理解并试图将它转化为能理解的东西,

chucknorris开始于c在十六进进制中被识别的字符, 也正在将所有未识别的字符转换成0!

chucknorris六进制格式改为:c00c00000000,所有其他字符成为0c仍然在他们所在的地方...

现在他们被除以3RGB(红色、绿色、蓝色)...R: c00c, G: 0000, B:0000...

但是我们知道对RGB来说 有效的十六进制是两个字符 意思是R: c0, G: 00, B:00

因此,真正的结果是:

bgcolor="#c00000";

我还添加了图像中的步骤,作为你们快速参考:

Why does HTML think “chucknorris” is a colour?