HTML

发展

1980年，物理学家蒂姆·伯纳斯-李在欧洲核子研究中心（CERN）在承包工程期间，为使CERN的研究人员使用并共享文档，他提出并创建原型系统ENQUIRE。1989年，伯纳斯-李在一份备忘录中提出一个基于互联网的超文本系统。他规定HTML并在1990年底写出浏览器和服务器软件。同年，伯纳斯-李与CERN的数据系统工程师罗伯特·卡里奥联合为项目申请资助，但未被CERN正式批准。在他的个人笔记中伯纳斯-李列举“一些使用超文本的领域”，并把百科全书列为首位。
HTML的首个公开描述出现于一个名为“HTML标签”的文件中，由蒂姆·伯纳斯-李于1991年底提及。它描述18个元素，包括HTML初始的、相对简单的设计。除了超链接标签外，其他设计都深受CERN内部一个以标准通用标记语言（SGML）为基础的文件格式SGMLguid的影响。这些元素在HTML 4中仍有11个存在。
伯纳斯-李认为HTML是SGML的一个应用程序。1993年中期互联网工程任务组（IETF）发布首个HTML规范的提案：“超文本标记语言（HTML）”互联网草案，由伯纳斯-李与丹·康纳利撰写。其中包括一个SGML文档类型定义来定义语法。草案于6个月后过期，不过值得注意的是其对NCSA Mosaic浏览器自定义标签从而将在线图像嵌入的行为的认可，这反映IETF把标准立足于成功原型的理念。同样，戴夫·拉格特在1993年末提出的与之竞争的互联网草案“HTML+（超文本标记格式）”建议规范已经实现的功能，如表格与填写表单。
在HTML和HTML+的草案于1994年初到期后，IETF创建一个HTML工作组，并在1995年完成"HTML 2.0"，这是第一个旨在成为对其后续实现标准的依据的HTML规范。
在IETF的主持下，HTML标准的进一步发展因竞争利益而遭受停滞。自1996年起，HTML规范一直由万维网联盟（W3C）维护，并由商业软件厂商出资。不过在2000年，HTML也成为国际标准（ISO/ IEC15445：2000）。HTML 4.01于1999年末发布，进一步的勘误版本于2001年发布。2004年，网页超文本应用技术工作小组（WHATWG）开始开发HTML5，并在2008年与W3C共同交付，2014年10月28日完成标准化。

标记

HTML标记包含标签（及其属性）、基于字符的数据类型、字符引用和实体引用等几个关键部分。HTML标签是最常见的，通常成对出现，比如<h1>与</h1>。这些成对出现的标签中，第一个标签是开始标签，第二个标签是结束标签。两个标签之间为元素的内容，有些标签没有内容，为空元素，如<img>。
HTML另一个重要组成部分为文档类型声明，这会触发标准模式渲染。
以下是一个经典的Hello World程序的例子：
1 <!DOCTYPE html>2 <html>3   <head>4     <title>This is a title</title>5   </head>6   <body>7     <p>Hello world!</p>8   </body>9 </html>
<html>和</html>之间的文本描述网页，<body>和</body>之间的文本为可视页面内容。标记文本<title>This is a title</title>定义了浏览器的页面标题。
文档标记类型<!DOCTYPE html>用于HTML5。 如果未进行声明，浏览器会使用“怪异模式”进行渲染。

元素

HTML文档由嵌套的HTML元素构成。它们用HTML标签表示，包含于尖括号中，如<p>
在一般情况下，一个元素由一对标签表示：“开始标签”<p>与“结束标签”</p>。元素如果含有文本内容，就被放置在这些标签之间。
在开始与结束标签之间也可以封装另外的标签，包括标签与文本的混合。这些嵌套元素是父元素的子元素。
开始标签也可包含标签属性。这些属性有诸如标识文档区块、将样式信息绑定到文档演示和为一些如<img>等的标签嵌入图像、引用图像来源等作用。
一些元素如换行符<br>，不允许嵌入任何内容，无论是文字或其他标签。这些元素只需一个单一的空标签（类似于一个开始标签），无需结束标签。
许多标签是可选的，尤其是那些很常用的段落元素<p>的闭合端标签。HTML浏览器或其他介质可以从上下文识别出元素的闭合端以及由HTML标准所定义的结构规则。这些规则非常复杂，不是大多数HTML编码人员可以完全理解的。
因此，一个HTML元素的一般形式为：<tag attribute1="value1" attribute2="value2">''content''</tag>。一些HTML元素被定义为空元素，其形式为<tag attribute1="value1" attribute2="value2">。空元素不能封装任何内容。例如<br>标签或内联标签<img>。一个HTML元素的名称即为标签使用的名称。注意，结束标签的名称前面有一个斜杠“/”，空元素不需要也不允许结束标签。如果元素属性未标明，则使用其默认值。

