我读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
Run Code Online (Sandbox Code Playgroud)
Google Chrome中的呈现是:
普通+ em + 强 - em
这似乎违背了HTML 4.01标准,总结了下面的SGML规则为:"结束标记关闭,返回到匹配的开始标记,省略结束标记所有未关闭的中介开始标记".¹
也就是说,</em>结束标记不仅应该关闭<em>开始标记,还应该关闭未关闭的插入<strong>开始标记,并且渲染应该是:
普通+ em + 强 - em
一位意见提供者指出,将标签打开是不好的做法,但这只是一个学术性的例子.一个同样好的例子是:<em> +em <strong> +strong </em> -em </strong>.根据HTML 4.01标准我的理解是,由于重叠元素,此代码片段无法按预期工作:</em>结束标记应隐式关闭<strong>.它确实按预期工作的事实令人惊讶,这就是我的问题所在.
事实证明我在这个问题中提出了一个错误的二分法:谷歌和我都没有读错HTML 4.01标准.w3.org的一位私人记者向我指出了Web SGML和HTML 4.0由Martin Bryan解释,他解释说"解析程序将自动关闭任何当前打开的嵌入式元素,当前它被声明为具有可省略的结束标记.遇到更高级别元素的结束标记.(如果无法省略其结束标记的嵌入式元素仍然打开,则程序将报告编码中的错误.)" ²(强调添加.)Bryan对SGML标准的总结是正确的,并且HTML 4.01的总结是错误的.