SGML
SGML 是一种很强大但很复杂的标记语言,HTML、XML 就是从中衍生出来的。
SGML 的例子如下:
<QUOTE TYPE="example"> typically something like <ITALICS>this</ITALICS> </QUOTE>
SGML 最为强大和古老,XML 是 SGML 的一个子集,HTML 最初也试图成为 SGML 的一个子集。
实际上 W3C 下与网页(超文本)相关的标准有两个系列:HTML 系列和 XHTML 系列。前者从 HTML 第一版一直发展到 HTML 4.x、HTML5,而 XHTML 系列从 XHTML 1.0、1.1、2.0 跳跃到 HTML5 的一部分:所谓的“XHTML5”。HTML 系列的工作重点在于丰富与超文本相关的功能、标记,提供较好的兼容性,更加面向“人”;而 XHTML 系列的工作重点在于将 HTML 改为更加符合 XML 严格规范的格式,更加面向“机器”。 XML 的语法很严格,是 W3C 的宝贝,所以 W3C 试图把各种东西都变成 XML 的子集或应用,比如 MathML,SVG 等。可是其地位逐渐受到其他一些轻量标记语言的威胁。
从IETF到W3C:HTML 4之路
HTML 1并不曾存在,HTML的第一个官方版本就是由IETF(互联网工程任务组)推出的HTML 2.0。问世之前,这个版本中的很多细则已经被实现,比如,1994年的Mosaic浏览器已经实现了在文档中嵌入图片的方法,后来HTML 2.0便吸纳了img这个标签。
后来,W3C取代IETF的角色,成为HTML的标准组织,1990年代的后半页,HTML的版本被频繁修改,直到1999年的HTML 4.01, 至此,HTML到达了它的第一个拐点。
XHTML1.0:XML风格的HTML
浏览器的兼容性问题,有很大一部分的原因是,html标签书写的不规范,导致了各自解释的不同。xhtml的出现,就是要以xml的规范来重新改写html。
HTML在HTML 4.01之后的第一个修订版本就是XHTML 1.0。
XHTML 1.0是基于HTML 4.01的,并没有引入任何新标签或属性,唯一的区别是语法,HTML对语法比较随便,而 XHTML则要求XML般的严格语法。
使用严格的语法规范并非坏事,要求开发者使用单一的代码风格,比如,HTML4.01允许你使用大写或小写字母标识标记元素和属性,XHTML则只 允许小写字母。XHTML1.0的推出刚好碰上了CSS的崛起,Web开发设计者们开始意识到Web标准问题,基于XHTML的严格语法规范被视为编写 HTML代码的最佳实践。
W3C推出XHTML 1.1
如果说XHTML 1.0是XML风格的HTML,XHTML 1.1则是货真价实的XML。这意味着XHTML 1.1无法使用 text/htmlmime-type直接输出,然而,如果Web开发者使用XMLmime-type,则当时的主流浏览器,IE则压根不支持。看上去,W3C似乎正在与当时的Web脱节。
从WebApps1.0到HTML 5
从一开始,WHATWG就和W3C走不同的路线,W3C对问题的讨论是集体投票,而WHATWG则由主笔IanHickson定度。表面上看,W3C更民主,然而事实上,各种内部纷争会使一些决议限于泥潭,在WHATWG,事情的进展会更容易,不过,主笔的权力并非无限大,他们的委员会可以 对那些过于偏执的主笔进行弹劾。
一开始,WHATWG的主要工作包括两部分,Web Forms 2.0和Web Apps 1.0,它们都是HTML的扩展,后来,他们合并到一起成为现在的HTML 5规范。在WHATWG致力于HTML 5的同时,W3C继续他们的XHTML 2.0,然而,他们慢慢地陷入困境。
2006年10月,Web之父Tim Berners-Lee发表了一篇博客文章,表示,从HTML走向XML的路是行不通的,几个月后,W3C组建了一个新的HTML工作组,他们非常明智地 选择了WHATWG的成果作为基础。这一转变带来一些困惑,W3C同时进行这两套规范,XHTML2和HTML 5(注意,W3C的HTTML5在5之前有个空格,而WHATWG的HTML 5则没有空格),而WHATWG也在进行着同样的工作。
XHTML已死:XHTML语法永存
这一混乱局面到了2009年开始变得清晰,W3C宣布终止XHTML2的工作,这是一份关于XHTML2的迟到的讣告。这一消息被那些XML的反对 者视为珍宝,他们借此嘲笑那些使用XHTML1规范的人,然而他们似乎忘记了,XHTML1和XHTML2是截然不同的东西。于此同时,XHTML1规范的制定者担心,XHTML1中的严格语法规范会被HTML 5弃用,这种担心后来证明是多余的,HTML 5既支持松散语法,也支持XHTML1般的严格语 法。
<!DOCTYPE>
文档类型通常会出现在文档的第一行,它不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。
如果文档头的文档类型没有书写或者书写错误,浏览器都会采用兼容模式来解析。兼容模式会 兼容一些老的浏览器的标准。quirks mode(怪异模式)
在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD,因为 HTML 4.01 基于 SGML。DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。
HTML5 不基于 SGML,所以不需要引用 DTD。
常用的 DOCTYPE 声明:
HTML 5:
<!DOCTYPE html>
HTML 4.01 Strict:
该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
HTML 4.01 Transitional
该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset
该 DTD 等同于 HTML 4.01 Transitional,但允许框架集内容。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0 Strict
该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。必须以格式正确的 XML 来编写标记。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Transitional
该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。必须以格式正确的 XML 来编写标记。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset
该 DTD 等同于 XHTML 1.0 Transitional,但允许框架集内容。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML 1.1
该 DTD 等同于 XHTML 1.0 Strict,但允许添加模型(例如提供对东亚语系的 ruby 支持)。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
下面的表格列出了所有的 HTML5/HTML 4.01/XHTML 元素,以及它们会出现在什么文档类型 (DTD) 中:
标签 | HTML5 | HTML 4.01 / XHTML 1.0 | XHTML 1.1 | ||
---|---|---|---|---|---|
Transitional | Strict | Frameset | |||
<a> | Yes | Yes | Yes | Yes | Yes |
<abbr> | Yes | Yes | Yes | Yes | Yes |
<acronym> | No | Yes | Yes | Yes | Yes |
<address> | Yes | Yes | Yes | Yes | Yes |
<applet> | No | Yes | No | Yes | No |
<area> | Yes | Yes | Yes | Yes | No |
<article> | Yes | No | No | No | No |
<aside> | Yes | No | No | No | No |
<audio> | Yes | No | No | No | No |
<b> | Yes | Yes | Yes | Yes | Yes |
<base> | Yes | Yes | Yes | Yes | Yes |
<basefont> | No | Yes | No | Yes | No |
<bdi> | Yes | No | No | No | No |
<bdo> | Yes | Yes | Yes | Yes | No |
<big> | No | Yes | Yes | Yes | Yes |
<blockquote> | Yes | Yes | Yes | Yes | Yes |
<body> | Yes | Yes | Yes | Yes | Yes |
<br> | Yes | Yes | Yes | Yes | Yes |
<button> | Yes | Yes | Yes | Yes | Yes |
<canvas> | Yes | No | No | No | No |
<caption> | Yes | Yes | Yes | Yes | Yes |
<center> | No | Yes | No | Yes | No |
<cite> | Yes | Yes | Yes | Yes | Yes |
<code> | Yes | Yes | Yes | Yes | Yes |
<col> | Yes | Yes | Yes | Yes | No |
<colgroup> | Yes | Yes | Yes | Yes | No |
<command> | Yes | No | No | No | No |
<datalist> | Yes | No | No | No | No |
<dd> | Yes | Yes | Yes | Yes | Yes |
<del> | Yes | Yes | Yes | Yes | No |
<details> | Yes | No | No | No | No |
<dfn> | Yes | Yes | Yes | Yes | Yes |
<dir> | No | Yes | No | Yes | No |
<div> | Yes | Yes | Yes | Yes | Yes |
<dl> | Yes | Yes | Yes | Yes | Yes |
<dt> | Yes | Yes | Yes | Yes | Yes |
<em> | Yes | Yes | Yes | Yes | Yes |
<embed> | Yes | No | No | No | No |
<fieldset> | Yes | Yes | Yes | Yes | Yes |
<figcaption> | Yes | No | No | No | No |
<figure> | Yes | No | No | No | No |
<font> | No | Yes | No | Yes | No |
<footer> | Yes | No | No | No | No |
<form> | Yes | Yes | Yes | Yes | Yes |
<frame> | No | No | No | Yes | No |
<frameset> | No | No | No | Yes | No |
<head> | Yes | Yes | Yes | Yes | Yes |
<header> | Yes | No | No | No | No |
<h1> to <h6> | Yes | Yes | Yes | Yes | Yes |
<hr> | Yes | Yes | Yes | Yes | Yes |
<html> | Yes | Yes | Yes | Yes | Yes |
<i> | Yes | Yes | Yes | Yes | Yes |
<iframe> | Yes | Yes | No | Yes | No |
<img> | Yes | Yes | Yes | Yes | Yes |
<input> | Yes | Yes | Yes | Yes | Yes |
<ins> | Yes | Yes | Yes | Yes | No |
<keygen> | Yes | No | No | No | No |
<kbd> | Yes | Yes | Yes | Yes | Yes |
<label> | Yes | Yes | Yes | Yes | Yes |
<legend> | Yes | Yes | Yes | Yes | Yes |
<li> | Yes | Yes | Yes | Yes | Yes |
<link> | Yes | Yes | Yes | Yes | Yes |
<map> | Yes | Yes | Yes | Yes | No |
<mark> | Yes | No | No | No | No |
<menu> | Yes | Yes | No | Yes | No |
<meta> | Yes | Yes | Yes | Yes | Yes |
<meter> | Yes | No | No | No | No |
<nav> | Yes | No | No | No | No |
<noframes> | No | Yes | No | Yes | No |
<noscript> | Yes | Yes | Yes | Yes | Yes |
<object> | Yes | Yes | Yes | Yes | Yes |
<ol> | Yes | Yes | Yes | Yes | Yes |
<optgroup> | Yes | Yes | Yes | Yes | Yes |
<option> | Yes | Yes | Yes | Yes | Yes |
<output> | Yes | No | No | No | No |
<p> | Yes | Yes | Yes | Yes | Yes |
<param> | Yes | Yes | Yes | Yes | Yes |
<pre> | Yes | Yes | Yes | Yes | Yes |
<progress> | Yes | No | No | No | No |
<q> | Yes | Yes | Yes | Yes | Yes |
<rp> | Yes | No | No | No | No |
<rt> | Yes | No | No | No | No |
<ruby> | Yes | No | No | No | No |
<s> | Yes | Yes | No | Yes | No |
<samp> | Yes | Yes | Yes | Yes | Yes |
<script> | Yes | Yes | Yes | Yes | Yes |
<section> | Yes | No | No | No | No |
<select> | Yes | Yes | Yes | Yes | Yes |
<small> | Yes | Yes | Yes | Yes | Yes |
<source> | Yes | No | No | No | No |
<span> | Yes | Yes | Yes | Yes | Yes |
<strike> | No | Yes | No | Yes | No |
<strong> | Yes | Yes | Yes | Yes | Yes |
<style> | Yes | Yes | Yes | Yes | Yes |
<sub> | Yes | Yes | Yes | Yes | Yes |
<summary> | Yes | No | No | No | No |
<sup> | Yes | Yes | Yes | Yes | Yes |
<table> | Yes | Yes | Yes | Yes | Yes |
<tbody> | Yes | Yes | Yes | Yes | No |
<td> | Yes | Yes | Yes | Yes | Yes |
<textarea> | Yes | Yes | Yes | Yes | Yes |
<tfoot> | Yes | Yes | Yes | Yes | No |
<th> | Yes | Yes | Yes | Yes | Yes |
<thead> | Yes | Yes | Yes | Yes | No |
<time> | Yes | No | No | No | No |
<title> | Yes | Yes | Yes | Yes | Yes |
<tr> | Yes | Yes | Yes | Yes | Yes |
<track> | Yes | No | No | No | No |
<tt> | No | Yes | Yes | Yes | Yes |
<u> | No | Yes | No | Yes | No |
<ul> | Yes | Yes | Yes | Yes | Yes |
<var> | Yes | Yes | Yes | Yes | Yes |
<video> | Yes | No | No | No | No |
<wbr> | Yes | No | No | No | No |