25

我一直想知道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 中有几行空行。

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

4

6 回答 6

25

是的!评论和空间可能是第一位的。

这是官方 HTML 规范中的相关部分

于 2012-06-07T02:33:28.493 回答
8

偶尔浏览器会在文档类型之前出现空白问题——典型的例子是 IE6,据说一看到它就会进入怪异模式。事实证明,这仅适用于某些非常特定类型的空格(例如,不可破坏的空格, )。也就是说,IE6 兼容性在大多数人的优先级列表中并不高。

于 2012-06-07T02:42:17.080 回答
4

为了最大限度地避免 Quirks Mode,请将 doctype 声明放在 HTML 文档的开头。你不会找到任何官方声明,因为 Quirks Mode 是关于违反标准和关于实际浏览器行为的。Quirks Mode 的理念的一部分是它在很大程度上没有记录。作者不应该相信它。它的目的是让遗留页面表现得可以容忍(就像他们过去一样),而不是你应该用于新页面的东西。

现代浏览器通常允许在文档类型、注释或 XML 声明之前有一个空行,而无需进入 Quirks 模式。但是不要在那里放任何东西,除非你有令人信服的理由这样做。

于 2012-06-07T05:01:35.693 回答
4

请注意,Ray 链接到的 HTML 规范是错误的。虽然在 DOCTYPE 之前允许有空格,但规范说注释也可以在 DOCTYPE 之前。但这在 Internet Explorer 9 及更早版本中不起作用。

于 2012-11-28T16:32:09.713 回答
1

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

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

来自:w3学校(doctypes)

于 2012-06-07T02:30:35.390 回答
0

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

有关详细信息,请参阅W3CSivonen

于 2020-10-14T14:59:04.910 回答