文档类型、DOCTYPE切换和浏览器模式

2018-06-24 01:09:06来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

DTD(文档类型定义)是一种机器可读的规则,它们定义XML或HTML的特定版本中允许有什么、不允许有什么。在解析网页时,浏览器将使用这些规则检查页面的有效性并且采取相应的措施。浏览器通过分析页面的DOCTYPE声明来了解要使用哪个DTD,由此知道要使用HTML哪个版本。

选择什么样的DOCTYP

XHTML 1.0中有3种DTD(文档类型定义)声明可以选择:过渡的(Transitional)、严格的(Strict)和框架的(Frameset)。

分别介绍如下:

1.过渡的

一种要求不很严格的DTD,允许在页面中使用HTML4.01的标识(符合xhtml语法标准)。过渡的DTD的写法如下:

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

2.严格的

一种要求严格的DTD,不允许使用任何表现层的标识和属性。严格的DTD的写法如下:

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

3.框架的

一种专门针对框架页面所使用的DTD,当页面中含有框架元素时,就要采用这种DTD。框架的DTD的写法如下:

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 

需要注意的问题

没什么特别的,就是一定要将DOCTYPE声明放在XHTML文档的顶部,上面哪怕多个HTML注释标记都不行。

最好示例代码也加上DOCTYPE,否则效果会有差异。

HTML

HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。

HTML Strict DTD

如果您需要干净的标记,免于表现层的混乱,请使用此类型。请与层叠样式表(CSS)配合使用:

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

HTML Transitional DTD

Transitional DTD 可包含 W3C 所期望移入样式表的呈现属性和元素。如果您的读者使用了不支持层叠样式表(CSS)的浏览器以至于您不得不使用 HTML 的呈现特性时,请使用此类型:

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

Frameset DTD

Frameset DTD 应当被用于带有框架的文档。除 frameset 元素取代了 body 元素之外,Frameset DTD 等同于 Transitional DTD:

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

 

所有浏览器都支持 <!DOCTYPE> 声明。

<!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前

<!DOCTYPE> 声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令

在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD,因为 HTML 4.01 基于 SGML(Standard Generalized Markup Language)。DTD(document type definition)规定了标记语言的规则,这样浏览器才能正确地呈现内容。

HTML5 不基于 SGML,所以不需要引用 DTD。

提示:请始终向 HTML 文档添加 <!DOCTYPE> 声明,这样浏览器才能获知文档类型。 

在 HTML 4.01 中有三种 <!DOCTYPE> 声明(Strict,Transitional,Frameset)。在 HTML5 中只有一种:

<!DOCTYPE html>

有效性验证

 对页面进行有效性验证时要求有<!DOCTYPE>声明。

浏览器模式

当浏览器厂商开始创建与标准兼容的浏览器时,他们希望确保向后兼容性。为了实现这一点,他们创建了两种呈现模式:标准模式和混杂模式(quirks mode)。在标准模式中,浏览器根据规范呈现页面;在混杂模式中,页面以一种比较宽松的向后兼容的方式显示。混杂模式通常模拟老式浏览器(比如Microsoft IE4 和 Netscape Navigator4)的行为以防止老站点无法工作。

对于这两种模式之间的差异,最显著的一个例子与Windows上IE专有的盒模型有关。在IE6出现时,在标准模式中使用的是正确的盒模型,在混杂模式中使用的则是老式的专有盒模型。为了维持对IE5和更低版本的向后兼容性,Opera7和更高版本也在混杂模式中使用有缺点的IE盒模型。

呈现方面的其他差异比较小,而且是与特定浏览器相关的,包括对于十六进制颜色值不需要#号、假设CSS中没有指定单位的长度的单位是像素,以及在使用关键字时将字号增加一级。

Mozilla和Safari还有第三种模式,称为“几乎标准模式(almost standards mode)”,除了在处理表格的方式上有一些细微的差异之外这种模式与标准模式相同

在Firefox中,可以使用Web Developer Extension查看页面的呈现模式。如果网站以标准模式呈现,工具栏上会显示一个绿色的钩。若以混杂模式呈现,则显示红色的叉。IE8中的开发工具也显示浏览器使用的模式。

DOCTYPE切换

浏览器根据DOCTYPE是否存在以及使用哪种DTD来选择要使用的呈现方法。如果XHTML文档包含形式完整的DOCTYPE,那么它一般以标准模式呈现。对于HTML4.01文档,包含严格DTD的DOCTYPE常常导致页面以标准模式呈现。包含过渡DTD和URI的DOCTYPE也导致页面以标准模式呈现,但是有过渡DTD而没有URI会导致页面以混杂模式呈现DOCTYPE不存在或形式不正确会导致HTML和XHTML文档以混杂模式呈现。

根据DOCTYPE是否存在选择呈现模式,被称为DOCTYPE切换或DOCTYPE侦测。并非所有浏览器都采用这些规则,但是这些规则很好地说明了DOCTYPE切换的工作方式。要了解更全面的内容,可查阅网站https://hsivonen.fi/doctype/,这里的图表说明了不同浏览器如何根据DOCTYPE声明来选择呈现方法。

DOCTYPE切换是浏览器用来区分遗留文档和符合标准的文档的手段。无论是否编写了有效的CSS,如果选择了错误的DOCTYPE,那么页面就将以混杂模式呈现,其行为就可能会导致错误或不可预测。因此,一定要在站点的每个页面上包含形式完整的DOCTYPE声明,并且在使用HTML时选择严格的DTD。

许多HTML编辑器会自动添加DOCTYPE声明,如果创建XHTML文档,一些老的编辑器还可能在DOCTYPE声明前面添加XML声明:

<?xml version="1.0" encoding="UTF-8"?>

 XML声明时XML文件使用的可选声明,它定义使用的XML版本和字符编码类型等设置。不幸的是,如果DOCTYPE声明不是页面上的第一个元素,那么IE6会自动切换到混杂模式。这个问题在IE7中已经纠正了,但是除非要将页面用作XML文档,否则最好避免使用XML声明。

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:分辨率、像素和PPI

下一篇:常见浏览器兼容性问题与解决方案(面试题目)