DOCTYPE声明是否必须是HTML文档中的第一个标记?

时间:2008-09-16 06:34:24

标签: html doctype

当客户端请求页面时,我们的安全管理器会在每个html页面的顶部动态插入一些javascript。它被插入DOCTYPE语句之上。我认为这可能是我遇到布局问题的原因。

想点什么?

8 个答案:

答案 0 :(得分:12)

是的,DOCTYPE必须先出现。

定义如下:http://www.w3.org/TR/REC-html40/struct/global.html。请注意,它说文档由三部分组成,DTD必须是第一部分。

答案 1 :(得分:6)

是的,DOCTYPE必须是页面上的第一个数据:http://www.w3schools.com/tags/tag_DOCTYPE.asp

答案 2 :(得分:2)

HTML建议将其表示为SGML的一个应用程序,它要求DOCTYPE声明出现在HTML元素之前(忽略HTML注释)。即使没有DOCTYPE,在SCRIPT元素之外(在它之前或之后)添加HTML元素也不是有效的HTML。当然,HTML有效性可能不是你的要求,只要它适用于大多数浏览器,然后提到的怪癖模式切换就会得到你:没有DOCTYPE,许多浏览器会切换到怪癖模式,可能会改变布局。

我认为TAM脚本片段是由某个代理或其他代理添加的,无法正确分析页面的HTML结构并将SCRIPT插入HEAD中的正确位置或该文件的BODY。在这种情况下,添加到文档末尾虽然不是有效的HTML,但在大多数Web浏览器中都可以使用。

答案 3 :(得分:1)

但它可能是你问题的根源! 检查“怪癖模式”,因为这取决于doctype设置。 进一步研究:http://www.quirksmode.org/ 解释:您可以将浏览器切换到(主要是IE)严格的标准编译模式和松散模式。这将极大地影响渲染。 TAM的设置可以打开/关闭它。

答案 4 :(得分:1)

是的,doctype必须是文档中的第一件事(注释除外)。您应该避免在doctype之前插入脚本;兼容的解析器不需要接受它。 (他们应该接受在文档的其余部分之后附加的脚本,如果这是另一种选择。)

来自HTML 5规范:

  

8.1 Writing HTML documents

     

本节仅适用于文档,创作工具和标记>发电机。特别是,它不适用于一致性检查器; >一致性检查员必须使用下一节中给出的要求> (“解析HTML文档”)。

     

文件必须按照给定的顺序包含以下部分:

     
      
  1. 可选,单个“BOM”(U + FEFF)字符。
  2.   
  3. 任意数量的评论和空格字符。
  4.   
  5. A DOCTYPE。
  6.   
  7. 任意数量的评论和空格字符。
  8.   
  9. 根元素,采用html元素的形式。
  10.   
  11. 任意数量的评论和空格字符。
  12.   
  13. 上面提到的各种类型的内容将在接下来的几节中介绍。
  14.   

来自HTML 4.01规范:

  

7 The global structure of an HTML document

     

HTML 4文档由三部分组成:

     
      
  1. 包含HTML版本信息的行
  2.   
  3. 声明性标题部分(由HEAD元素分隔),
  4.   
  5. 一个正文,其中包含文档的实际内容。正文可以由BODY元素或FRAMESET元素实现。
  6.         

    [...]

         

    每个部分之前或之后可能会出现空格(空格,换行符,制表符和注释)。

         

    [...]

         

    有效的HTML文档声明文档中使用的HTML版本。文档类型声明命名文档使用的文档类型定义(DTD)(参见[ISO8879])。

答案 5 :(得分:1)

我读过w3规范,只是说文档有3个部分。假定序列并且没有明确的声明禁止,例如,前面有一点js snippit。

据我所知,有可能将TAM配置为在文章的末尾添加js,但是如果它可以引起如此明显的问题,它会让我们为什么会把它放在首位呢!

答案 6 :(得分:1)

W3c(在w3.org上),在一个名为html5/syntax.html的网页上,说“ DOCTYPE 是必需的序言”,我认为这意味着它是必需的并且必须来第一

它还说它必须按以下顺序组成:

  1. 字符串,它是字符串<!DOCTYPE的ASCII不区分大小写匹配。
  2. 一个或多个空格字符。
  3. 字符串,它是字符串html的ASCII不区分大小写匹配。
  4. (可选)DOCTYPE旧版字符串或过时的DOCTYPE字符串(定义如下)。
  5. 零个或多个空格字符。
  6. >(U + 003E)字符。

答案 7 :(得分:0)

这不是标签,但是是的。主要是因为这是将Internet Explorer(我认为是8版之前)转换为标准模式的唯一方法。