HTML 5标准基于什么?
它基于浏览器的实际行为。
在2002年至2005年期间,Ian Hickson检查了每个浏览器,并找到了它们在处理某些HTML时创建DOM树的所有解析边缘情况。
例如,这个(无效的)HTML应该有什么样的DOM树:
<!DOCTYPE html><em><p>XY</p></em>
浏览器似乎对这个树结构达成了一致:
即使它是无效的html,浏览器也会将其解析为您想要的内容。您的浏览器最后应该做的事情是拒绝显示完全可以理解的HTML。
那么这个无效的html怎么办:
<!DOCTYPE html><em><p>X</em>Y</p>
IE: Y
同时是p和body的子元素。这违反了DOM规范(注释只能有一个父级),但这是HTML作者想要的。
Opera:创建了一个有效的DOM树,但未强调X
,违反了CSS规范。
Mozilla和Safari:将其转换为有效的DOM树,但未强调Y
(这是作者想要的)。
这意味着不同的浏览器对如何处理HTML有不同的看法(因此需要HTML标准)。
解析器无法说:
好吧,HTML应该是SGML的子集。如果您的HTML格式不正确,则结果是未定义的。
网络需要一个标准来反映浏览器应如何解析HTML。 W3C没有做到这一点。他们讨厌HTML,并希望每个人都将他们美丽的SGML版本的HTML移动到一个xml化的HTML版本:xhtml。
HTML 5标准旨在在实际应用中使用。需要定义如何处理格式不正确的HTML,并定义浏览器应如何处理它。它基于对所有现有实现的调查,并选择共识或应该达成共识的内容。
从HTML5规范中,它们清楚地说明:
虽然本规范中描述的HTML语法与SGML和XML密切相关,但它是一种具有自己解析规则的单独语言。
一些早期版本的HTML(特别是从HTML2到HTML4)基于SGML并使用了SGML解析规则。但是,几乎没有任何Web浏览器曾经为HTML文档实施真正的SGML解析;历史上唯一严格处理HTML作为SGML应用程序的用户代理是验证器。由此产生的混乱-验证器声称文档具有一种表示形式,而广泛部署的Web浏览器互操作地实现了不同的表示形式-浪费了数十年的生产力。因此,HTML的这个版本返回到了非SGML基础上。
换句话说(他们也这样说):