web|web标准|网页
你做了所有你认为正确的事情,但页面在最新的浏览器里并不能正确表现。那是你书写了无效的XHTML和CSS.你使用了W3C标准的文档对象模型(DOM)来操作页面动态元素。而在浏览器去表现这些标准时,你的站点失效了。这很有可能就是一个错误的文档类型(DOCTYPE)导致的。这篇文章就是为你提供DOCTYPE是如何工作的,还有解释一些实际真实世界中这些文档类型的用法。
为什么使用文档类型(Why a DOCTYPE?)
依据HTML和XHTML标准,一个DOCTYPE("document type declaration"的简写)是用来告诉浏览器你使用的是哪一个版本的(x)HTML,而且必须出现在每一个页面的顶部。DOCTYPE是网页的一个重要构成:没有他们,你的CSS将不再有效。
就像之前提及的ALA文章里(其它有趣的地方也同样),DOCTYPE也要适应其它的浏览器,比如Mozilla, IE5/Mac, 或者IE6,IE7。
一个新的DOCTYPE包含了一整个URI(sconf注:Universal Resource Identifier,通用资源标志符)(一个完整的网址),它告诉那些浏览器去把页面解析(render)成与标准相适的模型。把(X)HTML, CSS和DOM处理成你所期望的那样。
使用一个不完善或是旧的的DOCTYPE,甚至不使用DOCTYPE,它会使浏览器把它转化成“Quirks”模型,此时浏览器假设你写的是过时的,残缺的90年代后的代码。
这样设置,浏览器将尝试用旧的标准解析你的页面,把你的CSS解析成IE4标准。并且回复所有者一个特殊的DOM(IE回复的是IE的DOM,Mozilla和Netscape 6回复的却是他们认为的模型)。
无疑,这并不是你所想要的。但却是你常得到的。所以本文就想要纠正这些不正确或是不完整的DOCTYPE。
(注:Opera浏览器不支持这些规则,它总是尝试把网页解析成标准适应型,别一方面,Opera对W3C的DOM也没有提供太强有力的支持。但他们也能很好的运行)Ed:自从这篇文章第一次发布以来,Opera已经把适应的DOM(DOM-compliant)加到Opera7里面了。
DOCTYPE去哪了?(Where HAVE ALL THE DOCTYPES GONE?)
尽管文档类型在浏览器中的WEB标准是重要的有机构成,尽管W3C领导创建了WEB标准,你也同样期望W3C的站点能提供一些合适的文档类型,你也可能想更迅速简单的找到这些信息,然而,在我写这篇文章的时候,你还不能。{Ed:W3C现在列出了一系列标准的DOCTYPEs在他的网站上,你能够在W3C指南中看到这些,比如"My Web site is standard. And yours?”}
W3.org不是A List Apart, WebReference或者Webmonkey.它原来无意于帮助WEB设计者,开发者,还有民间团体去加快他们认识和使用最新的科技。这不是他的工作。
W3C发布一系列的指南,尽管大多数的WEB设计者很少察觉。#
你能在W3.org上整天的搜索DOCTYPEs而不必去看那些专门的列表。并且当你确实下载一个DOCTYPE(一般是关系到一些特殊的建议或工作草案),而它并不能不正常的在你的站点工作。
遍及W3C站点的是缺失URIs(sconf注:即不是完的URI)的DOCTYPEs,这些DOCTYPEs是指向W3C自己网站的。一旦这些从W3C上转移到你自己的网页上,这些URLs就会成为不存在的文档了。
举个例子中,许多站点的DOCTYPE是直接复制的W3.org上的:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
如果你看到了这个DOCTYPE的最后一部分("DTD/xhtml1-strict.dtd").你会发现这是一个对W3C站点的相对链接。这是在W3C站点上的而不是你的。所以这个URI对浏览器没有作用。(sconf注:当你访问W3.org时,由于这是一个相对链接,所以才起作用)。
这个DOCTYPE实际上应该改成:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
注意到后面的DOCTYPE包含了一个完整的URI。这样一来就显示了一个网络上的有效资源,浏览器就可以找到它,并把你的文档解析成标准适应(standards–compliant)型。
如何使用DOCTYPE(DOCTYPES THAT WORK)
那么DOCTYPE是该如何使用呢?很高兴你会这样问。下面完整的DOCTYPE就是我们所需要的:
HTML 4.01 严谨型,过渡型,框架型
<!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">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0 严谨型,过渡型,框架型
<!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 XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML1.1 DTD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">