DOCTYPE 几种常用协议

  DOCTYPE的目的是告诉标准通用标记语言解析器要使用什么样的文档类型定义(DTD)来解析文档。
  DOCTYPE必须声明在第一行,浏览器本身有三种模式,一种是怪癖模型(Quirks)一种是标准模型(Standards)还有个过度模型(Almost Standards)。
  Standards 遵循浏览器所支持的最新的css解析标准。Quirks会让浏览器以旧的模式解析css。Almost Standards让浏览器尝试以新标准方式来处理针对旧标准实现的代码。
  由于在html5 之前,html 都是基于SGML 来实现的。而SGML 中使用一种叫DTD(Document Type Definition) 的文件来定义不同SGML (https://zh.wikipedia.org/wiki/SGML)版本的语法。
  标准的DOCTYPE 语法如下,参考自:DOCTYPE作用及用法详解
  
语法:<!DOCTYPE 根元素 可用性 "注册//组织//类型 标签 定义//语言" "URL">

常见的几种DOCTYPE

HTML 4.01 strict doctype

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

HTML 4.01 strict doctype 适用于验证文档是否符合 HTML 4.01 规范。该规范有如下特点:

 The HTML 4.01 strict doctype validates against the HTML 4.01 spec, although it doesn't allow any presentational markup or deprecated elements (such as <font>elements) or framesets to be used. It validates loose HTML style markup, such as minimized attributes and non-quoted attributes (eg required, rather than required="required").

 

大致翻译如下:

  • 只支持结构化的元素标记
  • 不支持过时的元素标记,比如<font>frameframeset
  • 支持灵活的html 元素写法,比如属性的值不加引号、或缩写属性(比如支持requiredrequired="required")、标签名大小写不敏感;

HTML 4.01 transitional doctype

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

 HTML 4.01 transitional doctype 的文档规范与strict 模式几乎一样。差别一些css 的渲染上与strict 模式有所不同。

HTML 4.01 frameset doctype

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

鉴于使用这两个元素会产生很多问题,所以,非常不建议使用这个doctype。如果你真的想使用,建议再想其他方法。

 

HTML5 的DOCTYPE

<!DOCTYPE html>

  HTML5 已经不再基于SGML 来实现了,所以,理论上HTML5 不需要再声明DOCTYPE,而且在SGML 中也没有一种DTD 时适用HTML5 的实现的.

  但是如果不声明doctype,浏览器会默认用Quirks来解析。所以html5的doctype 只有一行。

posted @ 2019-03-27 15:33  pikeman  阅读(135)  评论(0)    收藏  举报