DOCTYPE 标签详解

引言

  • DOCTYPE标签存在于html文档头部,我以前没有注意他,因为大多数情况下,我编写的都是html5文档,区区一行<!DOCTYPE html>确实没有引起我的重视;
  • DOCTYPE标签规定了文档类型、文档模式等等,对于浏览器正确解析html文档具有重要作用;
  • 本文分析了DOCTYPE标签的作用和常见形式;

文档类型

  • XML、HTML、XHTML、HTML5的关系如下:
    • SGML(标准通用标记语言)是一个标准,告诉我们怎么去指定文档标记,他是只描述文档标记应该是怎么样的元语言;
    • HTML是被用SGML描述的标记语言;
    • HTML不够灵活,因此W3C开发了XML,XML用于对信息进行自我描述,XML支持自定义标签;
    • XHTML是在HTML和XML之间的一种语言,是为了适应XML而重新改造的HTML;
    • XHTML比HTML更加严格;
    • HTML5不是基于SGML的,所以不需要引用 DTD;
    • HTML5是最新的HTML标准,他的主要目标是提供所有内容而不需要任何的像flash,silverlight等的额外插件,这些内容来自动画,视频,富GUI等;
    • DHTML是指Dynamic HTML,动态的HTML,DHTML意味着HTML、CSS和 JavaScript的组合;
  • 为什么说XHTML比HTML更加严格:
    • 在HTML中标签可以不严格嵌套、有时可省略结束标签、标签的大小写不作区分、属性值有时可以不加引号,这些在XHTML中均不允许;
  • 几者的关系可用下图表示:

html-doctype

DOCTYPE标签的作用

  • 作用一:告诉浏览器这个文档是HTML、HTML5还是XHTML,即区分文档定义类型(DTD);
  • 作用二:告诉浏览器这个文档是过渡的(Transitional,要求非常宽松的DTD)还是严格的(Strict,要求严格的DTD)还是框架的(Frameset,专门针对框架页面设计使用的DTD);
  • 需要注意:
    • 如果浏览器不能识别一个形式错误的doctype,就会强制进入Quirks模式;
    • <!DOCTYPE>声明位于文档中的最前面的位置,处于标签之前;
    • <!DOCTYPE>没有结束标签;
    • <!DOCTYPE> 声明对大小写不敏感;

DOCTYPE基本语法

  • 语法如下:
1
HTML 顶级元素 可用性 "注册//组织//类型 标签//定义 语言""URL"
  • 选项说明:
    • 顶级元素:指定DTD中声明的顶级元素类型,这与声明的SGML文档类型相对应。
    • 可用性:指定正式公开标识符(FPI)是可公开访问的对象还是系统资源。 PUBLIC为默认值,表示可公开访问的对象。 SYSTEM指系统资源,如本地文件或URL。
    • 注册:指定组织是否由国际标准化组织(ISO)注册。 + 为默认值,表示组织名称已注册。 - 表示组织名称未注册。
    • 组织:指定表明负责由 !DOCTYPE 声明引用的DTD的创建和维护的团体或组织的名称,即 OwnderID。
    • 类型:指定公开文本类,即所引用的对象类型。 DTD为默认值。
    • 标签:指定公开文本描述,即对所引用的公开文本的唯一描述性名称。后面可附带版本号。 HTML为默认值。
    • 定义:指定文档类型定义。 Frameset为框架集文档。,Strict排除所有W3C专家希望逐步淘汰的代表性属性和元素,因为样式表已经很完善了,Transitional包含除frameSet元素的全部内容。
    • 语言:指定公开文本语言,即用于创建所引用对象的自然语言编码系统。该语言定义已编写为 ISO 639 语言代码(大写两个字母)。 EN为默认值,表示英语。
    • URL:指定所引用对象的位置。

不同模式的例子

  • 过渡的(Transitional):要求非常宽松的DTD(一般推荐使用这种)
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • 严格的(Strict):要求严格的DTD
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  • 框架的(Frameset):专门针对框架页面设计使用的DTD
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

常用的DOCTYPE声明

  • HTML5
1
<!DOCTYPE html>
  • HTML 4.01 Strict
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • HTML 4.01 Transitional
1
2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

  • HTML 4.01 Frameset
1
2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

  • XHTML 1.0 Strict
1
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

  • XHTML 1.0 Transitional
1
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  • XHTML 1.0 Frameset
1
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

  • XHTML 1.1
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
您的支持是对我最大的鼓励!