首先我们来了解一下什么是文档声明

文档声明就是文档告诉游览器该以什么样的标准去解析它。游览器可以解析的文档可不止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的声明会如何处理呢?

其实几乎所有版本的游览器都有处理文档头不正确的方法,对于识别不了的文档头则当做不正确处理,针对缺失的不正确的文档头游览器都有自己的默认兼容模式去解析文档

最新文章

  1. 期望+DP ZOJ 3929 Deque and Balls
  2. ref游标(动态游标)
  3. Java最常用的变量定义汇总
  4. Perforce 使用笔记
  5. nuget使用
  6. Asp.net MVC 自定义路由在IIS7以上,提示Page Not Found 解决方法
  7. gcd 最大公约数 模版!
  8. 【转】使用Beaglebone Black的I2C (二)——使用C语言和i2c-dev驱动
  9. Android开发学习笔记:浅谈WebView
  10. select 1 from table where的作用?
  11. Service与Activity与交流AIDL
  12. iOS白名单设置
  13. iOS 滚动视图的复用问题解决方案
  14. Fiddler_抓包应用_01
  15. Gradle&#39;s dependency cache may be corrupt
  16. 关于redis实现分布式锁
  17. The Salt Master has cached the public key报错解决办法
  18. shiro中INI配置
  19. gj5 自定义序列类
  20. mq使用场景、不丢不重、时序性

热门文章

  1. 切换Fragment时实现数据保持
  2. 使用Babel和ES7创建JavaScript模块
  3. leetCode题解之根据字符出现的频率排序
  4. [C#] Microsoft .Net框架SerialPort类的用法与示例
  5. .net网站转到出错页是如何实现的
  6. 给UIScrollView添加category实现UIScrollView的轮播效果
  7. linux在当前目录下根据文件名查找文件
  8. Oracle Order By 排序 非主键时 紊乱 重复 问题
  9. SparkSql实现Mysql到hive的数据流动
  10. 铁乐学python_day09_作业