工作了这么久不知道DOCTYPE的作用是什么,更不知道不同声明方式之间的差异,水平小菜凭这点一下就暴露了,惭愧惭愧!查阅文档整理如下:

1. 标准模式与混杂模式

由于历史发展的原因,不同浏览器对同一个页面的解析渲染是有差异的,没有统一的标准。1994年10月,万维网联盟(W3C)由 Tim Berners Lee 于美国MIT设立。截止2018年,W3C已发布了200多项影响深远的Web标准及实施指南。严格遵循W3C标准的web页面称之为“标准模式”(也叫“严格模式”),而页面以一种比较宽松的向后兼容的方式显示的则称之为“混杂模式”(也称“怪异模式”),浏览器究竟用什么模式来渲染页面,就看DOCTYPE的声明方式。DOCTYPE是document type (文档类型) 的缩写,DOCTYPE 声明本身不是标签,声明必须写在HTML文档的第一行。

2. 标记语言的发展

来看下标记语言的发展,方便下文理解,标准通用标记语言(Standard Generalized Markup Language,SGML),是1986年出版发布的一个信息管理方面的国际标准(ISO 8879)。该标准定义独立于平台和应用的文本文档格式,索引和链接信息,为用户提供一种类似于语法的机制,用来定义文档的结构和指示文档结构的标签(tag)。制定SGML的基本思想是把文档内容于样式分开。

SGML规定了在文档中嵌入描述标记的标准格式,指定了描述文档结构的标准方法。SGML是一个包含超文本链接的综合语言,在Web上使用的HTML格式是使用固定标签集的一种SGML文档。

从上图可以看出,html是SGML的一个应用,xml是简化了SGML并用来取代SGML的,xhtml就是html从SGML专用xml语法的结果。不过HTML5已经不是SGML的子集。

3. 什么是DTD?

DTD 文档类型定义(Document Type Definition),规定了标记语言的规则,它是XML1.0版规格的一部分,是html文件的验证机制,属于html文件组成的一部分。DTD 是一种保证html文档格式正确的有效方法。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。

4. DOCTYPE声明

4.1 HTML 5只有一种声明方式,HTML5 不基于 SGML,不需要引用 DTD,所以HTML5没有“标准模式”与“混杂模式”的区别。

<!DOCTYPE html>

4.2 HTML4.01有三种声明方式,在HTML 4.01 中,<!DOCTYPE> 声明需要引用 DTD,因为 HTML 4.01 基于 SGML。

4.21 HTML 4.01 Strict (严格版本)

该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font),不允许框架集(Framesets),它提供了最干净的结构化标记,免于表现层的混乱。

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

4.22 HTML 4.01 Transitional(过渡版本)

该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。

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

4.23 HTML 4.01 Frameset(基于框架的 HTML 文档)

该 DTD 等同于 HTML 4.01 Transitional,但允许框架集内容。

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

4.3 XHTML 1.0 提供了三种DTD声明可供选择:

4.31 XHTML 1.0 Strict(严格版本)

同HTML严格版本。必须以格式正确的 XML 来编写标记。

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

4.32 XHTML 1.0 Transitional(过渡版本)

同HTML过渡版本。必须以格式正确的 XML 来编写标记。

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

4.33 XHTML 1.0 Frameset(基于框架的 HTML 文档)

等同于 XHTML 1.0 Transitional,但允许框架集内容。

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

4.4 XHTML 1.1

该 DTD 等同于 XHTML 1.0 Strict,但允许添加模型(例如提供对东亚语系的 ruby 支持)。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

5. 选择什么样的声明方式

随着技术的不断发展和完善,标准的应用越来越广泛和深入,现在大型的电商网站都是采用HTML5的声明方式,这也是一个大家共同认可的发展趋势,我想,未来的网站不再需要考虑兼容性,到那时网站的建设将更加方便,更加高效!

