我读错了 HTML 4.01 标准,还是谷歌?在 HTML 4.01 中,如果我写:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html> <head> <body>plain <em>+em <strong>+strong </em>-em
谷歌浏览器中的渲染是:
普通 + em +强- em
这似乎与 HTML 4.01 标准相矛盾,该标准将基本的 SGML 规则总结为:“结束标记关闭,回到匹配的开始标记,所有未闭合的中间开始标记都省略了结束标记”。¹
也就是说,</em>
结束标签不仅应该关闭<em>
开始标签,还应该关闭未关闭的中间<strong>
开始标签,并且呈现应该是:
普通 + em +强-em
一位评论者指出,打开标签是不好的做法,但这只是一个学术例子。一个同样好的例子是:<em> +em <strong> +strong </em> -em </strong>
. 我从 HTML 4.01 标准中了解到,由于元素重叠,此代码片段无法按预期工作:</em>
结束标记应隐式关闭<strong>
. 它确实按预期工作的事实令人惊讶,这就是我提出问题的原因。
事实证明,我在问题中提出了错误的二分法:Google 和我都没有读错 HTML 4.01 标准。w3.org的一位私人通讯员向我介绍了 Martin Bryan解释的 Web SGML 和 HTML 4.0 ,其中解释说:“[t] 解析程序将自动关闭任何当前打开的嵌入元素,这些元素已被声明为具有可忽略的结束标签遇到更高级别元素的结束标记。(但是,如果一个不能省略结束标签的嵌入元素仍然是打开的,那么程序会在编码中报错.)”<a href="http://www.is-thought.co.uk/book/sgml-9.htm#Omitting" rel="nofollow">² (已添加重点。)Bryan 对 SGML 标准的总结是对的,而 HTML 4.01 的总结是错误的。