什么是DTD?
SGML引入了文档类型的概念,并由此引入了文档类型定义(Document Type Definition: DTD)。文档类型定义 (DTD) 实际上就是一套关于标记符的语法规则,它包含了对元素的定义,指出可以在文档中使用哪些标记符, 它们应该按什么次序出现, 哪些标记符可以出现于其它标记符中, 哪些标记符有属性, 等等。属于某种类型的文档,可以通过一个应用程序来解析,检查是否所有的元素都被定义以及元素出现的次序是否正确。属于同一种类别的文档可以按照一致的方式来处理。
什么是DOCTYPE?
document type文档类型的缩写,用来指定XHTML和HTML版本,告知浏览器用什么标准解析这个文档。
DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现
DOCTYPE语法?
语法格式
<!DOCTYPE 顶级元素 可用性 "注册//组织//类型 标签 版本 类型定义//语言" "url">
格式详解
- ! 表示这不是一个html元素
- 顶级元素:指定 DTD 中声明的顶级元素类型
- 可用性:指定正式公开标识符(FPI)是可公开访问的对象还是系统资源。默认PUBLIC,可公开访问的对象。SYSTEM系统资源,如本地文件或URL。
- 注册:指定组织是否由国际标准化组织(ISO)注册。 + (默认),组织名称已注册。 - 未注册。IETF和(W3C)是非注册的ISO组织。
- 组织:指定表明负责由 !DOCTYPE 声明引用的DTD的创建和维护的团体或组织的名称,如W3C。
- 类型:指定公开文本类,即所引用的对象类型。默认DTD。
- 标签:指定公开文本描述,即对所引用的公开文本的唯一描述性名称。后面可附带版本号。默认HTML。
- 定义:指定文档类型定义
- Frameset 一种专门针对框架页面所使用的dtd,当页面中含有框架元素时,就要采用这种dtd。
- Strict 一种要求不很严格的,允许在html中使用html 4.01的标识,排除所有W3C专家希望逐步淘汰的代表性属性和元素。
- Transitional 包含除frameSet元素的全部内容。一种要求不很严格的,允许在html中使用html 4.01的标识。
- 语言:指定公开文本语言,即用于创建所引用对象的自然语言编码系统。该语言定义已编写为 ISO 639语言代码(大写两个字母)。默认EN英语。
- URL:指定所引用对象的位置
例子
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
//doctype首先根据-//W3C//DTD HTML 4.01 Transitional//EN查找相应引用对象,找不到则使用后面的url(这是永久存在的)
HTML5特殊性
HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
标准模式vs怪异模式?
模式可以通过document.compatMode获得(CSS1Compat标准模式,BackCompat怪异、兼容模式)
怪异模式quirks mode
让IE的行为与(包含非标准特性的)IE5相同。这是一种比较宽松的向后兼容的模式。混杂模式通常模拟老式浏览器的行为,以防止老站点无法工作。PS:浏览器按照自己的方式解析代码
标准模式standards mode
标准模式的排版和JS运作模式都是以该浏览器支持的最高标准运行 PS:浏览器按照 W3C 标准解析代码
准标准模式almost standards mode
这种模式下的浏览器特性有很多都是符合标准的,不标准的地方主要体现在处理图片间隙的时候(在表格中使用图片时问题最明显)。
超级标准模式
IE8引入的一种新的文档模式,超级文档模式可以让IE以其所有版本中最符合标准的方式来解释网页内容。
如何触发以上模式详见https://hsivonen.fi/doctype/#handling