工作了这么久不知道DOCTYPE的作用是什么,更不知道不同声明方式之间的差异,水平小菜凭这点一下就暴露了,惭愧惭愧!查阅文档整理如下:
由于历史发展的原因,不同浏览器对同一个页面的解析渲染是有差异的,没有统一的标准。1994年10月,万维网联盟(W3C)由 Tim Berners Lee 于美国MIT设立。截止2018年,W3C已发布了200多项影响深远的Web标准及实施指南。严格遵循W3C标准的web页面称之为“标准模式”(也叫“严格模式”),而页面以一种比较宽松的向后兼容的方式显示的则称之为“混杂模式”(也称“怪异模式”),浏览器究竟用什么模式来渲染页面,就看DOCTYPE的声明方式。DOCTYPE是document type (文档类型) 的缩写,DOCTYPE 声明本身不是标签,声明必须写在HTML文档的第一行。
来看下标记语言的发展,方便下文理解,标准通用标记语言(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的子集。
DTD 文档类型定义(Document Type Definition),规定了标记语言的规则,它是XML1.0版规格的一部分,是html文件的验证机制,属于html文件组成的一部分。DTD 是一种保证html文档格式正确的有效方法。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。
4.1 HTML 5只有一种声明方式,HTML5 不基于 SGML,不需要引用 DTD,所以HTML5没有“标准模式”与“混杂模式”的区别。
4.2 HTML4.01有三种声明方式,在HTML 4.01 中, 声明需要引用 DTD,因为 HTML 4.01 基于 SGML。
4.21 HTML 4.01 Strict (严格版本)
该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font),不允许框架集(Framesets),它提供了最干净的结构化标记,免于表现层的混乱。
4.22 HTML 4.01 Transitional(过渡版本)
该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。
4.23 HTML 4.01 Frameset(基于框架的 HTML 文档)
该 DTD 等同于 HTML 4.01 Transitional,但允许框架集内容。
4.3 XHTML 1.0 提供了三种DTD声明可供选择:
4.31 XHTML 1.0 Strict(严格版本)
同HTML严格版本。必须以格式正确的 XML 来编写标记。
4.32 XHTML 1.0 Transitional(过渡版本)
同HTML过渡版本。必须以格式正确的 XML 来编写标记。
4.33 XHTML 1.0 Frameset(基于框架的 HTML 文档)
等同于 XHTML 1.0 Transitional,但允许框架集内容。
4.4 XHTML 1.1
该 DTD 等同于 XHTML 1.0 Strict,但允许添加模型(例如提供对东亚语系的 ruby 支持)。
随着技术的不断发展和完善,标准的应用越来越广泛和深入,现在大型的电商网站都是采用HTML5的声明方式,这也是一个大家共同认可的发展趋势,我想,未来的网站不再需要考虑兼容性,到那时网站的建设将更加方便,更加高效!