尽可能小的有效 (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。)
相关文章
HTML 中的 role 属性
发布时间:2023/05/06 浏览次数:124 分类:HTML
-
本篇文章介绍 HTML role属性。HTML中 role 属性介绍,role 属性定义描述语义的 HTML 元素的角色。
在 HTML 中打印时分页
发布时间:2023/05/06 浏览次数:188 分类:HTML
-
本篇文章介绍如何在打印 HTML 页面或内容时强制分页。将 page-break-after 属性设置为 always Inside @media print to Page Break in HTML
在 HTML 中显示基于 Cookie 的图像
发布时间:2023/05/06 浏览次数:154 分类:HTML
-
本文介绍如何根据 HTML 中的 cookies 显示图像。根据 HTML 中设置的 Cookies 显示图像。问题陈述是我们需要根据网页传递的cookie来显示特定的图像。
在 HTML 中创建下载链接
发布时间:2023/05/06 浏览次数:140 分类:HTML
-
本文介绍如何在 HTML 中创建下载链接。使用 download 属性在 HTML 中创建下载链接.。我们可以使用 HTML 锚元素内的下载属性来创建下载链接。
HTML 中的 ::before 选择器
发布时间:2023/05/06 浏览次数:70 分类:HTML
-
本教程介绍 CSS ::before 伪元素。CSS ::before 伪元素。 ::before 选择器是一个 CSS 伪元素,我们可以使用它在一个或多个选定元素之前插入内容。 它默认是内联的。
在 HTML 中创建一个可滚动的 Div
发布时间:2023/05/06 浏览次数:54 分类:HTML
-
本篇文章介绍如何使 HTML div 可滚动。本文将介绍在 HTML 中使 div 可滚动的方法。 我们将探索垂直和水平滚动,并通过示例查看它们的实现。
HTML 显示箭头的代码
发布时间:2023/05/06 浏览次数:153 分类:HTML
-
一篇关于用于显示箭头的 Unicode 字符实体的紧凑文章。本文讨论使用 Unicode 字符实体在我们的 HTML 页面上显示不同的字符。 HTML 中使用了许多实体,但我们将重点学习表示上、下、左、右的三角
在 HTML 中启用和禁用复选框
发布时间:2023/05/06 浏览次数:149 分类:HTML
-
本篇文章介绍如何启用和禁用 HTML 中的复选框。HTML 中的复选框 复选框是一个交互式框,可以切换以表示肯定或否定。 它广泛用于表单和对话框。
HTML 中的只读复选框
发布时间:2023/05/06 浏览次数:198 分类:HTML
-
本篇文章介绍了如何在 HTML 中制作只读复选框。本文是关于如何使 HTML 复选框控件成为只读组件的快速破解。 但是,首先,让我们简要介绍一下复选框控件。