尽可能小的有效 (X)HTML 文档
我认为为每个版本记录尽可能小的有效 HTML 文档会很有趣,所以这里是:)
ISO/IEC 15445:2000,也称为“ISO HTML”:113 字节
<!DOCTYPE html PUBLIC"ISO/IEC 15445:2000//DTD HTML//EN"><html><head><title></title></head><body><p></body></html>
DOCTYPE 也可以写成 <!DOCTYPE html PUBLIC "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN">
,但显然需要更多字符。
尽管它欺骗了 W3C 验证器,但只要不使用系统标识符,PUBLIC
后面的空格就可以省略。
<html>
、<head>
、<body>
的开始和结束标记以及作为正文内容的块级元素是必需的。 不过,可以省略 <p>
元素的结束标记。
HTML 2.0:58 字节
<!DOCTYPE html PUBLIC"-//IETF//DTD HTML 2.0//EN"><title//x
除了 DOCTYPE 之外,只有 <title>
元素以及一些正文内容(在本例中为文本“x”)是必需的。 <html>
、<head>
和 <body>
的开始和结束标记可以省略。 (浏览器会自动创建这些元素。)
大家能已经注意到这里使用了 <title//
而不是 <title></title>
。 这是名为“SHORTTAG NETENABL IMMEDNET”的 SGML 标记最小化功能。 NET 代表空结束标记。 基本上,这允许缩短文本值周围的标签。 <title//
中的第一个斜杠 (/
) 代表启用 NET 的“开始标记关闭”(NESTC),第二个斜杠代表 NET。 如果您向 <title>
元素添加一些内容,理论上我们可以使用 <title/Foo/
而不是 (<title>Foo</title>
)。
请注意
,根据 W3C 验证程序,以下版本(54 字节)似乎具有相同的效果:
<!DOCTYPE html PUBLIC"-//IETF//DTD HTML//EN"><title//x
HTML 3.2:63 字节
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 3.2 Final//EN"><title//x
请注意
,HTML 3.2 和更早版本的DOCTYPE
对我们的文档没有真正的影响; 浏览器仍然进入奇怪模式。
HTML 4.0 Strict:59 字节
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.0//EN"><title//<p>
在 HTML4 中,正文内容必须包含块级元素——仅文本内容不行。 因此,使用了一个空的 <p>
元素。
HTML 4.01 Transitional:71 字节
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><title//x
请注意
,我们没有使用完整的文档类型声明; 系统标识符(理论上允许用户代理下载文档类型定义和任何需要的实体集的 URL 部分)是可选的,因此这里省略了。
HTML 4.01 Transitional 需要正文内容,但接受文本内容; 不需要 <body>
中的块级元素。
HTML 4.01 Frameset: 84 字节
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Frameset//EN"><title//<frameset/<frame>/
完整的 DOCTYPE 是 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
,但系统标识符可能 被省略。
如我们所见,我们使用了与之前相同的 SGML 技巧 (<frameset/<frame>/
) — 只不过这次我们实际上是将内容添加到包装器元素。
在 HTML 4.01 Frameset 中,<frameset>
元素必须有一个 <frame>
子元素。 XHTML 1.0 Frameset 没有这个要求。
HTML 4.01 Strict:60 字节
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01//EN"><title//<p>
HTML 4.01 + RDFa 1.0:69 字节
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01+RDFa 1.1//EN"><title//<p>
完整的 DOCTYPE 是 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/html401-rdfa-1.dtd">
, 但系统标识符可以省略。
HTML 4.01 + RDFa 1.1:69 字节
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01+RDFa 1.1//EN"><title//<p>
完整的 DOCTYPE 是 <!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/html401-rdfa11-1.dtd">
, 但系统标识符可以省略。
XHTML Basic 1.0:41 字节
<html><head><title/></head><body/></html>
DOCTYPE — 在这种情况下,<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd" >
— 在所有 XHTML 版本中都是可选的,假设文档提供了正确的 Content-Type: application/xhtml+xml
标头。 (这是一个大胆的假设。)
请注意
,此版本的 XHTML 中不需要根<html>
元素的 xmlns 属性。
正文内容也是可选的。
我们可能会注意到这里使用了 <title/>
而不是 <title></title>
。 这是 HTML 序列化中 <title//
的 XHTML 等价物。 还记得我们谈到 SGML 时,HTML 是如何用 /
定义它的 NET 和 NETSC 的吗? 这里唯一的区别是 XML 用 /
定义 NESTC,用 >
(尖括号)定义 NET。
XHTML Basic 1.1:41 字节
<html><head><title/></head><body/></html>
DOCTYPE,<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
是可选的 — 再次假设文件以正确的 MIME 类型提供。
XHTML 1.0 Transitional: 78 字节
<html xmlns="http://www.w3.org/1999/xhtml"><head><title/></head><body/></html>
DOCTYPE <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
是可选的 .
XHTML 1.0 Frameset: 82 字节
<html xmlns="http://www.w3.org/1999/xhtml"><head><title/></head><frameset/></html>
DOCTYPE <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
是可选的 。
XHTML 1.0 Strict: 78 字节
<html xmlns="http://www.w3.org/1999/xhtml"><head><title/></head><body/></html>
DOCTYPE <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
是可选的 。
XHTML + RDFa 1.1: 78 字节
<html xmlns="http://www.w3.org/1999/xhtml"><head><title/></head><body/></html>
DOCTYPE <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
是可选的。
XHTML 1.1: 78 字节
<html xmlns="http://www.w3.org/1999/xhtml"><head><title/></head><body/></html>
DOCTYPE <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
是可选的。
HTML5:15 字节
<!DOCTYPE html>
没错——没有 <title>
元素! 当更高级别的协议提供标题信息时,例如 在电子邮件的主题行中或当 HTML 用作电子邮件创作格式时,可以省略 <title>
元素。
在所有其他情况下,这是最小的 HTML5 文档(31 字节):
<!DOCTYPE html><title>x</title>
遗憾的是,我们之前使用的 SGML 技巧 (<title//
) 在 HTML5 中不再被允许。 即使是,我们仍然无法使用它,因为如果使用它,HTML5 要求 <title>
元素的内容值非空。 这背后的原因很明显:如果将 <title>
元素留空,则意味着文档不需要标题,在这种情况下,我们应该完全省略 <title>
元素(如上所述)。
请注意
,正文内容不是必需的。
XHTML5: 字节
<html xmlns="http://www.w3.org/1999/xhtml"/>
XHTML5 不需要 DOCTYPE。 就像在 HTML5 中一样,有些情况下不需要 <title>
元素。 正文内容也是可选的。
(使用 validator.nu 来确认这一点;如果我们尝试对此进行验证,W3C 验证器将退回到 XHTML 1.0 Transitional。)
相关文章
使用 Python 将 Pandas DataFrame 保存为 HTML
发布时间:2024/04/21 浏览次数:106 分类:Python
-
本教程演示如何将 Pandas DataFrame 转换为 Python 中的 HTML 表格。
使用 jQuery 更新 innerHTML
发布时间:2024/03/24 浏览次数:65 分类:JavaScript
-
在今天的文章中,我们将学习如何使用 jQuery 更新或替换元素的内部 HTML。
在 JavaScript 中获取 HTML 表单值
发布时间:2024/03/22 浏览次数:122 分类:JavaScript
-
本文展示了如何通过 id 和 name 属性检索 select-option 元素和一般 case input 文本元素的值。我们将在 JavaScript 中使用获取的值进行进一步的工作。
使用 JavaScript 将 HTML 表格导出到 Excel
发布时间:2024/03/21 浏览次数:176 分类:JavaScript
-
本教程演示了如何使用 JavaScript 将 HTML 表格数据导出到 Excel。
使用 JavaScript 编码 HTML
发布时间:2024/03/20 浏览次数:93 分类:JavaScript
-
本教程将教你如何使用不同的方法对 HTML 字符串进行编码。这些方法的共同点是字符串替换,它替换了具有潜在危险的字符。
使用 JavaScript 加载外部 HTML 文件
发布时间:2024/03/20 浏览次数:147 分类:JavaScript
-
本文演示了如何使用 JavaScript 和 jQuery 加载外部 html 文件。
使用 JavaScript 在 HTML 中使用按钮清除文本区域
发布时间:2024/03/20 浏览次数:97 分类:JavaScript
-
本教程提供了有关什么是事件侦听器、如何在 JavaScript 中添加事件侦听器以及如何使用 JavaScript 在 HTML 中通过按钮清除文本区域的信息。