headermask image

header image

Transitional vs. Strict Markup

推广Web Standards的人经常说XHTML比HTML更加严格,当然从某种意义上说是的,比如它要求所有的标签关闭并且所有的属性都用引号。但其实XHTML 1.0还分两种(加上Frameset DOCTYPE的话算三种,本文不讨论),Transitional(过渡型)和Strict(严格)DOCTYPEs。并且HTML 4.01也有同样的文档声明。
从字面上就可以看出来意思:Transitional DOCTYPEs只是为了实现从旧时代到新时代的过渡,而且Strict DOCTYPEs是默认的文档声明, 对构造HTML 4.01和XHTML 1.0都适用。
使用Transitional DOCTYPE一般是由于代码中含有过多陈旧的写法,并且一下子很难完全转换到Strict DOCTYPE来。但是Strict DOCTYPE才应该是你的目标。它鼓励甚至有时是强迫你把结构与表现区分开来,把表现层的代码都写在CSS里。HTML 4 Document Type Definition: -
本HTML 4.01 Strict DTD不包括表现层属性和标签,W3C将逐渐淘汰这些属性和标签,您完全可以使用样式表来实现。您应该使用Strict DTD,如需获得表现层属性和标签的支持,请使用Transitional DTD。

用Strict DOCTYPE还有一个好处,即可以让浏览器使用它们最严格、(一定程度上)最符合标准的模式来渲染页面。
Tommy Olsson在Web Standards Group的Ten questions for Tommy Olsson一文中很好的阐述了使用Strict的好处:
我觉得,使用Strict DTD,无论是HTML 4.01 Strict还是XHTML 1.0 Strict,远比讨论是用HTML还是XHTML重要的多。它代表了未来互联网的质量。它将结构和表现分开,使得维护一个站点非常容易。

对于刚开始接触web standards和正确的、语义化的结构的人,认清Transitional和Strict DOCTYPEs的区别非常重要。更多详细列表请参考:XHTML: Differences between Strict & Transitional、Comparison of Strict and Transitional XHTML和XHTML1.0 Element Attributes by DTD。
对于准备向Strict进发的人来说,两者的有些区别很可能会使开发者犯错误,接下来我将会谈到。
在Strict DOCTYPEs下不支持的标签

center
font
iframe
srike
u

在Strict DOCTYPEs下不支持的属性

