最熟悉的往往最容易被忽略 ——DOCTYPE
关于DTD
wiki解释
A document type declaration, or DOCTYPE, is an instruction that associates a particular SGML or XML document (for example, a webpage) with a document type definition (DTD) (for example, the formal definition of a particular version of HTML1.0 - HTML 4.0).[1] In the serialized form of the document, it manifests as a short string of markup that conforms to a particular syntax.
这段话的大致意思是 文档类型声明(DTD)是用特定的文件类型相关联的指令 (如特定版本的 HTML1.0-html 4.0 的正式定义) 定义sgml 或 xml 文档(如网页)。在文档的序列化中,它表现为标记的短字符串,符合特定语法。
w3c 解释
A DTD is a Document Type Definition.
A DTD defines the structure and the legal elements and attributes of an XML document.
简单明了,DTD是文档类型的申明(这样描述不太全面,我觉的还应该包含语法规则在里面),DTD定义了XML文档的结构与合法元素以及XML属性。
MDN解释
<!DOCTYPE> 通知浏览器您用来编写文档 的HTML(或XML)版本。Doctype是一个声明,而不是标签 ; 您也可以将其称为“文档类型声明”,或简称为“DTD”。
DTD语法结构
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。允许框架集(Framesets)。
HTML 5
<!DOCTYPE html>
一般的结构模式为:
<!DOCTYPE root-element PUBLIC "FPI" ["URI"] [ <!-- internal subset declarations -->]>
or
<!DOCTYPE root-element SYSTEM "URI" [ <!-- internal subset declarations -->]>
公共和系统的关键字,代表它是什么样的文档类型定义的。如果它是公共的,那么这个关键字后面的“公共标识”称为FPI(正式公共标识)是受限制的,如果它是系统中,只有一个系统标识符必须给出。它指出,XML解析器必须找到系统中的特定方式的文档类型定义
HTML5的DOCTYPE声明,是非常短的,因为它缺乏一个URL或FPI(正式公共标识)的形式的文档类型定义(DTD)的引用。在HTML5中,正规的语法是大写字母定义,但即使两个小写字母和小写大写混合物是也被视为有效。此外HTML5不是基于SGML,使用DOCTYPE只为模式选择。该声明是在所有主流浏览器的支持。
XHTML与HTML类似,点击查看
浏览器模式
为了能够很好地显示满足标准的页面,又能最大程度兼容不合法的HTML。 浏览器厂商一般会提供两种浏览器模式:
标准模式(standards mode):浏览器根据标准规约来渲染页面。
混杂模式(quirks mode):浏览器采用更加宽松的、向后兼容的方式来渲染页面。
混杂模式下,浏览器会模仿旧浏览器的行为,比如IE6,在此基础上兼容新的标准特性。 混杂模式又称兼容模式、怪异模式等。
DOCTYPE切换
浏览器根据不同的DOCTYPE选择不同的渲染方法就叫做DOCTYPE切换。 其实DOCTYPE切换就是用来识别和兼容旧网页的。
以下情况浏览器会采用标准模式渲染:
- 给出了完整的DOCTYPE声明
- DOCTYPE声明了Strict DTD
- DOCTYPE声明了Transitional DTD和URI
以下情况浏览器会采用混杂模式渲染:
- DOCTYPE声明了Transitional DTD但未给出URI
- DOCTYPE声明不合法
- 未给出DOCTYPE声明
tip:如果你是使用最新标准编写的页面但未给出DOCTYPE声明,这时就可能会出现一些怪异的行为。 例如盒模型不正确、窗口的size不正确等问题。所以,尽量为你网站的所有页面都给出合法的DOCTYPE声明
<!doctype html> 的作用
- 你可以轻松的写下这个doctype,而不用担心会写错;
- 你大概省下了105字节字符,对于一个每日PV达到千万级的站点,它可以省下相当客观流量;
- 它是向后兼容的,是的,html5的doctype就是这样写的,并且现代浏览器都认识它;
- !doctype申明为标准模式;