elliott.david 2011-11-29 22:54 采纳率: 25%
浏览 224
已采纳

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

How come certain random strings produce colors when entered as background colors in HTML? For example:

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

...produces a document with a red background across all browsers and platforms.

Interestingly, while chucknorri produces a red background as well, chucknorr produces a yellow background.

What's going on here?

</div>

转载于:https://stackoverflow.com/questions/8318911/why-does-html-think-chucknorris-is-a-color

  • 写回答

9条回答 默认 最新

  • ?yb? 2011-11-30 21:53
    关注

    It's a holdover from the Netscape days:

    Missing digits are treated as 0[...]. An incorrect digit is simply interpreted as 0. For example the values #F0F0F0, F0F0F0, F0F0F, #FxFxFx and FxFxFx are all the same.

    It is from the blog post A little rant about Microsoft Internet Explorer's color parsing which covers it in great detail, including varying lengths of color values, etc.

    If we apply the rules in turn from the blog post, we get the following:

    1. Replace all nonvalid hexadecimal characters with 0's

      chucknorris becomes c00c0000000
      
    2. Pad out to the next total number of characters divisible by 3 (11 -> 12)

      c00c 0000 0000
      
    3. Split into three equal groups, with each component representing the corresponding colour component of an RGB colour:

      RGB (c00c, 0000, 0000)
      
    4. Truncate each of the arguments from the right down to two characters

    Which gives the following result:

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

    Here's an example demonstrating the bgcolor attribute in action, to produce this "amazing" colour swatch:

    <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>

    This also answers the other part of the question; why does bgcolor="chucknorr" produce a yellow colour? Well, if we apply the rules, the string is:

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

    Which gives a light yellow gold colour. As the string starts off as 9 characters, we keep the second C this time around hence it ends up in the final colour value.

    I originally encountered this when someone pointed out you could do color="crap" and, well, it comes out brown.

    </div>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真