为什么不允许使用“DIV”作为文档类型声明?

5
我已经创建了这段代码。
<a href="#">
  <!-- BEGIN #btnBox .btnBox --> 
  <div id="btnBox2" class="btnBox">
    <div class="btnleft"></div> <!-- BEGIN & END .btnleft -->
      <!-- BEGIN .btncenter --> 
      <div class="btncenter">
        <div id="btnText2" class="btnText">Want more? - check out my recent work</div>
      </div>
      <!-- END .btncenter -->            
      <div class="btnright"></div> <!-- BEGIN & END .btnright -->
  </div>
  <!-- END #btnBox .btnBox -->   
</a>

当我在W3 HTML验证下验证代码时,它会给我一个错误:
Line 163, Column 41: document type does not allow element "DIV" here; missing one of "OBJECT", "MAP", "BUTTON" start-tag

我正在使用

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4个回答

8
是块级元素——它们不应该包含在锚点标签中。

2
因为锚点元素是内联级别的元素。 - Richard JP Le Guen
我想要将整个容器设置为链接... 我该如何实现? - Muzammil
1
你不应该把容器本身作为链接,如果你想让一个容器可点击,你应该研究一下事件处理。你是在使用jQuery吗?可以这样写:$('div.btnBox').click(function () { ... }); - g.d.d.c
或者直接切换到HTML5 doctype :),您可以拥有一个页面,它可以在不使用JavaScript的情况下验证具有可点击的容器(块元素)。 - Fredrik

7

一个 <div> 元素是块级元素,而一个锚点 <a> 是内联元素。根据w3c网站

一般来说,块级元素可以包含内联元素和其他块级元素。一般来说,内联元素只能包含数据和其他内联元素。在这种结构上的区别中,固有的思想是块级元素创建比内联元素更大的结构。

你可能正在使用分割线,因为你需要块级行为,例如 widthheight

不改变 DOCTYPE 的情况下,您可以使用 CSS 属性 display 使 <span> 元素表现得像 <div> 元素:

HTML

<a href="#" class="forMuzammil">
<!-- BEGIN #btnBox .btnBox --> 
<span id="btnBox2" class="btnBox">
    <span class="btnleft"></span> <!-- BEGIN & END .btnleft -->
    <!-- BEGIN .btncenter --> 
    <span class="btncenter">
        <span id="btnText2" class="btnText">Want more? - check out my recent work</span>
    <!-- END .btncenter -->    
    </span>
    <span class="btnright"></span> <!-- BEGIN & END .btnright -->
<!-- END #btnBox .btnBox -->     
</span>
</a>

CSS

a.forMuzammil {
    display:block;
}
a.forMuzammil span {
    display:block;
}

第214行,第33列:文档类型不允许在此处使用元素“DIV”;假定缺少“LI”开始标记。<div class="clrless"></div> <!-- BEGIN & END .clear --> 我该如何解决这个问题... - Muzammil
如果你将那个div替换为一个span,它应该可以解决问题,但我担心会出现另一个问题。正如其他人所说,使用html5会更好。尝试将文档更改为 <!DOCTYPE html>。如果你不想更改你的文档类型声明,那么我觉得你将面临很多工作... - Jose Rui Santos


0

如果您使用的是HTML4文档类型,则无法在a标签中使用块元素,例如DIV。

请尝试使用以下文档类型:

<!DOCTYPE html> 

确保您为锚点标签添加缺失的结束标记:</a>

<!DOCTYPE html> 是 HTML5 的文档类型。根据 HTML5 的标准,现在可以在 a 标签内使用 div 标签。

希望这能帮到您。


谢谢。但最好使用HTML5,因为我完全按照HTML4严格标准编写了HTML代码。 - Muzammil
Html5是未来的趋势! 当你使用html4 strict时,仍然可以像以前一样编写代码,但如果你改用html5 doctype,就可以获得所有新功能的优势(例如我们正在讨论的在a标签内部使用块元素)。 - Fredrik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接