【问题标题】:Where does doctype declaration go?doctype 声明在哪里?
【发布时间】:2015-03-19 13:38:51
【问题描述】:

当我输入 <!doctype html> 时,它是否必须位于我的 html 顶部并采用该确切格式?

但是,在我正在做的作业中,我需要使用而不是更改 html 代码,并且我只能添加 css 文件等。在这个 html 代码中,结构对于我所见过的任何东西都是独一无二的它看起来像这样:

<html>
<head>
</head>
<body>
    <doctype html>
    <link rel="stylesheet" ...>
    <h1>...</h1>
    ...
</body>
</html>

我了解 doctype 是什么以及做什么,我总是把它们放在上面,但我想知道该代码是否有效,或者浏览器是否忽略了问题并只是呈现它。

【问题讨论】:

  • 这甚至不是一个有效的 DOCTYPE 声明。它应该位于文件的顶部,并且缺少 !。 &lt;!DOCTYPE html&gt; 您应该通过电子邮件向您的教授发送有关此 HTML 的信息……或者直接更新它。该 doctype 标记很可能会被浏览器忽略,但应该不是问题。
  • 是的,这似乎是一项结构极差的 IMO 任务,除非是故意的。
  • @BoltClock 非常正确。我想如果它是在教育/作业环境中,它可能是故意的。我从来没有见过有人把 doctype 声明弄错了。
  • 是的,我真的很好奇它是否真的有效。我认为这个任务是精心设计的。重点与 html 甚至编码无关。这是一门用户体验课程,对于不会使用任何计算机的设计专业学生来说,它是一个快速复习(或只是更新鲜)的课程。

标签: html syntax doctype


【解决方案1】:

Html 声明应该放在文件的顶部,因为它指示 Web 浏览器 我的 HTML 文档使用的是哪个版本。 HTML 标签取决于 Web 浏览器和我们使用的 HTML 版本。

【讨论】:

  • 你有没有说它必须放在顶部的消息来源?
  • w3.org/QA/Tips/Doctype 这表示标记验证器工具使用此文档类型来检查 HTML 的语法,因此根据我的说法,有必要将其放在顶部以允许完整的语法检查
【解决方案2】:

doctype 字符串必须位于开头才能生效。它唯一对浏览器的影响是影响浏览器模式的选择,即“标准”、“几乎标准”或“怪癖”模式。如果开头没有 doctype 字符串,则选择 quirks mode。这对 CSS 的使用有相当大的影响。因此,如果这是一项任务,他们要么是在捉弄你,要么是无能。

规范所说的无关紧要(这在 SO 旧问题的答案中已涵盖)。如果您需要在问题中使用 HTML,则代码在多个方面都是无效的(缺少 doctype 字符串、缺少 title 元素、无效的 &lt;doctype html&gt; 标记和 link 放置在 body 内的元素) .然而,对于某些“工作”值,该代码可以工作,但在怪癖模式下。

【讨论】:

    【解决方案3】:

    该 DOCTYPE 声明未正确编写或在此 informative but dated article 有效的正确位置。它实际上是一个 HTML 注释,而不是一个标签。

    &lt;DOCTYPE&gt; 声明必须是您的第一件事 文档,在&lt;html&gt; 标签之前。

    应该是&lt;!DOCTYPE html&gt;,位于文件顶部的html标签上方。


    就处理方式而言,

    现代浏览器有一个quirks-mode,它们试图解释不正确编写的 HTML。我不确定每个浏览器将如何处理该标签,但这绝对值得关注:

    1. 标签未关闭。所以它很可能会将所有内容都包裹在正文中,这会导致一些意想不到的 CSS 问题。
    2. 或者doctype标签会被完全忽略(这可能只是一厢情愿)

    快速测试表明,标签的处理方式很奇怪。它包装了其他内容..有点?嗯。奇怪:

    http://jsfiddle.net/CoryDanielson/6d12grLg/

    【讨论】:

      【解决方案4】:

      HTML &lt;!DOCTYPE&gt; 声明

      定义和使用

      &lt;!DOCTYPE&gt; 声明必须是 HTML 文档中的第一件事,在 &lt;html&gt; 标记之前。

      &lt;!DOCTYPE&gt; 声明不是 HTML 标记;它是对 Web 浏览器的指示,说明页面是用什么版本的 HTML 编写的。

      在 HTML 4.01 中,&lt;!DOCTYPE&gt; 声明指的是 DTD,因为 HTML 4.01 是基于 SGML。 DTD 指定标记语言的规则,以便浏览器正确呈现内容。

      HTML5 不基于 SGML,因此不需要引用 DTD。

      提示:始终将&lt;!DOCTYPE&gt; 声明添加到您的 HTML 文档中,以便浏览器知道预期的文档类型。

      来源: http://www.w3schools.com/tags/tag_doctype.asp

      W3C:

      http://www.w3.org/QA/2002/04/valid-dtd-list.html

      http://www.w3.org/QA/Tips/Doctype

      【讨论】:

      • 您可以添加链接或来源吗?其中很多都是无关紧要的信息。
      • 谢谢,我赞成快速回答和声明,但我对 w3schools.com 不满意,我真的在寻找“那个 doctype 声明是否有效”的明确答案,所以我赢了'不接受这个答案是正确的。
      • 我已经用 W3C 链接更新了我的答案。它对你来说可能是可靠的。
      • 你知道吗,从 w3schools 中引用的每一个陈述都略有错误。
      【解决方案5】:

      该 doctype 声明无效,至少会导致某些浏览器进入奇怪的兼容模式。

      W3c(在 w3.org)在一个名为 html5/syntax.html 的页面上说“DOCTYPE 是必需的序言”,我将其解释为它是必需的,并且必须放在首位。

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

      1. 与字符串 &lt;!DOCTYPE 匹配的不区分大小写的 ASCII 字符串。
      2. 一个或多个空格字符。
      3. 与字符串html 匹配的不区分大小写的ASCII 字符串。
      4. (可选)DOCTYPE 旧版字符串或过时的允许 DOCTYPE 字符串。
      5. 零个或多个空格字符。
      6. &gt; (U+003E) 字符。

      【讨论】: