<!DOCTYPE html> 到底是什么?

2025-05-25

<!DOCTYPE html> 到底是什么?

<!DOCTYPE html> <!-- What the hell is this?? -->>
<html lang="en">
<head>
    <title>Document</title>
</head>
<body>
</body>
</html
Enter fullscreen mode Exit fullscreen mode

创建新的 HTML 文件时,您可能会想:“为什么我需要在 HTML 文件的第一行添加这条语句?.html 文件扩展名难道不足以告诉浏览器这是一个 HTML 文件吗?” 虽然这没错,但还有更多内容。在理解上述语句之前,让我们先了解一下什么是 DTD。

文档类型定义(DTD)

文档类型定义(简称 DTD)描述了 XML 文档的文档结构以及该文档可以拥有的合法元素列表。

在 HTML5 之前(例如 HTML 4.01),所有 HTML 文档都必须在其第一行包含“Doctype”声明以及对其类型定义的引用。如下所示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd">
Enter fullscreen mode Exit fullscreen mode

这项宣言有两个目的:

  • 提供文档可以包含的有效元素列表。
  • 定义 DTD 的风格,可以是严格型、过渡型或框架型。更多信息,请点击此处

那么为什么您在遇到的最新 HTML 文件中看不到这些长 DTD 引用呢?

进入 HTML5!

需要注意的是,HTML 的早期版本(HTML5 之前)基于 SGML(标准通用标记语言),因此需要引用 DTD。从 HTML5 开始,由于 HTML5 不再基于 SGML,因此不再需要引用 DTD。

所以现在,这个“Doctype”声明又有了另一个用途。它允许浏览器以“标准模式”运行HTML文件。现在,我们自然会问:“这个标准模式到底是什么?” 为了理解这一点,让我们回顾一下过去。

回到过去

当科技爱好者们意识到互联网的强大力量时,两款流行的浏览器应运而生——网景浏览器 (Netscape Navigator) 和紧随其后(鼓声响起)微软的 Internet Explorer。这甚至发生在 W3C 标准出现之前,而该标准最终规范了代码在不同浏览器上的运行方式。因此,你可以想象,鉴于这些浏览器的流行程度,网站会有两个版本——一个用于网景浏览器,另一个用于 IE。这在现在听起来可能有些多余,但在当时却是常态。然而,在 W3C 标准制定并开始遵循这些标准之后,开发人员遇到了一个新的问题。

现在的问题是遗留代码开始崩溃。因此,一个可能的解决方案是,网站现在有两个版本——一个是标准版(我们之前提到的版本),它符合 W3C 标准,因此可以在不同的浏览器上运行;另一个是Quirks 版,它支持遗留代码。

那么浏览器如何识别需要使用哪种模式呢?只需在 HTML 文件的第一行添加有效的 DOCTYPE 声明,指示浏览器以标准模式运行代码即可。除此之外的任何操作都会在 IE9 或更早的版本中触发怪异模式。这正是 HTML5 及更高版本所做的事情。如果您没有将此行添加到 HTML 文件,浏览器会将其解释为以怪异模式<!DOCTYPE html>运行代码的指令,最终可能会导致不同浏览器的结果不一致。

结论

了解了这些背景知识后,我希望你现在能够理解 <!DOCTYPE html> 语句的重要性。如果你想了解更多相关内容,请参考我下面提供的链接。

参考

https://www.freecodecamp.org/news/what-is-the-doctype-declaration-in-html/
https://developer.mozilla.org/en-US/docs/Web/HTML/Quirks_Mode_and_Standards_Mode
https://hsivonen.fi/doctype/

文章来源:https://dev.to/amanmalh/what-the-hell-is-doctype-html-32om
PREV
TensorFlow.js 简介:通过 JavaScript 实现机器学习。
NEXT
更快构建你的 React 应用!Journey 解决方案使用