http://www.w3.org/TR/html51/syntax.html#optional-tags
根据HTML5规范:
如果立即 p 元素,则可省略 p 元素的结束标记 接着是地址,文章,旁边,blockquote,dir,div,dl, fieldset,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr, menu,nav,ol,p,pre,section,table ,或 ul ,元素,或者如果有 父元素中没有更多内容,父元素不是 a 元素。
[强调我的]
关于父元素不是a
标记的最后一点是什么?为什么允许这样做:
<div>
<p>text...
</div>
但这不是:
<a>
<p>text...
</a>
根据规范,理论上允许在p
,http://www.w3.org/TR/html51/text-level-semantics.html#the-a-element内使用a
标记,那么为什么会出现异常?
答案 0 :(得分:3)
我想那是因为<a>
元素是一个内联元素。
虽然列表中的所有其他内容(地址,文章,旁边,blockquote,dir,div等)都是块级别,因此它们可以关闭其他元素的范围,但事实并非如此内联元素。
由于<a>
元素是唯一允许将块级元素放入其中的元素(根据您提供的链接) - 这就是为什么他们在规范中特别提到这个元素。
答案 1 :(得分:2)
因为当<p>
标记结束时始终结束<a>
标记没有意义。在<div>
的情况下,如果您要关闭<div>
,您几乎肯定也想关闭<p>
,但<a>
的情况则不同。该超链接可以继续下一段
答案 2 :(得分:1)
由于w3如何定义段落,可能不允许这样做:
在谈论列表如何不在段落spec says:
中时一个段落,用HTML术语来说,不是一个逻辑概念,而是一个结构 一个即可。在上面的奇妙例子中,实际上有五个 本规范定义的段落:列表前一个,一个 对于每个子弹,以及一个在列表之后。
在我看来,W3的段落是文本段落,而不是巨型超链接,并且他们花了一些时间来确保这一点。