我不知道的DOCTYPE

最熟悉的往往最容易被忽略 ——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解释

通知浏览器您用来编写文档 的HTML(或XML)版本。Doctype是一个声明,而不是标签 ; 您也可以将其称为“文档类型声明”,或简称为“DTD”。

DTD语法结构


HTML 4.01 Strict

该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。

   

HTML 4.01 Transitional

该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。

    

HTML 4.01 Frameset

    

该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。允许框架集(Framesets)。

HTML 5

   

一般的结构模式为:

   ]>

or

   ]>

公共和系统的关键字,代表它是什么样的文档类型定义的。如果它是公共的,那么这个关键字后面的“公共标识”称为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声明

的作用


  1. 你可以轻松的写下这个doctype,而不用担心会写错;
  2. 你大概省下了105字节字符,对于一个每日PV达到千万级的站点,它可以省下相当客观流量;
  3. 它是向后兼容的,是的,html5的doctype就是这样写的,并且现代浏览器都认识它;
  4. !doctype申明为标准模式;

你可能感兴趣的:(我不知道的DOCTYPE)