align (表格相关的支持:col, [...]

IE8和网页标准

W3C终于发布了第一个HTML5草案,大家还沉溺在HTML2XHTML转换的快乐和痛苦中时,却又突然发现,HTML5和XHTML2,到底谁是未来?……,当然,HTML5和XHTML2会保持最大兼容性,W3C和WASP肯定比我们更清楚这一点的重要性。不过如果都“最大兼容”了,为何不统一呢?HTML那种不标准的代码解析起来可不怎么好玩。
我想抱怨的是,W3C的效率那是相当出名(就像IE实现标准的效率),现在第一个草案,正式定稿最早是2010年,这么算起来,要等IE支持(我坚信那时IE仍是主流浏览器),恐怕我们的显示设备原理和效果都升级换代了。到时再用一份“妥协”过的“标准”——拜托,这可是IT产业。很多美好的标准或技术,从我们开始期盼,到我们都不再编码,它都不会实现。
其实HTML5这事儿没多大动静,闹得正欢的是IE8实现“超级标准模式”的事儿,IE开发团队为了让只认识IE的,用IE6/7的所谓“符合标准”代码,错误的实现他们想要的样式的网页作者们不用修改他们的网页,决定让IE8在“标准模式”下实现IE7的显示结果,而实现“更正确”的标准需要在网页中加入一段META信息。
嗯,技术一点来说,IE6依靠DOCTYPE来区分怪癖模式(IE5.5或更早版本的绘制网页方式)和标准模式,但IE6实现的“标准模式”依然有许多错误,而当IE7改进“标准模式”时,这些“错误的标准模式的代码”就会展现出错误的样式。为了避免该问题再发生在IE8身上,IE团队决定使用一个META标签或HTTP包header来告诉浏览器,用“超级标准模式”来绘制网页,而现在的标准网页将默认为IE7的绘制方式。
再直白(或讽刺)一点,如果ACID2测试网页要想在IE8下正确表现,ACID2测试需要修改网页,加上一个META信息,告诉IE8用“超级标准模式”。真CCTV。
为过去的部分错误网页,IE要牺牲未来的网页。微软总是在用一个错误掩盖另一个错误,所以,我们总是要疲于解决浏览器间(准确地说是IE和其他浏览器)的兼容性问题。“不破坏现有网络”总是被当作微软的借口,事实上他们每次发布新版IE都“履行”了这点,总是有新bug推翻了这个借口。
当然,这个想法看上去,不是完全没有好处,至少我们可以让网页在IE下始终显示如一(来兼容MS犯下的错误)。可是,当IE9修正了IE8的错误标准时,我们该怎么办?如果还是需要IE条件注释或CSS HACK来解决的话,那这个标签有什么意义?还是说,微软以为这个标签就可以让大家都总是平滑听话的升级到最新的IE,就像Opera社区那样?
想让IE永远用最新的版本绘制网页?
<meta http-equiv=”X-UA-Compatible” content=”IE=edge” />
或者用HTML5的doctype
<!DOCTYPE html>
(IE6/7将以标准模式处理)
或者HTTP包header
X-UA-Compatible:IE=edge
反对的理由

未来的IE9/9+能否真的正确兼容过去的版本?
IE的体积会不会越来越大?比如1G?
浪费互联网流量资源。
如果实现多引擎间交互,比如主网页和内嵌iframe用不同版本的引擎时?
微软在鼓励大家用非标准代码开发网页?
期间的小版本如何处理?IE史上发生过补丁改变绘制的事情。
更多的安全漏洞?(绝大多数病毒都是通过IE网页漏洞传播的吧……)

部分评论:
是时候宣布浏览器间兼容性已经破产?
我们总是为MS修复网页,而不是MS为网页修复IE。
如果干掉IE,那么我们就没这么多问题了。
综合:A List Apart2篇,John Resig,Dean Edwards,Safari,Mozilla,456 Berea Street消息

来自http://www.5iya.com/blog/post/ie-web-standards-sucks.asp

使用热门选择:元标记(Meta tags)和网页搜索

发表者:John Mueller, 网站管理员趋势分析员,苏黎世
原文:Answering more popular picks: meta tags and web search
发表于:2007年12月4日,星期二,上午11时53分
如果你能写好和维持准确的元标记(例如,描述性标题和为搜索机器人提供的信息),谷歌就可以更准确地爬行、索引并在搜索结果中显示你的网站。元标记为各种各样的客户端(例如浏览器和搜索引擎)提供信息。请记住,每一个客户端可能只解析对该客户端有用的元标记,而忽略了其他元标记(虽然它们有其他用处)。
下面是谷歌如何解析以下 HTML 页的元标记:
<!DOCTYPE …><head>
<title>传统瑞士奶酪火锅食谱
<title>
谷歌使用此标记,网站管理员应非常注意它的准确性
<meta name=”description”
content=”奶酪火锅是 …”>
谷歌使用此标记,我们的搜索结果会显示它
<meta name=”revisit-after”
content=”14 days”>
谷歌不使用此标记,其他主要搜索引擎也不使用
<META name=”verify-v1″
content=”e8JG…Nw=” />
可选,谷歌网络管理员工具用到此标记
<meta name=”GoogleBot” content=”noOdp”>
<meta …>
<meta …>
</head>
可选
<meta name=”description” content=”对本页的描述”>此标记提供了对当前页面一个简短描述。在很多情况下该描述会作为页面摘要(snippet)显示在谷歌的搜索结果中。详情请参阅我们的博客文章“使用更好的元描述来改善页面摘要”以及帮助中心的文章“如何更改网站的标题和描述”。虽然描述元标记是可选的,并且不会影响到您的排名,一个好的描述可以产生一个更好的页面摘要,这反过来又可以帮助提高我们的搜索结果质量和你的网页的访问者数量。
<title>页面标题</title>从技术上讲,标题标记并不是一个元标记,它经常与”description”标记一起使用。此标记的内容(即标题)一般显示在搜索结果中(当然,当用户使用浏览器来浏览网页或察看书签时也能看到页面标题)。我们的博客文章”针对访问者,还是针对搜索引擎?“尤其是”充分利用网页标题”中有关于标题标记的更多信息。
<meta name=”robots” content=”…, …”>
<meta name=”googlebot” content=”…, …”>这些元标记控制搜索引擎如何抓取和索引页。 “robots”元标记指定的规则适用于所有搜索引擎,”googlebot”元标记指定的规则只适用于谷歌。谷歌可以理解以下值(当指定多个值时,用逗号将它们分开) :
* noindex: 防止网页被索引(见”使用元标记拦截或删除网页“)
* nofollow: 不要通过当前页的链接来寻找并抓取新的网页(也见”使用元标记拦截或删除网页“)
* nosnippet: 在搜索结果中显示当前页时,不要显示页面摘要(见”防止显示或删除页面摘要“)
* noodp: 在为本页产生标题或页面摘要时,不要使用开放式目录项目(又名dmoz.org)中的文本(见”如何更改网站的标题和描述?“)
* noarchive: 在显示本网页于搜索结果中时,不要显示一个”网页快照”链接(见”防止显示或删除缓存的网页“)
* unavailable_after:[日期]:在指定的日期和时间后从搜索结果中删除这个网页(见”机器人排除协议:现在更灵活“)
当你完全省略此标记或当你指定content= “all”时,默认规则是”index, follow”。”使用 robots 元标记”中有关于”robots”元标记的更多信息。作为一个说明,你现在也可以在你的页面首部通过”X-Robots-标签”HTTP 头指令来指定这一信息。这特别有用,尤其是当你想微调抓取和索引诸如 PDF、图片或其他类型的非 HTML 文件时。
<meta name=”google” value=”notranslate”>当我们认识到一个页面的内容并不是用用户可能想读的语言所写时,我们往往在搜索结果中提供一个链接以自动翻译你的网页。一般来说,这让你有机会提供独特和令人折服的内容给一个更广大的用户群。不过,在特定情况下,你可能不想你的网页被翻译。用这个元标记,你可以表明你不想让谷歌提供一个翻译此页的链接。这个元标记一般不影响该页为任何特定语言的排名。更多的信息请参阅”谷歌翻译常见问题解答“。
<meta [...]