我的HTML5文档类型声明必须放在第一行吗?

26

我一直想知道在 DOCTYPE 前面添加 空格 是否重要,但是我似乎无法在网上找到任何明确的信息。人们说不要这样做,但我无法看出它可能产生什么影响,甚至不知道规范是否要求这样做。我也不确定它是否会触发 IE 兼容模式或其他令人讨厌的错误。

原因是,在我的(糟糕的 asp.net)代码中,我更喜欢编写:

<%@ Page language="c#" Codepage="65001" AutoEventWireup="true" %>
<%@ OutputCache Location="None" VaryByParam="none" %>
<!doctype html>

比:

<%@ Page language="c#" Codepage="65001" AutoEventWireup="true" %><%@ OutputCache Location="None" VaryByParam="none" %><!doctype html>

第一种方式更整洁。但是顶部那种方式的渲染结果会在你的HTML中多出几行空白。

这不是什么大问题,只是我一直想知道这是否很重要 :)


我有一个类似的情况: <metal:page define-macro="master"> <tal:doctype tal:replace="structure string:&lt;!DOCTYPE html&gt;" /> - Falk
6个回答

27

是的!注释和空格可以先出现。

以下是官方HTML规范中相关的章节:Writing HTML documents


谢谢,伙计,这就是我正在寻找的。安心 :) 一旦可以,我会接受的。 - Simon Lang
2
似乎已经移动到https://www.w3.org/TR/2012/WD-html-markup-20121025/documents.html#conformant-documents。 - so_
1
当前版本位于 https://html.spec.whatwg.org/multipage/syntax.html#writing。 - deltragon

8

偶尔会有一些浏览器在doctype前面存在空格的问题。经典的例子是IE6,据说它看到这个就会进入quirks模式。事实上,这只对某些特定类型的空格(例如非断行空格&nbsp;)适用。尽管如此,大多数人都不太关心IE6的兼容性。


4
为了最大化避免 Quirks Mode,将文档类型声明放在 HTML 文档的开头位置。官方没有任何声明,因为 Quirks Mode 是违反标准和实际浏览器行为的一部分。它的很大一部分是未经记录的,作者不应该信赖它。它的目的是让旧页面的行为变得可以容忍(与它们以前一样),而不是您应该用于新页面的内容。
现代浏览器通常会允许在文档类型声明之前有一个空行、注释或 XML 声明,而不会进入 Quirks Mode。但是,除非您有强烈的理由,否则不要在那里放置任何内容。

3
请注意,雷提供的HTML规范链接是错误的。虽然DOCTYPE前允许有空格,但规范也指出注释也可以在DOCTYPE之前。但是这在Internet Explorer 9及更早版本中无效。

8
我必须仔细质疑“浏览器X的版本不支持它”和“规范是错误的”的逻辑。特别是因为“Ray提供的HTML规范”是w3.org规范... - Kristian Glass
3
也许我应该用“不适用于网站开发者”来表达,而不是“错误”。但这并不改变一个事实,如果你只信任规范,你可能会创建一些在你需要支持的浏览器上无法正常工作的东西。 - Jesper Kristensen

1
不,Doctype 不必是文件的第一行,但它必须出现在 <html> 标签之前。 这是您唯一的限制,因此您的第一种方法是可以的。

声明必须是 HTML 文档中的第一件事,在 <html> 标签之前。

引用自:w3 schools (doctypes)


6
w3schools不是可靠的参考资料。尽管名称相似,但与W3C无任何关联。 - Ry-

0

实际上,关于初始文本限制的建议是将包含 <meta charset="UTF-8"> 语句的文本限制在1024字节以内。这是因为一些浏览器需要使用有限的预扫描来快速确定字符编码,以防缺少字符编码头。

详情请参见 W3CSivonen


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