有人可以解释这段代码生成绿色文本的原因:
<font color=”red”>Red, anyone?</font>
http://jsfiddle.net/WGSNX/7/。我假设它与第一个”
符号有关,但为什么HTML会以不同的方式解析"
?
答案 0 :(得分:6)
很简单: =“红色” = 0red0(“不是ascii所以make 0) = 00ed0(r不是十六进制所以使0为0) = 00ed00(pad)
#00ed00是绿色
答案 1 :(得分:4)
我怀疑转换正在发生:
浏览器假设”red”
是三个十六进制值,每个2个字符长:
["”r", "ed", "”"]
”r
和”
都无效,因此它们会投放到00
,因此您最终会获得颜色:
#00ed00
哪个是绿色。
答案 2 :(得分:4)
字符“(U + 201D RIGHT DOUBLE QUOTATION MARK)与字符”(U + 0022 QUOTATION MARK)非常不同。后者被定义为HTML中的属性值分隔符;前者没有特别的意义HTML,它只是另一个数据字符。
因此,指定的属性值为”red”
',包含右双引号,总共五个字符。它当然是无效的颜色值。浏览器应用的错误恢复,以及HTML5中标准化的错误,参见HTML5 CR,条款2.4.6 Colors,是任何不是十六进制数字的字符都被数字0替换,然后如果长度为string不是三的倍数,附加0位数就可以了。首先,浏览器会将”red”
转换为00ed0
,然后附加0
以获取绿色00ed00
。然后将其视为#
前缀。
如果您使用例如Chrome中的开发人员工具(F12)用于检查元素,您会看到font
元素的样式具有color: rgb(0, 237, 0);
,这是#00ed00
的替代符号。在Firefox中,使用Firebug,您会将其视为#00ED00
。
答案 3 :(得分:1)
我不认为”
符号对HTML有意义。尝试使用"
。
答案 4 :(得分:0)
如果颜色值不等于“红色”,“蓝色”等关键字,则浏览器假设该值为三个十六进制值,每个2个字符长为约翰霍恩斯比说。 所有无效字符都为0。 如果颜色值长度小于6,则最后将附加零。