我不知道的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解释

<!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> 的作用


  1. 你可以轻松的写下这个doctype,而不用担心会写错;
  2. 你大概省下了105字节字符,对于一个每日PV达到千万级的站点,它可以省下相当客观流量;
  3. 它是向后兼容的,是的,html5的doctype就是这样写的,并且现代浏览器都认识它;
  4. !doctype申明为标准模式;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,979评论 1 7
  • 格式后期处理。 Jeremy Keith在 Fronteers 2010 上的主题演讲 今天我想跟大家谈一谈HTM...
    LordZhou阅读 1,158评论 0 17
  • 简介网络浏览器很可能是使用最广的软件。在这篇入门文章中,我将会介绍它们的幕后工作原理。我们会了解到,从您在地址栏输...
    wengjq阅读 2,101评论 2 15
  • 序章 谈谈“浏览器兼容性”的问题?很多前端的面试或笔试中,都有比较笼统的“说说你所知道的各浏览器存在的兼容问题”,...
    麻辣小隔壁阅读 3,098评论 1 57
  • 补完课的我们,就像脱缰的野马一样,奔驰在自由的田野。 整日无所事事却未感到半分轻松。作业就像堆起来的城堡那么高。没...
    野草莓少女的信箱阅读 114评论 1 0