为什么HTML认为“chucknorris”是一种颜色?

在HTML中作为背景颜色输入时,某些随机字符串如何产生颜色?例如:

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

… 在所有浏览器和平台上生成具有红色背景的文档。

有趣的是,虽然也chucknorri产生红色背景,但会chucknorr产生黄色背景。

这是怎么回事这里

答案


这是Netscape时代的延续:

丢失的数字被视为0 […]。不正确的数字被简单地解释为0.例如,值#F0F0F0,F0F0F0,F0F0F,#FxFxFx和FxFxFx都是相同的。

它来自博客文章关于Microsoft Internet Explorer的颜色解析的一点咆哮,它详细地涵盖了它,包括不同长度的颜色值等。

如果我们从博客文章轮流应用规则,我们会得到以下结果:

  1. 用0替换所有非有效的十六进制字符
    chucknorris becomes c00c0000000
  2. 填充到可以被3整除的下一个总字符数(11 – > 12)
    c00c 0000 0000
  3. 分成三个相同的组,每个组件代表RGB颜色的相应颜色分量:
    RGB (c00c, 0000, 0000)
  4. 将每个参数从右向下截断为两个字符

这给出了以下结果:

RGB (c0, 00, 00) = #C00000 or RGB(192, 0, 0)

下面是一个演示bgcolor属性的例子,用于生成这个“令人惊叹的”颜色样本:

<table>
  <tr>
    <td bgcolor="chucknorris" cellpadding="8" width="100" align="center">chuck norris</td>
    <td bgcolor="mrt"         cellpadding="8" width="100" align="center" style="color:#ffffff">Mr T</td>
    <td bgcolor="ninjaturtle" cellpadding="8" width="100" align="center" style="color:#ffffff">ninjaturtle</td>
  </tr>
  <tr>
    <td bgcolor="sick"  cellpadding="8" width="100" align="center">sick</td>
    <td bgcolor="crap"  cellpadding="8" width="100" align="center">crap</td>
    <td bgcolor="grass" cellpadding="8" width="100" align="center">grass</td>
  </tr>
</table>

这也回答了问题的另一部分; 为什么bgcolor="chucknorr"产生黄色?那么,如果我们应用规则,字符串是:

c00c00000 => c00 c00 000 => c0 c0 00 [RGB(192, 192, 0)]

这给出了淡黄色的金色。由于字符串以9个字符开头,因此我们保留第二个C,因此它以最终颜色值结束。

当有人指出你可以这样做时,我最初遇到了这个问题color="crap",而且它出现了棕色。

添加评论

友情链接:蝴蝶教程