DOCTYPE声明方式相关推荐

  1. DOCTYPE声明的几种类型

    DOCTYPE声明的几种类型 DOCTYPE 声明决定着浏览器怎么去解析和渲染当前页面,所以对于页面来说是很重要的. HTML5时代,统一用 <!DOCTYPE html> 这样简单的方式 ...

  2. DOCTYPE声明作用及用法详解

    一.浏览器呈现模式和doctype 有的网页是遵循标准而创作的,但也有很多不是.即使你不能创建遵循标准的网页,也希望浏览器根据标准来正确显示那些页.目前,大量网页充斥着大量非标准代码,它们仍能正常地工 ...

  3. vaadin_Vaadin提示:以声明方式构建UI

    vaadin 如果您使用过GWT,那么您可能会发现UiBinder对于设计复杂的UI很有用. 在有关Vaadin的系列文章中,我们希望在Vaadin和GWT之间得出相似之处. Vaadin提供了多种开 ...

  4. Vaadin提示:以声明方式构建UI

    如果您使用了GWT,那么您可能会发现UiBinder对于设计复杂的UI很有用. 在有关Vaadin的系列文章中,我们希望在Vaadin和GWT之间得出相似之处. Vaadin提供了多种开箱即用的工具和 ...

  5. 为什么要用!DOCTYPE声明

    实例: 我们经常会看到类似这样的代码: <!DOCTYPE html> <html> <head> <title>文档的标题</title> ...

  6. doctype声明、浏览器的标准、怪异等模式

    doctype 标准(严格)模式(Standards Mode).怪异(混杂)模式(Quirks Mode),如何触发,区分他们有何意义? 触发标准模式 1.加DOCTYPE声明,比如: <!D ...

  7. DOCTYPE 声明

    DOCTYPE 声明标题 文章目录 DOCTYPE 声明标题 Doctype作用?严格模式与混杂模式如何区分?它们有何意义? Doctype定义 作用 严格模式与混杂模式如何区分? 意义 Doctyp ...

  8. JavaScript函数的两种声明方式,你了解多少?

    函数的两种声明方式 <!DOCTYPE html> <html lang="en"><head><meta charset="U ...

  9. 2019-7-22 [HTML] 基本结构 DOCTYPE声明 标签:[title meta 标题 段落 换行 加粗 斜体 下划线] 注释 特殊字符 img标签 a标签

    文章目录 0.HTML网页技术(基础) 1 HTML概述 1.1 什么是HTML? 1.2 Hello,HTML! 2 HBuilder的安装与使用 2.1 安装HBuilder 2.2 使创建项目 ...

最新文章

  1. 准确度量 持续改进—网站分析驱动目标达成zz
  2. 1.3 循环神经网络模型-深度学习第五课《序列模型》-Stanford吴恩达教授
  3. Oracle10g的flashback drop
  4. .NET6 新功能和新生态
  5. Win7(包括32和64位)使用GitHub
  6. Wireshark-003过滤器
  7. django数据库错误相关问题
  8. Charles安装破解和基础配置
  9. vue动态绑定背景图片的透明度
  10. 【Halcon轮廓提取】
  11. ERROR 999999: Error executing function. The table name is invalid. No spatial reference exists.
  12. MySQL数据库知识大全
  13. element-ui input 身份证号码验证
  14. matlab中点乘与乘的区别
  15. Unity拼图小游戏
  16. 商城APP软件开发要素有哪些
  17. #贴改色膜前,你必须要知道的事情
  18. 数组里面有值,但是console.log出来后打开却是空
  19. 汉明码(计算机组成原理)没听课也能懂
  20. 比例导引 matlab,单步龙格库塔比例导引弹道计算matlab源程序

热门文章

  1. 【算法】分块初步详解
  2. 暴力破解———罗马数字逆向解法,猜年龄利用位数信息,罗马数字的枚举解法
  3. 局域网采用BT方式(P2P)传输大文件解决方案
  4. 用java下载apk解析包出错_安装apk解析包时出现错误怎么办
  5. 艾蒂机器人_奥特曼格斗进化3艾斯机器人怎么玩厉害_奥特曼格斗进化3艾斯机器人使用心得分享_斗蟹游戏网...
  6. js获取url参数中文乱码问题
  7. 一口一口吃掉Hibernate(二)——别被世俗蒙蔽了双眼:Hibernate中Session之get和load方法的真正区别
  8. 【Android】史上最简单,一步集成侧滑(删除)菜单,高仿QQ、IOS。
  9. mysql修改排序规则
  10. OC中的方法、设置器与访问器、便利初始化函数及便利构造器的相关问题