为什么HTML认为“;查克诺里斯”;这是一种颜色吗?
为什么某些随机字符串在HTML中作为背景色输入时会产生颜色 例如:为什么HTML认为“;查克诺里斯”;这是一种颜色吗?,html,browser,background-color,Html,Browser,Background Color,为什么某些随机字符串在HTML中作为背景色输入时会产生颜色 例如: test大多数浏览器只会忽略颜色字符串中的任何非十六进制值,用零替换非十六进制数字 ChuCknorris转换为c00c0000000。此时,浏览器会将字符串分成三个相等的部分,分别表示红色、绿色和蓝色值:c00c 0000。每个部分中的额外位将被忽略,这使得最终结果为红色 注意,这不适用于遵循CSS标准的CSS颜色解析。 Redish 同上 黑色这是网景时代的遗留物: 缺少的数字被视为0[…]。不正确的数字仅解释为0。例如,
test
大多数浏览器只会忽略颜色字符串中的任何非十六进制值,用零替换非十六进制数字
ChuCknorris
转换为c00c0000000
。此时,浏览器会将字符串分成三个相等的部分,分别表示红色、绿色和蓝色值:c00c 0000
。每个部分中的额外位将被忽略,这使得最终结果为红色
注意,这不适用于遵循CSS标准的CSS颜色解析。
Redish
同上
黑色这是网景时代的遗留物: 缺少的数字被视为0[…]。不正确的数字仅解释为0。例如,值#f0f0、f0f0、F0F0F、#fxfx和fxfx都是相同的 这是从博客文章,其中涵盖了非常详细的内容,包括不同长度的颜色值,等等 如果我们依次应用博客文章中的规则,我们会得到以下结果:
chucknorris becomes c00c0000000
RGB (c00c, 0000, 0000)
RGB (c0, 00, 00) = #C00000 or RGB(192, 0, 0)
下面的示例演示了bgcolor
属性的作用,以生成此“惊人”色样:
查克·诺里斯
T先生
忍者龟
生病的
废话
草
WHATWG HTML规范具有解析传统颜色值的精确算法:
用于解析颜色字符串的Netscape Classic代码是开源的:
例如,请注意,每个字符都被解析为十六进制数字,然后被移位为32位整数,而不检查溢出情况。一个32位整数只能包含八个十六进制数字,因此只考虑最后8个字符。在将十六进制数字解析为32位整数后,通过将其除以16,将其截断为8位整数,直到它们适合8位整数,这就是忽略前导零的原因
更新:此代码与规范中定义的代码不完全匹配,但唯一的区别是有几行代码。我想是(在Netscape中)添加的:
if(字节/值>4)
{
字节/val=4;
}
我很抱歉不同意,但是根据chucknorris发布的解析传统颜色值的规则,chucknorris
并不等同于#CC0000
,而是#C00000
,一种非常相似但略有不同的红色色调。我用这个来验证这一点
规则规定:
- 通过添加0,使字符串的长度为3的倍数:
chucknorris0
- 将字符串分成3个等长字符串:
chuc knor ris0
- 将每个字符串截断为2个字符:
ch kn ri
- 保留十六进制值,必要时添加0:
C000
我能够使用这些规则正确解释以下字符串:
幸运符
Luck
LuckBeALady
LuckBeALadyTonight
GangnamStyle
更新:表示颜色为#CC0000
的原始回答者已经编辑了他们的答案,以包含更正。浏览器正在尝试将chucknorris
转换为十六进制颜色代码,因为它不是有效值
在chucknorris
中,除c以外的所有内容都不是有效的十六进制值
C00C000000000
回答:
- 浏览器将尝试将chucknorris
c
是chucknorris中唯一有效的十六进制字符,因此该值变为:C00C000000000
(0表示所有无效的值)李>
红色=c00c
,绿色=0000
,蓝色=0000
c00000
,这是砖红色调的颜色原因是浏览器无法理解它,并试图以某种方式将其转换为它能理解的内容,在本例中转换为十六进制值
chucknorris
以c
开头,这是一个十六进制的可识别字符,它还将所有无法识别的字符转换为0
因此,十六进制格式的chucknorris变为:C00C000000000
,所有其他字符变为0
,而c
保持不变
现在它们被RGB(红色、绿色、蓝色)除以3<代码>R:c00c,G:0000,B:0000
但是我们可以
RGB (c0, 00, 00) = #C00000 or RGB(192, 0, 0)
bgcolor="#c00000";