刚开始学习html时,我们通常会忽略html文档中的一句声明,这句声明放在html文档的第一行。我记得开始学的时候,都是从<html>标签开始写起,而且发现这样写并没有什么问题。后来发现很多前端面试时都喜欢问关于这个声明的问题,而且通过浏览器调试工具查看互联网上的网站时,几乎所有的html文档的第一行都写着这个声明。那究竟这个声明是干什么用的?为什么没声明的时候好像也没什么问题?

什么是DOCTYPE

DOCTYPE就是文档类型的意思,可以想到在文档开头写声明,就是为了告诉浏览器这个文档是什么类型的,需要采用什么样的规则来解释它。如果不声明的话,那么浏览器就会按照自己默认的方式进行解释,目前浏览器的版本各式各样,所以就算同一个html文档,展示出来也不尽相同。那么多浏览器都按照自己的方式来解析,所以肯定需要一个统一标准,而这正是W3C所做的工作。在开头声明DOCTYPE就是让浏览器采用指定的W3C规范来解释html文档。

DOCTYPE声明方式

随着W3C对于html规范的不断修正,也出现了不同的DOCTYPE的声明。以前的声明中通常都包含了一个DTD(文档类型定义)引用,是一套关于标记符的语法规则,在使用XML的时候经常能看到。HTML是一种基于SGML的标记语言,需要引用具体的DTD来规定标记语言的规则,浏览器才能正确解释。但是最近流行的HTML5不基于SGML,所以不需要引用DTD。常用的DOCTYPE声明有以下几种方式:

  • HTML5:

    1
    <!DOCTYPE html>
  • HTML 4.01 Strict(严格的,不能包括展示性和弃用的元素,不允许用框架集Framesets):

    1
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • HTML 4.01 Transitional(过渡的,可以使用展示性和弃用的元素,不允许使用框架集Framesets):

    1
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  • HTML 4.01 Frameset(框架的,允许使用框架集Framesets)

    1
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
  • XHTML1.0跟HTML4.01类似,也包括以上三种,但是XHTML是一种更严谨和纯净的HTML版本。

DOCTYPE的选择

看着上面一大堆的声明方式,还是HTML5的声明最简洁。其实现在大多数网站都采用这种声明方式,而且这样的声明现在大部分浏览器都兼容。以前的一些的网站使用过渡型的声明比较多,因为对于Web开发者来说,使用严格的声明往往需要对其规范有深入了解,而采用过渡型是最保障的一种方式,而框架的声明一般在需要使用框架集的时候才会使用。就目前开发来讲,建议采用HTML5的声明方式,简洁高效,兼容性也好。

总结

DOCTYPE的声明还是很重要的,虽然简单一句话,但是浏览器看到的却是很关键的一句话。声明的不同决定了浏览器的渲染模式,包括标准模式和怪异模式,可能影响到css和JavaScript的解析。所以在写html文档时,一定记得添加声明。