首先我们来了解一下什么是文档声明:
文档声明就是文档告诉游览器该以什么样的标准去解析它。游览器可以解析的文档可不止html,还有xhtml,xml...当然在这里我们并不需要知道xhtml、xml是什么以及和html的区别,我们只需要知道,游览器可以解析的文档不止html ,所以文档声明是必须的,为的就是保证游览器能够正确解析文档类型。
然后我们再来了解下html(Hyper Text Markup Language)<超文本标记语言>:
所谓的超文本就是超级文本,或者超越文本的意思,因为它可以呈现图片,音乐甚至是音频,普通的文本当然就是只能呈现文字,标记你可以理解为就是标签<a><div>等,在一个文档里通过标签(标记)去对文档进行分类整理。至于语言,当然就是交流的工具,超文本标记语言就是供人和游览器交流的语言。
xhml,xml 各是什么语言我就不做赘述了,总之游览器都能识别他们,但是他们都有各自的文档规则,甚至同种语言不同版本的文档规则也有差别,下面给出部分文档的声明:
1.XHTML1.1
语法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2.XHTML 1.0 Frameset
语法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
3.XHTML 1.0 Transitional
语法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4.XHTML 1.0 Strict
语法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5.HTML 4.01 Frameset
语法:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
6.HTML 4.01 Strict
语法:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
其中 Frameset(框架) strict(严格) transitional (过渡),在这里我们只需要知道是用来给文档划分使用条件的,比如使用strict的类型声明的文档,游览器解析起来就会更加严格
我们可以看到<!doctype html 后面跟了一大串屎一样的的尾巴,这个尾巴就是DTD.
那么什么是DTD?
其实xhtml html(html5 之前),还有xml 都是基于一个标准或语言制定的,这个标准就是sgml(standard gernerate makeup laugue)<标准通用标记语言>,你可以把这个语言当做xhtml html(h5 以前)xml的母亲,而sgml 有一个DTD(document type definition) <文档类型申明>用来区分这些语言,游览器对于每一个DTD 都有一整套制定好的规则,用来帮助解析文档。。
最后到了我们的html5了。html5则一反常态直接脱离sgml ,自己形成了一套标准。这套标准目前已经被几乎所有游览器收录,而html5的文档声明很简单:只有<! doctype html>
那么对于那些没有收录html5标准的游览器,当遇到html5的声明会如何处理呢?
其实几乎所有版本的游览器都有处理文档头不正确的方法,对于识别不了的文档头则当做不正确处理,针对缺失的不正确的文档头游览器都有自己的默认兼容模式去解析文档