`
houfeng0923
  • 浏览: 144835 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

DOCTYPE, HTML和XHTML, Strict DTD和Transitional DTD, Quirks Mode和Standard Mode

阅读更多


转自:http://blog.csdn.net/wind_zsu/article/details/2464049

 

我们在HTML里面声明DOCTYPE一般会有以下几种:

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

是的,这里有HTML和XHTML,也有Transitional和Strict之分。顾名思义,XHTML是指这个文档是按照XML的格式来书写的,而HTML则表示这个文档是按照HTML的格式来书写的。Transition则表示这个文档达到了Transitional.dtd或者loose.dtd的要求,Strict则表示这个文档达到了strict.dtd的要求。但事实上我们经常会存在以下的误解:
(1) 我的文档是声明为XHTML的,则我的文档肯定完全按照XML的格式。
(2) 我的文档是声明为Strict的,则我的文档肯定是按照Strict Mode的方式来Render的,反之,是以Quirks Mode的方式来Render的。

 这两种理解都很直接,然而却是错误的,我们也经常会犯这种的错误。

首先,文档声明为XHTML和HTML,和文档的Parse(即浏览器对文档的分析)是没有直接关联的。事实上,浏览器如何Parse文档取决于服务器以什么格式来提供这个文档。通常情况下,有两种方式,"text/html"和"application/xhtml+xml"。只有以"application/html+xml"方式来提供的文档才能够被按照XML的方式来Parse。然而,因为浏览器的历史原因,并不是所有的浏览器都支持"application/xhtml+xml"格式的文档,IE7之前的版本(包括IE7)就不能够支持这种格式,如果IE7碰到这种格式的文档,它会提示用户另存为其它文件。考虑到IE使用的广泛性,目前绝大部分的文档都是以"text/html"的方式来提供的。以"text/html"方式来提供的文档是按照HTML的语义来Parse的,大家都知道HTML的容错性是非常强的,即使你的文档里面的TAG没有正确地关闭,这个HTML也能够被正确地显示出来。因此如果你的XHTML是以"text/html"的方式来提供的(绝大多数情况下都是),那么你即使在DOCTYPE里面声明了XHTML,你的文档也不是以XML的格式来Parse的,因此也不能保证你的文档是严格按照XML的规范的。事实上,很多专家都建议如果你的文档不是以"application/xhtml+xml"的方式来提供的,那么你就应该声明为HTML。

其次,浏览器以什么样的方式来Render你的文档,并不以你声明的DTD来决定的。事实上,如果你声明了DOCTYPE和DTD,你的文档就是以Strict Mode(或者称为Standard Mode,很多浏览器还包括Almost Standard Mode的方式,这里不进行区分)方式来Render的。对于没有DOCTYPE的文档,才是以Quirks Mode方式来Render的。因此浏览器的Render模式和你声明的DTD并没有直接的关系。

最后,你声明为Strict.dtd还是Transitional.dtd,在目前的浏览器看来是没有什么区别的。Strict.dtd比Transitional.dtd或者loose.dtd要严格多了,很多元素在strict.dtd里面都不能使用。然而因为浏览器的兼容性,即使你在DOCTYPE里面声明了Strict.dtd,浏览器遇到strict.dtd里面不允许的元素,也还能够正确地显示你的文档。我猜测浏览器并没有将DTD考虑进去。例如iframe这个TAG在strict.dtd里面并不存在,但即使你的DOCTYPE里面声明了strict.dtd,然后使用了iframe这个TAG,浏览器(包括IE7,IE8,FF3.0,Safari 3.0)都能够正确地显示你的文档。浏览器并没有按照你声明的DTD来Parse你的文档。目前能够保证你的文档是符合strict.dtd还是Transitional.dtd的,只能通过一些网上的Validator,如W3C Validator来分析,浏览器并不能够给你很好的支持。当然,实际上如果你能够严格按照你声明的DTD来书写你的文档,那是最好的,这样保证了以后浏览器对DTD严格遵守的时候,你的文档不会产生错误。

因此,

(1) 如果你的文档是以"text/html"的方式来提供的,那么你就应该声明为HTML。假如你想要让IE7能够正确地显示,那么你就更应该这么做了。
(2) 如果你的文档声明为XHTML,那么你应该以"application/html+xml"的方式来提供。
(3) 尽量在你的文档前面声明DOCTYPE和DTD,这样能够保证你不是以Quirks Mode的方式来Render文档的。
(4) 如果你声明了DTD,那么就要严格按照DTD的要求来书写你的文档。特别是如果你声明了Strict.dtd,那么你应该注意哪些元素是不能够使用的。

 

注意:本文发布于2008.5.20。随着时间的发展,浏览器对HTML和XHTML,Strict.dtd和Transitional.dtd的支持会更好。如果你的浏览器比IE7, IE8, FF 3.0和Safari 3.0要高很多很多的版本,那么你要注意本文的适用性。

 

w3c:  http://www.w3school.com.cn/tags/tag_doctype.asp

分享到:
评论
1 楼 endless_liuzuolin 2012-01-17  
很郁闷的有人在dtd前面加了其他东西导致dtd无效,找了半天才找到原因,坑爹的。

相关推荐

    网页 DOCTYPE html标签的作用1

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;` 不同的DOCTYPE会导致浏览器进入不同的渲染模式,这被称为“标准模式”(Standards ...

    DOCTYPE 标签

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; ``` 3. **XHTML Frameset DTD**:适用于含有框架的XHTML文档。 ```html &lt;!DOCTYPE...

    html.pdf

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; ``` 在这个例子中,`html`是顶级元素,`PUBLIC`表示FPI( Formal Public Identifier)...

    IE6兼容心得(自己总结的)

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; ``` - **XHTML1.0 Frameset**: 此DOCTYPE用于定义使用XHTML1.0 Frameset标准的框架...

    HTML 版本声明 DOCTYPE 标签

    相反,如果没有声明DOCTYPE或声明错误,则可能导致浏览器进入怪异模式(quirks mode),在这种模式下,页面可能会出现一些不兼容或意外的渲染行为。 总之,HTML版本声明DOCTYPE标签是确保网页正确呈现的关键部分。...

    HTML-Doctype-Declaration:关于HTML5和HTML5之前的Doctype声明的演示

    DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;`,它不允许使用框架、某些表单元素和呈现相关的属性。 在XHTML1.x中,DOCTYPE声明会变成: ```html &lt;!DOCTYPE html ...

    WebRebuild北京第一届交流会之2:《浏览器兼容性问题简介》——黄昊

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; &lt;!DOCTYPE html&gt; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" ...

    IE6兼容笔记

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; ``` 5. **XHTML 1.0 Frameset** ```html &lt;!DOCTYPE html PUBLIC "-//W3C//DTD ...

    Web标准:关于DOCTYPE

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt; ``` 这里的`html`是顶级元素,`PUBLIC`表示可公开访问的DTD,`W3C`是组织,`XHTML`是类型,`1.0 ...

    网页制作基础 声明文档类型描述(DTD

    DTD告诉浏览器如何解析和展示HTML或XHTML文档。在创建网页时,无论是否使用诸如Dreamweaver这样的设计工具,都需要在文档的开头包含DOCTYPE声明。 DOCTYPE声明位于HTML文档的第一行,它的作用是指示浏览器文档遵循...

    web前端浏览器兼容性问题和新知识.docx

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;`,以确保浏览器以标准模式解析页面。 接着,了解不同类型的DTD声明至关重要。过渡的...

    DOCTYPE元素详解 完整版

    在HTML中,主要有三种文档类型:Strict、Transitional和Frameset,而XHTML中也有对应的Strict、Transitional和Frameset类型。 Strict类型是推荐使用的方式,它不含任何表现层的混乱标记,需要配合层叠样式表(CSS)...

    为什么使用DOCTYPE HTML

    DOCTYPE html&gt;`就会自动进入标准模式,而不需要像过去那样引用特定的DTD,如XHTML 1.0 Transitional或Strict。 在网页开发中,理解怪异模式和标准模式的区别至关重要。在怪异模式下,浏览器会模拟早期的非标准行为...

    HTML+CSS面试题及答案

    DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;` - 混杂模式:`&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ...

    html doctype 作用介绍

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;` 表示遵循XHTML 1.0 Transitional规范。不同的DOCTYPE会使得浏览器按照相应的语法规则...

    36个非常重要但常被遗忘的HTML标签

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;` —— 表示XHTML宽松模式。 - `&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

    HTML教程:DOCTYPE 的缩写

    在HTML5之前,不同的DOCTYPE声明对应不同的HTML或XHTML标准,例如HTML4.01有三种不同的DOCTYPE:Strict、 Transitional 和 Frameset,每种都有其特定的URL和DTD(Document Type Definition)。 在HTML4.01 Strict的...

    被忽视的DOCTYPE说明分析

    浏览器根据DOCTYPE声明的有无以及具体内容,决定采用哪一种模式进行页面的渲染,主要分为标准模式(Standards Mode)和怪癖模式(Quirks Mode)。 2.1 多种模式的由来 在早期,不同的浏览器厂商为了争夺市场份额,...

    CSS失效怎么办?请检查网页最头部是否包含Doctype标签

    在不包含`Doctype`的情况下,浏览器可能会进入所谓的“Quirks Mode”或“兼容模式”,在这个模式下,浏览器会按照旧版标准或者自身的非标准方式来解析HTML,这可能导致CSS规则无法正常工作,因为这些模式下的渲染...

    html中使用margin:0 auto整个页面不居中的解决方法

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; ``` 这个声明告诉浏览器应按照XHTML 1.0 Transitional标准来解析页面,这样`margin: ...

Global site tag (gtag.js) - Google Analytics