【一天一个小知识】—— Doctype的作用?严格模式与混杂模式如何区分?它们有何意义?

1,607 阅读4分钟

一. Doctype定义

一种通用标记语言的文档类型声明,它主要就是告诉标准通用标记语言解析器应该使用什么样的文档类型定义(DTD)来解析文档。  (参考百度百科) ( Doctype放在html文件的第一行,但它不是一个标签,需要写在html前面)

你也可以选择简单记忆:

<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器的解析器, 用什么文档类型 规范来解析这个文档。

二.DTD定义

Document Type Definition(文档类型定义)的缩写。

通过定义元素、属性、标记以及文档中的实体及其相互关系等规则来保证XML文档的合法性 。

你也可以选择简单记忆:

Document Type Definition定义了XML或者HTML的特定版本中允许有什么,不允许有什么,在渲染解析页面的时候浏览器会根据这些规则检查页面的有效性并且采取相应的措施。

DTD类型

(1)严格(strict)型:结构中不能出现格式或表现的内容,以及弃用的元素(比如 font)。

比如Html4.01 和XHTML1.0的严格型

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

(2)过渡(transitional)型:结构中可以出现格式标记或表现(CSS)的内容 ,仍然可以使用废弃的元素。

比如Html4.01 和XHTML1.0的过渡性

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

(3)框架(frameset)型:可以使用框架技术,实现多个网页在一个浏览器窗口中呈现 。

比如Html4.01 和XHTML1.0的框架型。

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

以上是DTD的三种类型,我们平时在使用HTML5的时候,在开头只写了这一句话,浏览器也能解析,原因是:HTML5不基于 SGML,所以不需要引用DTD,但是需要DOCTYPE来规范浏览器的行为,让浏览器按照W3C的标准解析渲染页面。 而HTML4.01和XHTML1.0基于SGML,所以需要引用DTD,才能告诉浏览器使用哪种DTD来解析文档。

三.严格模式与混杂模式

严格模式:又称标准模式,是指浏览器按照 W3C 标准解析代码。

混杂模式:又称怪异模式或兼容模式,是指浏览器用自己的方式解析代码。

如何区分:浏览器解析时到底使用严格模式还是混杂模式,与网页中的 DTD 直接相关。

如果文档包含严格的 DOCTYPE ,那么它一般以严格模式呈现。(严格 DTD ——严格模式) 

包含过渡 DTD 和 URI 的 DOCTYPE ,也以严格模式呈现,但有过渡 DTD 而没有 URI (统一资源标识符,就是声明最后的地址)会导致页面以混杂模式呈现。(有 URI 的过渡 DTD ——严格模式;没有 URI 的过渡 DTD ——混杂模式) 

DOCTYPE 不存在或形式不正确会导致文档以混杂模式呈现。(DTD不存在或者格式不正确——混杂模式)

HTML5 没有 DTD ,因此也就没有严格模式与混杂模式的区别,HTML5 有相对宽松的语法,实现时,已经尽可能大的实现了向后兼容。( HTML5 没有严格和混杂之分)

意义:严格模式与混杂模式存在的意义与其来源密切相关,如果说只存在严格模式,那么许多旧网站必然受到影响,如果只存在混杂模式,那么会回到当时浏览器大战时的混乱,每个浏览器都有自己的解析模式。

标准模式与怪异模式的常见区别

在怪异模式下,盒模型为IE模型 ;严格模式下为W3C标准的盒模型

总结

  • <!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器的解析器, 用什么文档类型 规范来解析这个文档。

  • Document Type Definition定义了XML或者HTML的特定版本中允许有什么,不允许有什么,在渲染解析页面的时候浏览器会根据这些规则检查页面的有效性并且采取相应的措施。

  • DTD分为三种类型分别是严格型,过渡型,框架型。

  • 浏览器解析文档的时有两种类型分别为严格模式和混杂模式,这两种模式的区分又与DTD有密切联系.(严格 DTD ——严格模式),(有 URI 的过渡 DTD ——严格模式;没有 URI 的过渡 DTD ——混杂模式) ,(DTD不存在或者格式不正确——混杂模式),( HTML5 没有严格和混杂之分)

  • 严格模式与混杂模式存在的意义:如果说只存在严格模式,那么许多旧网站必然受到影响,如果只存在混杂模式,那么会回到当时浏览器大战时的混乱,每个浏览器都有自己的解析模式。