2011-04-07 76 views
1

在HTML运行w3Validator 5(实验)窗口-1252编码, 后,我得到了下面的错误 -元<a>不允许在此背景下元素<dl>的孩子 - 校验错误

11行,列20 :元素a不允许 作为此 上下文中元素dl的子元素。 (从这个子树抑制进一步的错误 。)

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

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

注意:上面的代码是由js使用的,所以在代码中不应该有重大更改。

UPDATE:整个代码如下 -

<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> 

回答

9

发布的所有回答都是错误的。

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

a { 
    display: block; 
} 

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

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

并让你的代码验证为HTML5。 (此代码已在浏览器中始终工作,这只是不是HTML5之前有效)

真正原因,它不验证(因此,在回答你的问题)是非常简单的:<dt><dd>元素可能仅显示为元素的直接子女

1

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

<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。

编辑:作为@Mathias Bynens在评论中指出,只有 DT和DD元素可能会出现在DL的直接子元素。

各地块级元素也将内嵌代码在HTML5

0

允许基本上它是与block and inline elements的问题。惯例是你不应该把一个块元素放在一个内联元素中,一个<a>内联标签和一个<dl>(以及其内部的<dt><dd>元素)是阻塞的。你在做什么类似于将<strong><a>元素放在<form><div>左右,这显然看起来不正确。

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

否认:不知道你试图验证HTML 5。在这种情况下,答案是,你不能把任何其他比<dt><dd>作为<dl>直接孩子。

+1

HTML5允许块级锚定,因此您的解释没有任何意义。见[我的答案](http://stackoverflow.com/questions/5581257/element-a-not-allowed-as-child-of-element-dl-in-this-context-validator-erro/5581416#5581416) 。 – 2011-04-07 12:55:17

+0

其实我试图得到一个块悬停效果...如果我单独放置,jquery会对动画造成一些干扰。 – 2011-04-07 12:56:28

相关问题