一尘不染

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

html

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

例如:

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

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

另一方面,chucknorr产生黄色背景

这里发生了什么?


阅读 189

收藏
2021-12-30

共1个答案

一尘不染

缺少的数字被视为 0[…]。错误的数字被简单地解释为 0。例如,#F0F0F0、F0F0F0、F0F0F、#FxFxFx 和 FxFxFx 的值都是相同的。

如果我们依次应用博客文章中的规则,我们会得到以下结果:

  1. 用 0 替换所有无效的十六进制字符:

html chucknorris becomes c00c0000000

  1. 填充到下一个可被 3 整除的字符总数 (11 → 12):

html c00c 0000 0000

  1. 分成三个相等的组,每个分量代表 RGB 颜色的相应颜色分量:

html RGB (c00c, 0000, 0000)

  1. 将每个参数从右边截断为两个字符。

最后,得出以下结果:

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",好吧,它是棕色的。

2021-12-30