如果父元素是<a> element?</a>,为什么不能省略结束<p> </p>

时间:2013-02-13 16:31:26

标签: html5

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>

根据规范,理论上允许在phttp://www.w3.org/TR/html51/text-level-semantics.html#the-a-element内使用a标记,那么为什么会出现异常?

3 个答案:

答案 0 :(得分:3)

我想那是因为<a>元素是一个内联元素。

虽然列表中的所有其他内容(地址,文章,旁边,blockquote,dir,div等)都是块级别,因此它们可以关闭其他元素的范围,但事实并非如此内联元素。

由于<a>元素是唯一允许将块级元素放入其中的元素(根据您提供的链接) - 这就是为什么他们在规范中特别提到这个元素。

答案 1 :(得分:2)

因为当<p>标记结束时始终结束<a>标记没有意义。在<div>的情况下,如果您要关闭<div>,您几乎肯定也想关闭<p>,但<a>的情况则不同。该超链接可以继续下一段

答案 2 :(得分:1)

由于w3如何定义段落,可能不允许这样做:

在谈论列表如何不在段落spec says

中时
  

一个段落,用HTML术语来说,不是一个逻辑概念,而是一个结构   一个即可。在上面的奇妙例子中,实际上有五个   本规范定义的段落:列表前一个,一个   对于每个子弹,以及一个在列表之后。

在我看来,W3的段落是文本段落,而不是巨型超链接,并且他们花了一些时间来确保这一点。