4

在 IE10 中,我创建了以下网页,并得到一个不匹配的标签错误:

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
    <p>
        <div>
            &nbsp;
        </div>
    </p>
</body>
</html>

我发现这段代码没有问题。我已将其范围缩小为在段落中包含一个 div 作为触发问题的原因。IE10 报告:

HTML1509:不匹配的结束标记。
test.php,第 12 行字符 2

并指向段落关闭标记。早期的我可能只是忽略了它。但我不能再让自己这样做了。

我在这个网站上搜索过类似的东西,但只发现了合法的语法错误;换句话说,对错误的有效解释。我知道 IE 已经脑残了,但即使是在 Bill MSFT 之后,也不能傻到让这样的错误通过(他们可以吗?)。所以我假设是我,直到证明不是这样。可能是 HTML5 的一些微妙之处,我还没有摸索...

4

1 回答 1

16

除非您将标记作为 application/xhtml+xml 提供,否则您不能在 P 中包含 DIV(或任何其他块元素)。所有作为 text/html 的页面都由 HTML 解析器解析(在现代浏览器中,包括 IE10,它是 HTML5 解析器,无论文档类型如何)。在 HTML 中,P 元素的内容模型是 'phrasing content' ( HTML5 ) 或 'inline' ( HTML4 ),它的结束标记在所有版本的 HTML 中都是可选的。所以解析器隐式地关闭任何块元素的开始标记之前的 P 元素。在所有浏览器中,DIV 元素将不是 P 的子元素,而是兄弟元素,并且像 p > div 之类的 CSS 选择器永远不会适用于作为 text/html 的页面。

于 2013-06-29T21:25:46.490 回答