元素& lt; a>不允许作为元素<dl>在此上下文中-验证器错误

Element <a> not allowed as child of element <dl> in this context - Validator Error

本文关键字:元素 错误 上下文 验证 lt 不允许 dl      更新时间:2023-09-26

在HTML 5(实验性)windows-1252编码下运行w3Validator后,我得到了以下错误-

第11行,第20列:元素a not允许作为元素dl的子元素上下文。(抑制进一步的错误)

<a href="#link"><dt>Link</dt><dd>Sub heading of the link</dd></a>

如果<a>不能包含子元素<dl>,那么代码应该如何使用?

注意:上面的代码是由js使用的,所以代码中不应该有大的变化。

更新:整个代码如下-

<div id="something">
    <dl>
        <a href="#link1"><dt>title1</dt><dd>Sub heading1</dd></a>
        <a href="#link2"><dt>title2</dt><dd>Sub heading2</dd></a>
        <a href="#link3"><dt>title3</dt><dd>Sub heading3</dd></a>
        <a href="#link4"><dt>title4</dt><dd>Sub heading4</dd></a>
        <a href="#link5"><dt>title5</dt><dd>Sub heading5</dd></a>
        <a href="#link6"><dt>title6</dt><dd>Sub heading6</dd></a>
    </dl>
</div>

目前张贴的所有答案都是错误的。

锚(或<a>元素)默认是内联的,是的-但你可以通过使用一些基本的CSS来改变它:

a {
  display: block;
}

除此之外,在HTML5中,块级锚是允许的。这意味着你可以做一些很酷的事情,比如:

<a href="#">
 <h1>Foo</h1>
 <p>Bar</p>
</a>

让你的代码验证为HTML5。(这段代码一直在浏览器中工作,只是在HTML5之前无效。)

真正的原因它不验证(因此,你的问题的答案)是非常简单的:<dt><dd>元素可能只出现为直接子<dl>元素。

定义列表有一个非常特殊的结构

<dl>
  <dt>Definition title<dt>
  <dd>Definition description </dd>
  <dt><a href='#'>Definition title</a><dt>
  <dd>Definition description </dd>
  <dt>Definition title<dt>
  <dd><a href='#'>Definition description</a></dd>
</dl>

唯一可以放置LINK的地方是在DT或DD中。如果我没记错的话,DD被认为是块级元素,在任何情况下都不会进入LINK中。

EDIT:正如@Mathias Bynens在评论中指出的那样,只有 DT和DD元素可以作为DL的直接子元素出现。

在HTML5

中也允许在块级元素周围放置内联标签。

基本上这是块和内联元素的问题。惯例是不应该将块元素放在内联元素中,<a>标记是内联的,<dl>(以及应该在其中的<dt><dd>元素)是块。你所做的类似于把<strong><a>元素放在<form><div>周围,这显然是不对的。

对您的问题的"答案"是将<a>标签放在单独的<dt><dd>标签中,并且在定义列表中只包含定义术语和定义定义标签。

ignore :没有意识到您正在尝试验证HTML 5。在这种情况下,答案是你不能把<dt><dd>以外的任何东西作为<dl>的直接子元素。