在 HTML5 中,figcaption 是否允许成为 <a> 标签的子标签?

Van*_*als 5 html anchor w3c-validation

我认为在 HTML5 中你可以将块元素作为子元素<a>元素的子元素,正如规范中所理解的:

\n\n

https://www.w3.org/TR/html-markup/a.html#a

\n\n
\n

尽管以前版本的 HTML 将 a 元素限制为仅\n 包含短语内容(本质上,以前\n 版本中称为 \xe2\x80\x9cinline\xe2\x80\x9d 内容),但 a 元素现在\n n 透明;也就是说,a 元素的实例现在允许\n 还包含流内容(实质上,在以前的版本中\n 称为\xe2\x80\x9cblock\xe2\x80\x9d 内容)\xe2\x80 \x94如果 a 元素的该实例的父元素是允许包含流内容的元素。

\n
\n\n

但现在当我使用 HTML 验证器检查我的页面时,我发现了以下错误消息:

\n\n
\n

错误:在此上下文中,元素 \xe2\x80\x9cfigcaption\xe2\x80\x9d 不允许作为元素 \xe2\x80\x9ca\xe2\x80\x9d 的子元素。(抑制该子树中的更多错误。)

\n
\n\n

代码如下:

\n\n

\r\n
\r\n
<figure class="post">\r\n  <a href="#" title="foo">\r\n    <figcaption class="articuloInfo ">\r\n      <h3>FOO</h3>\r\n      <p class="fecha">4/04/2014</p>\r\n      <div class="descripcion">\r\n      </div>\r\n    </figcaption>\r\n    <div class="imagen">\r\n      <img src="foo.jpg" alt="foo">\r\n    </div>\r\n  </a>\r\n</figure>
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

有人可以解释一下错误在哪里以及为什么吗?

\n

uno*_*nor 4

您不应使用https://www.w3.org/TR/html-markup/,因为它\xe2\x80\x99s 已过时(它\xe2\x80\x99s是 2013 年的工作组说明)。HTML5规范为:https://www.w3.org/TR/2014/REC-html5-20141028/

\n\n

对于figcaptionelement,规范列出了“可以使用该元素的上下文”,其中包括:

\n\n
\n

作为元素的第一个或最后一个子元素figure

\n
\n\n

它表示child(不是后代),因此它可以\xe2\x80\x99t 有一个a元素作为父元素。

\n\n

您可以将a元素放置在figure元素周围(这是可能的,因为您引用的部分:a现在可以包含流内容):

\n\n
<a href="#" title="foo">\n  <figure class="post">\n    <!-- \xe2\x80\xa6 -->\n  </figure>\n</a>\n
Run Code Online (Sandbox Code Playgroud)\n

  • 事实上,HTML5.0规范快照也已经过时了。当前的 W3C HTML 版本 HTML5.1(计划于今年秋天成为 Rec.)允许“figcaption”[“figure”中的任何位置](https://github.com/w3c/html/pull/181) 。然而,当前的 WHATWG Living Standard 版本仍然要求 `figcaption` 必须只是 `figure` 的第一个或最后一个子项(不是“后代”),就像 W3C HTML5.0 一样。 (2认同)