在 HTML 中作为背景颜色输入时, 为什么某些随机字符串会产生颜色 ?
例如,bgcolor="chucknorris"
a 生产量a红色背景红背景:
<body bgcolor="chucknorris"> test </body>
相反,bgcolor="chucknorr"
a 生产量a黄色背景:
<body bgcolor="chucknorr"> test </body>
各种浏览器和平台都存在这种情况。
在 HTML 中作为背景颜色输入时, 为什么某些随机字符串会产生颜色 ?
例如,bgcolor="chucknorris"
a 生产量a红色背景红背景:
<body bgcolor="chucknorris"> test </body>
相反,bgcolor="chucknorr"
a 生产量a黄色背景:
<body bgcolor="chucknorr"> test </body>
各种浏览器和平台都存在这种情况。
当前回答
chucknorris
开始于c
,浏览器将它读取为十六进制值。
因为A、B、C、D、E和F是十六进制字符.
浏览器转换chucknorris
至十六进制值,C00C00000000
.
然后C00C00000000
十六进制值转换为RGB 英国GB格式( 由 3 组成 ) :
C00C00000000
⇒R:C00C, G:0000, B:0000
浏览器只需两位数来表示颜色 :
R:C00C, G:0000, B:0000
⇒R:C0, G:00, B:00
⇒C00000
最后,表演bgcolor = C00000
在 Web 浏览器中。
以下是一个例子:
<table>
<tr>
<td bgcolor="chucknorris" cellpadding="10" width="150" align="center">chucknorris</td>
<td bgcolor="c00c00000000" cellpadding="10" width="150" align="center">c00c00000000</td>
<td bgcolor="c00000" cellpadding="10" width="150" align="center">c00000</td>
</tr>
</table>
其他回答
大多数浏览器将简单地忽略任何未缴- 颜色字符串中的十六进制值,以零取代非十六进制数字。
ChuCknorris
翻译为c00c0000000
。在此点,浏览器将把字符串分为三个相等的区块,显示红红, 绿绿色和蓝蓝色值 :c00c 0000 0000
。每一部分中的额外位数将被忽略,从而得出最终结果#c00000
这是红色的颜色。
注注,这样可以:否应用到 CSS 颜色解析, 该颜色解析遵循 CSS 标准 。
<p><font color='chucknorris'>Redish</font></p>
<p><font color='#c00000'>Same as above</font></p>
<p><span style="color: chucknorris">Black</span></p>
与Twitter网站的延迟网网景天数 :
缺失的数字被作为 0[...] 处理。 不正确的数字被简单地解释为 0。 例如, 数值 # F0F0F0F0、 F0F0F0F0、 F0F0F、 # FxFxFxx和 FxFxFx都是相同的 。
是博客文章上写到的微软 Internet Explorer 的颜色解析包括不同颜色的长度等等。
如果我们在博客文章中适用规则,
将所有非合法的十六进制字符替换为 0 :
chucknorris becomes c00c0000000
切换为下个字符总数, 3 下个字符总数( 11 & 12) :
c00c 0000 0000
分成三个等式组,每个部分代表 RGB 颜色的相应颜色组成部分:
RGB (c00c, 0000, 0000)
将每个参数从右下移到两个字符。
最后,得出以下结果:
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"
然后,它从棕色出来。
缩略WHEWG HTML 规格有精确的算法用于解析遗留颜色值。
用于分析颜色字符串的 Netscape 经典代码是开源 :网外/流出/外派/外派/外派。 c.
例如,注意每个字符都以十六进制数字进行剖析,然后转换为32位整数未检查溢出溢出量。只有8个十六位数数字适合32位整数,这就是为什么只考虑最后8个字符的原因。在将六位数数字切换为32位整数之后,它们会通过将其除以16而将其切换为8位整数,直到将其切换为8位整数,这就是为什么忽略前位零的原因。
此代码不完全匹配规格中所定义的代码, 但唯一的区别是几行代码。 我想是的这些线条添加(在网景4中):
if (bytes_per_val > 4)
{
bytes_per_val = 4;
}
原因是浏览器可以不理解并试图将它转化为能理解的东西,
chucknorris
开始于c
在十六进进制中被识别的字符, 也正在将所有未识别的字符转换成0
!
苏chucknorris
六进制格式改为:c00c00000000
,所有其他字符成为0
和c
仍然在他们所在的地方...
现在他们被除以3RGB
(红色、绿色、蓝色)...R: c00c, G: 0000, B:0000
...
但是我们知道对RGB来说 有效的十六进制是两个字符 意思是R: c0, G: 00, B:00
因此,真正的结果是:
bgcolor="#c00000";
我还添加了图像中的步骤,作为你们快速参考:
很抱歉我不同意 但根据传统颜色的分解规则由Yuhong Bao张贴, chucknorris
无等于等于#CC0000
,而是#C00000
,一个非常相似但稍稍不同的红色色调。火狐 颜色Zilla 添加来核实这一点。
规则规定:
chucknorris0
chuc knor ris0
ch kn ri
C0 00 00
我利用这些规则正确解释了以下条件:
LuckyCharms
Luck
LuckBeALady
LuckBeALadyTonight
GangnamStyle
最初的回答者说颜色是#CC0000
其后编辑了答复,以列入更正。