【css-01】HTML文件里开头的DOCTYPE有什么作用?

小课堂【武汉-289期】

分享人:熊凡

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

DOCTYPE是document type(文档类型)的简写,在web设计中用来声明文档类型。

在所有 HTML 文档中规定 DOCTYPE 是非常重要的,这样浏览器就能了解预期的文档类型, 告诉浏览器要通过哪一种规范(DTD)解析文档(比如HTML或XHTML规范)。

DOCTYPE声明必须在 HTML 文档的第一行,它不属于 HTML 标签; 它是一条指令,告诉浏览器编写页面所用的标记的版本。

doctype会影响代码验证,并决定了浏览器最终如何显示你的Web文档。

2.知识剖析

doctyp与DTD与SGML

HTML 4.01 中的 doctype 需要对 DTD 进行引用,因为 HTML 4.01 基于 SGML。

DTD:(Document Type Definition)文档类型定义是一种特殊文档,它规定、约束符合标准通用标示语言(SGML)或SGML子集可扩展标示语言(XML)规则的定义和陈述。

SGML:标准通用标记语言,是一种定义电子文档结构和描述其内容的国际标准语言; 通用标言为语法置标提供了异常强大的工具,同时具有极好的扩展性,因此在数据分类和索引中非常有用; 是所有电子文档标记语言的起源,早在万维网发明之前“通用标言”就已存在。

Doctype可声明三种DTD类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。

超文本严格文档类型定义HTML Strict DTD 不允许使用表现性、废弃元素(如font)以及frameset。声明:

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

超文本过渡文档类型定义HTML Transitional DTD 允许使用表现性、废弃元素(如font),不允许使用frameset。声明:

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

超文本框架集文档类型定义HTML Strict DTD 允许表现性元素,废气元素以及frameset。声明:

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

浏览器的呈现模式

现代的浏览器需要不同模式, 既要呈现久远的HTML界面, 不至于界面结构混乱不堪,也需要呈现W3C标准的界面:

标准模式(strict)---是指浏览器按照 W3C 标准解析代码,呈现页面

怪异模式---是指浏览器用自己的方式解析代码,即使用一种比较宽松的向后兼容的方式来显示页面

DOCTYPE切换

浏览器根据不同的DOCTYPE选择不同的渲染方法就叫做DOCTYPE切换。 其实DOCTYPE切换就是用来识别和兼容旧网页的。

以下情况浏览器会采用标准模式渲染:

给出了完整的DOCTYPE声明

DOCTYPE声明了Strict DTD

DOCTYPE声明了Transitional DTD和URI

以下情况浏览器会采用怪异模式渲染:

DOCTYPE声明了Transitional DTD但未给出URI

DOCTYPE声明不合法

未给出DOCTYPE声明

现今情况

HTML5协议下 统一写 < !DOCTYPE html>。

HTML 5 不基于 SGML,因此不需要对 DTD 进行引用,也就没有严格模式与怪异模式的区别,但是需要 doctype 来规范浏览器的行为(html 5简化了这种声明,意在告诉浏览器使用统一的标准即可);HTML5 有相对宽松的语法,实现时,已经尽可能大的实现了向后兼容。( HTML5 没有严格和混杂之分)

3.常见问题

如果不声明doctype会发生什么?

4.解决办法

如果你是使用最新标准编写的页面但未给出DOCTYPE声明,浏览器会采用怪异模式渲染,这时就可能会出现一些怪异的行为。 例如盒模型不正确、窗口的size不正确等问题。所以,尽量为你网站的所有页面都给出合法的DOCTYPE声明。

5、编码实战

6、扩展思考

有没有其他进入怪异模式的方法?

除了不写DOCTYPE声明外,最常见的就是在DOCTYPE声明前面出现了这些内容:普通文本、HTML 标签、HTML 注释、XML 声明、IE条件注释。

7、参考文献:

参考一: 为何说 HTML5「no longer based on SGML」?

参考二: HTML_严格模式与混杂模式

参考三: 你知道什么是doctype,什么是文档模式吗

参考四: 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义

8、更多讨论

谢谢大家

制作人:熊凡