字符与实体引用

在4.0版本中，HTML定义了一系列共252个字符实体引用和1,114,050个字符值参考。二者都支持单个字符通过简单的标记写入。文字字符与其对应的标记渲染的效果相同。
用这种方式“转义”字符的能力允许字符<与&（当分别被写作&lt;和&amp;时）被理解为字符数据而不是标记。例如<通常为标签的开头，&通常为字符实体引用与数字字符引用的开头；&amp;或&#x26;或&#38;将&作为元素的内容或属性的值。双引号字符"在不被用于属性值的标示时必须转义为&quot;或&#x22;或&#34;；相等地，当于单引号字符'不被用于属性值的标示时，也必须转义为&#x27;或&#39;（或HTML5与XHTML文档中的&apos;）。
如果文档作者忽略了转义这样的字符，一些浏览器会尝试通过上下文猜测他们的意图。如果结果仍为无效标记，这会使其他浏览器或用户代理难以访问到该文档，并使它们尝试使用搜索和索引来解析该文档。
那些难以输入或不在该文档字符编码中的字符也可通过转义来实现。例如通常只在西欧或南美的键盘出现的重音符e（é），可以在HTML文档中用作实体引用&eacute; 或数字引用&#xE9;或&#233;。 诸如UTF-8的Unicode字符编码与所有的现代浏览器兼容并允许直接访问全球书写系统几乎所有的字符。

数据类型

HTML为元素内容定义了多种数据类型，如脚本数据、样式表数据以及许多属性值的类型，包括ID、名称、URI、数字长度单位、语言、媒体描述符颜色、字符编码、日期和时间等等。所有这些数据类型都是字符数据的特殊化。

文档类型声明

HTML文档需要以文档类型声明（英语非正式说法“doctype”）开头。在浏览器中，文档类型声明有助于确定渲染模式——特别是是否使用怪异模式。
文档类型声明的初衷是通过基于文档类型定义（DTD）的SGML工具来解析并验证HTML文档。
HTML5未定义DTD，所以在HTML5中文档类型声明更为简短：
<!DOCTYPE html>
HTML 4文档类型声明举例：
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
该声明引用HTML 4.01“严格”版的DTD。基于SGML的验证器可读取DTD，正确解析这些文档并执行验证。在现代浏览器中，一个有效的文档类型激活标准模式有别于怪异模式。
另外，HTML 4.01提供过渡型与框架集型的DTD。过渡型涵盖最广，它可集成当前以及老旧或“过时”的标签，而严格型DTD排除了过时的标签。框架集拥有所有构建框架所需的标签以及过渡型的标签。

语义化HTML

语义化HTML是一种编写HTML的方式，它强调编码信息的含义在其格式（样子）之上。HTML从创立之初就包括语义化标记，但也包括标识性标记如<font>、<i>和<center>标签。也存在一些语义上中立的span与div标签。自1990年代末CSS开始应用于大多数浏览器，网页制作者就被鼓励使用CSS以便呈现与内容分离。
在2001年一次对语义网的讨论中，蒂姆·伯纳斯-李等人给出了一种的方法，使智能软件“代理人”可能有一天会自动抓取网页进行查找、过滤并将之前不相关的联系起来。这种代理甚至在现在也不普遍，但一些Web 2.0、混搭和价格比较网站的想法可能会结束。这些网页应用程序的混合与伯纳斯-李的语义代理人的之间主要区别基于以下事实：当前的聚合与信息混合通常由网页开发者设计，他们早已知道网络位置和他们希望混搭、比较与结合的特定数据的API语义。
网页代理的一个重要类型是网络爬虫或搜索引擎蜘蛛。这些软件代理依赖于它们发现的网页的语义清晰度，因为它们一天要使用各种技术与算法来读取和索引数百万个网页并给网页用户提供搜索工具，没有这些万维网的有效性就会大大降低。
为使搜索引擎蜘蛛评估它们在HTML文档中发现的文本片段的重要性，也为那些创建标记等混合的人与更多的自动化代理工具，HTML中的语义结构需要广泛一致地应用从而将文本的含义呈现给浏览者。
表示性标记在当前的HTML和XHTML推荐中不被鼓励使用。旧版本HTML中的大多数表示功能不再被允许使用，因为它们导致可访问性变差、站点维护成本变高和文档大小变大。
好的语义化HTML也改善了网页文档的可访问性（参见网页内容无障碍指南）。例如，当屏幕阅读器或音频浏览器可以正确判定一个文档的结构时，视觉障碍用户不会再因阅读重复或无关的信息而浪费时间。

分发

HTML文档分发的方法和其他计算机文件相同。不过，它们最常通过网页服务器的超文本传输协议或电子邮件传输。

HTTP

万维网主要由从服务器通过HTTP协议向浏览器发送的HTML文档组成。但是，HTTP也可以被用于传输HTML之外的数据，例如图像、声音和其他内容。为使浏览器了解如何处理接收到的文档，在传输文档时必须同时传递文件类型。这种元数据包含MIME类型（对于HTML 4.01或更早版本是text/html，而对于XHTML 1.0或之后的版本是application/xhtml+xml），以及字符编码（参见HTML字符编码方式）。
在现在的浏览器中，和HTML文档一起发送的MIME类型影响文档的解读方式。和XHTML MIME类型一起发送的文档被认为是良构的XML，而语法错误会导致浏览器无法呈现文档。完全相同的文档如果和HTML MIME类型一起发送，则可能被正常显示，因为浏览器对HTML的语法检查更加松懈些。
W3C的推荐指出，遵循规定的推荐指引的XHTML 1.0文档可标记二者任一的MIME类型。XHTML 1.1还指出，XHTML 1.1文档应标有两种MIME类型。

HTML邮件

大多数图形电子邮件客户端允许使用HTML的子集（经常界限不清）提供格式化和无法使用纯文本的语义标记。这可能包括印刷信息，如彩色标题、强调和引用文本、内嵌图片和图表等。许多这样的客户包含一个编写HTML电子邮件消息的图形用户界面编辑器和一个用于显示的渲染引擎。在邮件中使用HTML受到了一些兼容性的批评，由于一些盲人或具有视觉障碍的人的访问问题，这种方式有利于伪装的钓鱼攻击。因其消息大小超过明文，所以它可混淆垃圾邮件过滤器。

命名规则

最常用的计算机文件扩展名为.html，通用缩写为.htm。它起源于某些早期操作系统与文件系统，如DOS以及FAT数据结构的局限性，它将文件扩展名限制为3个字母。

HTML应用程序

HTML应用程序（HTA；文件扩展名".hta"）是一个Microsoft Windows应用程序，它在浏览器中使用HTML和动态HTML提供应用程序图形界面。正规HTML文件被限制在浏览器的安全模型中，只能分别通过网页服务器和网页对象与站点Cookie进行通信和操作。HTA作为完全受信任的应用程序运行，因此拥有更多的权限，如创建/编辑/删除文件与注册表项。因为它们在浏览器安全模式之外操作，所以HTA不能通过HTTP执行，必须下载（就像EXE文件）并在本地文件系统执行。

所见即所得编辑器

所见即所得编辑器使用图形用户界面（GUI）显示HTML文档，常常类似于文字处理器，所以用户可以设计一切。编者面对的是文档，而不是代码，所以作者并不需要太多的HTML知识。这种所见即所得的编辑模式一直受到诟病，主要因为它生成的代码质量不高；也有人主张将其改变至WYSIWYM模型（所见即所指）。