Friday, October 24, 2008

挑战 XHTML 的 Strict 标准

我的 Blog 网页在 Doctype 声明上一直使用的是 XHTML 的 Strict 标准,当初在模板制作完成时是校验过的,可是随着后来无数次的修改、内容添加,现在已经不能通过 W3C 的语法校验了,加上 Google Blogger 在发布页面的时候似乎也并没有考虑目标模板的 Doctype 标准,也部分导致校验的失败。

经过一个下午的努力,终于基本上解决了所有 XHTML 的语法问题,总结如下。
<a> 标签没有 target 属性
在 Strict DTD 里面,超链接 <a> 标签 没有 target 属性,因此不能利用 target="_blank" 这样的代码来达到新开页面打开链接的目的。为了实现同样的功能,通常的办法是用 rel="external" 来替代 target="_blank",然后用如下 JavaScript 代码来处理链接:
function externalLinks() {
var linkArray = document.getElementsByTagName('a');
for (var i = 0; i < linkArray.length; i++) {
var link = linkArray[i];
if (link.getAttribute('rel') == 'external') {
link.target = '_blank';
}
}
}
然后将该 externalLinks() 函数添加到页面的 onLoad 事件中。如:
<body onload="externalLinks();">
<img> 标签必须添加 alt 属性
对于 <img> 标签来讲,alt 属性是必须的。给图片添加 alt,一方面当图片因为各种原因无法显示的时候,能给访问者以提示;另一方面也便于搜索引擎判断图片的内容,以及更准确的建立索引。
<img> 标签没有 border 属性
<img> 标签是没有 border 这个属性的。我们通常会加上 border="0",主要是因为把图片放在链接标签 <a> 里时,浏览器会加上一个链接默认颜色的边框,而这通常是多余的。在 Strict 标准中,不能用 border 属性来去掉边框,而只能使用 CSS 控制。同样 align 属性也是不存在的,要实现 absmiddle 这样的目的,也只能用 CSS 代替。
<blockquote> 标签内必须使用 block 级别的标签
<blockquote> 标签用来在页面上表示引用的内容,例如,最常见的,引用代码。我通常习惯将代码的内容放在 <code> 标签中,而这个标签是 inline 级的,不符合 Strict DTD 的要求。<strong>、<b> 等同样会导致问题。符合要求的 block 级标签包括:<address>, <blockquote>, <del>, <div>, <dl>, <fieldset>, <form>, <h>, <h2>, <h4>, <h5>, <h6>, <hr>, <ins>, <noscript>, <ol>, <p>, <pre>, <script>, <table>, <ul>。
不能使用 <embed> 标签
这个问题最容易出现在引用外部媒体文件时,例如 MP3 音乐、视频等。很多资料推荐同时使用 <object> 和 <embed> 来增强媒体引用元素的浏览器兼容性,但是很不幸的,Strict DTD 并未定义 <embed>。其实我们完全可以不使用 <embed> 一样能够兼容浏览器。例如 Youtube 给的代码一般是这样的:
<object width="425" height="344">
<param name="movie"
value="http://www.youtube.com/v/uhsjNTEJD3c"></param>
<param name="allowFullScreen" value="true"></param>
<embed src="http://www.youtube.com/v/uhsjNTEJD3c"
type="application/x-shockwave-flash"
allowfullscreen="true"
width="425" height="344"></embed>
</object>
这样无法通过校验。我们可以改成:
<object type="application/x-shockwave-flash"
width="425" height="344">
<param name="movie"
value="http://www.youtube.com/v/uhsjNTEJD3c"/>
<param name="allowFullScreen" value="true"/>
</object>
实体用法问题
在 XML 中,实体的写法是 &entity;,以一个 & 符号开头,一个分号结束。因此,Strict 标准的 XHTML 里面不允许出现任何单独的 & 符号,即使是在 URL 中用来分隔查询参数。需要用到这个符号的时候,要用 &amp; 来表示。通常一个实体用法的错误会同时导致 5 个校验时的错误,当解决以后,这 5 个错误会同时消失。由于 Blogger 在发布页面时 URL 直接使用了 & 符号,因此会直接导致 Strict 标准的 XHTML 校验失败。
重复的 id 值
对于 XHTML 标签来讲,id 属性的值必须唯一,如果一个文档中出项重复的 id 就会导致问题。出现这种问题,通常是把 id 属性放在了 Blogger 模板会循环输出的部分。
另外,Blogger 提供的模板中,backlinks 那一部分会导致 4 个不同类别的问题。凭心而论,Blogger 模板在 backlinks 这一块的代码实在写的很烂,用了三个不同的 js 文件,用 JavaScript 输出 CSS,不但使得不同模板之间难以更改这一部分显示的样式,也导致了很多 XHTML 的语法校验问题。例如 Blogger 自己的 Buzz,打开任一个文章的独立页面的源代码,Doctype 声明赫然是 XHTML 1.0 Strict,然而 backlink 那一块的代码不用校验也能看出漏洞百出。

Blogger 目前版本的网站出自著名设计师 Douglas Bowman 之手,其本人对 XHTML 以及 CSS 有着非常深刻的研究。在设计之初,Blogger 还没有 Backlinks 的功能,显然这个蹩脚的 Backlinks 是后来由其他人加上去的。不知道 Bowman 先生在看到这一幕后会做何感想。

Google 黑板报用的是同样的 backlink 代码,不过比 Buzz 知趣的是它的模板干脆去掉了 Doctype 声明。只不过作为 Google 旗下的网站,页面连 Doctype 声明都没有,也是一件汗颜的事情。

言归正传,以下列出 backlink 这部分代码导致的问题以及解决方法。
<div> 和 <dl> 之间的嵌套问题
在 Blogger 给出的默认模板代码中,是用 <dl> 来实现反向链接列表的;可问题在于,他们将 <BlogItemBacklinks> 放在了 <dl> 之内,而在生成页面时,会将 <BlogItemBacklinks> 这一对模板标签替换成一对 <div> 标签,从而导致 <div> 被嵌套在 <dl> 内。在 Strict DTD 里,<dl> 标签内只允许出现 <dt> 和 <dd> 两个子标签。解决办法是把 <BlogItemBacklinks> 放到 <dl> 外面,当然这样虽然让 XHTML 语法通过校验,但实际的运行结果,会导致每个反向链接条目会占用一个 <dl> 块,而不是预期的放在循环的若干个 <dt> 和 <dd> 中。通过 CSS 可以解决条目之间间距的问题。如果要完美解决这个问题的话,就只有自己重写 Blogger 提供的 JavaScript 函数来改变这一行为了。
<script> 标签的 defer 属性
在 Blogger 用模板生成页面时,除了将 <BlogItemBacklinks> 替换成一对 <div> 以外,还会在开标签的 <div> 之前加上一个 <script;> 用来引入相关的 JavaScript,同时给出了一个 defer="true" 属性,然而,根据 Strict DTD,defer 属性只能有一个值,只能是 defer="defer"。
<noscript> 内只能用 block 级别标签
在生成以上 <script> 标签的同时,Blogger 给出了一个 <noscript>,用来当浏览器不支持脚本的时候显示一个 Blog Search 的链接。可是 <noscript> 标签内只能用 block 级别的标签,直接用 <a> 这样的 inline 标签是不行的。
模板占位符问题
在模板中这段关于 backlink 的代码中,Blogger 用了一些模板标签作为占位符。通常模板标签会在生成具体网页时替换掉,但这里的占位符不会,它们要在实际生成 backlink 条目时被 JavaScript 程序换掉。但是在做 XHTML 语法校验时,这些占位符以 HTML 标签的形式存在于代码中,而又显然不属于 XHTML 定义的范围,从而导致校验失败。解决办法是将它们的尖括号转移,写成诸如 &lt;$BlogBacklinkTitle$&gt; 的形式,这样既能够被 JavaScript 成功识别,保证功能正常,又能通过 Strict 语法校验。要特别注意,其中 <$BlogBacklinkDeleteIcon$> 不要转义,这个模板标签是在页面生成时被替换的,而不是 JavaScript 的数据占位符。
最后,Google 黑板报最近也发布了一篇关于互联网标准性的文章,这篇文章也提供了很多关于改进网站 HTML 代码的参考信息。

Labels: , , , , , , , , ,

Tuesday, January 22, 2008

微软将强制将浏览器升级到 IE7

在 Solidot 上看到InfoWorld 的报道称,微软将在 2 月 12 日通 Windows Server Update Services 把所有 Windows 系统的浏览器强制升级到 IE7,不会像以前那样要经过用户的许可。微软给出的理由是“安全原因”。

Solidot 上还调侃说,对 WEB 开发者来说这是个好消息;对以前只支持 IE6 的网站来说,这是场灾难。

此话不假。以前做 WEB 界面,在所有为浏览器兼容性付出的工作中,50% 的时间花在让 IE 和 FireFox 兼容,另外 50% 的时间花在让 IE 的不同版本之间兼容。作为同一个公司推出的同一系列产品,对一种有标准的文档的理解会有如此大的差异,真的可以说是一件让人费解的事情。不过现在微软终于醒悟了,既然事实已经造成,那就让糟糕的过去都消失掉吧……

Labels: , , , , ,

Saturday, November 11, 2006

Firefox 的 JavaScript 问题两则

今天发现页面上新加上的左列 Tag 在 Firefox 上显示不正确,在细察之下,发现 Firefox 在 JavaScript / CSS 上和 IE 不同之处:

问题 1. 类似 obj.style.height = imgObj.height 的语句无效。

即将一个 image 对象的高度值赋给另一个对象,用来修改其样式高度,这样做无效。

分析

要理解这个问题,首先要纠正思想上的一个误区。以上这个操作,其实并非是通常编程概念上的将一个 int 值赋给另一个 int 变量。这个语句的操作,实际上是把 imageObj.height 当作一个字符串,作为 obj 这个对象 CSS 中 height 的属性。

之前的一篇帖子说过,Firefox 对 CSS 的理解非常严格,任何表示大小的值,数字后面必须跟上单位,除非是 0。也就是说,height: 20 对于 Firefox 来讲不具有任何意义,必须写成 height: 20px 才会被接受。所以,在 JavaScript 中,为了让对 CSS 的 height 值的设置有效,所赋给的字符串也同样必须是数量加上单位。

解决

以上语句,应该写成:
obj.style.height = imgObj.height + 'px';


问题 2. Firefox 不支持 obj.innerText 属性。

如果把 obj.innerText alert() 出来,显示的值是 undefined

分析

Firefox 支持 innerHTML 属性却不支持 innerText,这一点实在是蹊跷。很多人建议用 innerHTML 来代替需要用 innerText 的场合,但是这显然并不总是适用。我们有时候只是要取得一个 Tag 中的文字信息而不需要 HTML 的标记。

解决

良好的替代办法是用 obj.textContent,这个属性的作用和 innerText 是相同的,名称不同而已。不过为了兼容性,我们还是需要在程序中区分一下当前环境支持哪种。以下方法可以帮助我们区分:
if (document.all) {
obj.innerText = "myText";
}
else {
obj.textContent = "myText";
}

以前我们讲过,Firefox 不支持 document.all 这个 Collection,我们需要用 getElementById() 方法来替代,所以通过判断是否有 document.all,就能区分当前环境。

Labels: , , , ,

Monday, October 10, 2005

IE, Opera 和 Mozilla Firefox

为了验证 tableless layout 版面的浏览器兼容性,特地找来了时下流行的 Opera 8.5 和 Mozilla Firefox 1.0.7 与 微软的 Internet Explorer 6.0 一起测试,结果是倍受打击……

原来以为基本上不用改就能兼容,因为完全没有用 table 排版,结果在这两个非 IE 的浏览器上,页面虽然没有面目全非,但是也不如在 IE 上显示的完整,而且有些地方莫名奇妙的怎么都设置不正确。花了 4 个小时,经过反复的和 stopdesign 网站样式表的比对,最后发现原因有两点:

  • 没有用标准的 XHTML 头来声明页面的 DocType,经过测试,发现用传统的 HTML 4.0 声明,和 XHTML 声明,三种浏览器渲染出来的结果都不同;
  • Mozilla Firefox 浏览器对样式表的要求非常严格,所有的数字属性,除了 0 以外,都必须带上单位,否则一律忽略不计!为了这个我纳闷了很久——前两个浏览器都能正确的显示各种样式的 border,而 Firefox 上所有的 border 全部都被忽略了,汗哪…… 给 border-width 参数加上单位 px 后,就正确了。paddingmargin 具有同样的问题。

以上提到的 XHTML 需要如下声明:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://gmpg.org/xfn/1">

对于线条的样式,dotted 和 dashed,在 IE 上 width 为 1 时,都显示为 dashed;但这两个样式在 Opera 和 Firefox 上能够明显的区分出来。另外,原来几乎所有的 JavaScript 在 Mozilla Firefox 上都不能运行,它对 JavaScript 的语法要求也非常严格,必须完全符合 W3C 标准:
  • document.all['id-name'] 不合法,用 document.getElementById('id-name') 替代;
  • object.all.tags("DIV") 不合法,用 object.getElementsByTagName("DIV") 替代;
  • collObjs(i) 不合法,用 collObjs[i] 替代。

做完以上工作后,终于页面能够在三种浏览器上得到几乎相同的结果了。突然觉得自己做了 5 年的 WEB,完全被微软毒害了,已经养成了太多不好的习惯;看来以后要严格执行 W3C 的 XHTML、CSS 和 JavaScript 标准才是。

Labels: , , , ,

Sunday, October 09, 2005

So We've Got A New Face Here!

上次翻译了那篇倡导 tableless layout 的文章后,心里头就一直想着尝试一下。所以今天响应这个号召,在坚决不用 table 的原则下,把面孔改成了这个样子。实际没有什么设计的成分,主要是尝试对 CSS 的利用。结果是完全实现了原来必须要用 table 才能完成的版面,还是有点成就感。另外,今天还大概看了一下 CSS 2.0 的参考,突然发现了 CSS 很多以前不知道的却很实用的功能,尤其是,居然可以让溢出容器的文字串自动省略并以“...”结尾;以前这个功能需要用服务端程序来实现,而且还挺麻烦的……

Labels: , , ,

Thursday, October 06, 2005

Throwing Tables Out the Window

这是一篇翻译自 blogger.com 的新版网站界面设计者 stop design 网站的文章,如果对原文感兴趣,可以访问 Douglas Bowman 的英文原著

如果您对本译文有任何疑问或者意见,请直接对本 blog 文章发表评论,或者给我发送电子邮件


文章摘要

很多网站已经对 CSS 这片海洋进行了深入充分的测试,现在我们从水底开始欢呼的时候到了,让我们奉劝并鼓励那些还没有跳下水来的人,赶紧加入我们的行列。现在已经没有任何理由继续用表格来排版,也没有理由为不同的浏览器维护同一个网站的多个版本。赶快把表格扔掉吧,相信我们,你不再需要它们了!(译文:巴西葡萄牙语丹麦语法语德语意大利语日语西班牙语土耳其语


Throwing Tables Out the Window

妈妈快看,没有表格哟!

那些参加了今年在西雅图的 Digital Design World 的朋友们可能看到我主持了一场题为“No More Tables, CSS Layout Techniques”的讨论。在讨论中,我们回顾了一下表格的正确用法,以及一些用 CSS 来达到同样目的的方法。然后我们转向无表格排版,列举了一些范例并概括出两种基本的途径:控制位置和悬浮(positioning and floats)。

讨论进行到一半的时候,我改换了风格,宣布我们将就现实中的实例,实现从表格和占位 GIF 图片的排版方式向纯 CSS 排版的转换。我原本可以设置一个虚拟的例子用在讨论中,但是这个看起来会显得非常做作。如果我设置了我自己的例子,它看起来可能会显得漂亮整洁,所有的一切都会被按照我想象的那样被渲染,会避开所有我已知的问题点。
虚拟的还不够好,我要向真实的案例挑战。所以我选择了一个为大部分听众所熟悉的西雅图本地的小公司:

Microsoft

OK,大概并不只有一部分听众熟悉这个并不那么小的公司。很多用户每天都要登录微软网站的官方网站,不管它是不是像搜索巨头 Google 以及 Yahoo! 那样出名或者被经常用到,勿庸置疑的是,每天有数以百万计的用户访问 microsoft.com ,它为我们的互联网带来了极大的流量。

遗憾的是微软并没有竭尽全力优化她的网站。用户下载着不必要的大型页面,服务器为了支持他们浪费着额外的带宽。对于 40KB 来讲,微软首页的 HTML 还算不上是洪水猛兽,但是它负担着无法访问的、七拼八凑的、基于表格并充斥着各种属性的标记,以及一些笨拙的 JavaScript。注意我并没有提到这些是不是有效的标记。尽管它采用了 XHTML 风格,但是微软在其页面上漏掉了 doctype 声明。

为什么是微软?

这是不是仅仅另外一次对微软的挑剔?

直率地,诚恳地说,不是!

我选择微软并不是为了跳上时尚的抨击讲坛,或者向业内人们喜欢讨厌的公司多扔些鸡蛋。(我从未放弃任何机会来置疑微软做出的某些决定,但是我总是避免指责。)

我承认我有意地选择并锁定了一个备受瞩目的公司,我天生喜欢追逐领头羊。不过,作为范例,大部分人都熟悉她。microsoft.com 曾经是(现在仍然是)完美的 CSS 标准改造候选者

以下是原因……

原因 #1
因为它低效率地用大量的表格和占位 GIF 来排版。当内容用表格进行排版后,页面的兼容性会更差,甚至无法访问。并不只有微软有这个问题。目前网络上绝大多数的网站仍然使用大量的表格用于页面排版,或者其它纯粹的视觉目的。我选择微软的网站,是因为它和很多其它网站有着同样的问题,而且它可以作为一个著名的范例(甚至最后成为模范)。

原因 #2
因为微软网站首页当前设计的基本结构和成千上万的网站的设计有着共同的模式:页眉 + 3 栏 + 页脚。进一步讲,页眉横跨整个页面上部,左栏主要包含导航系统,主栏放内容,右栏提供额外的资料,然后页脚在三栏下面同样横跨整个页宽。即使不是三栏式排版,很多网站也可能使用和这个结构类似的二栏式排版:一个边栏放在主栏的左边或者右边:

微软的主页,用三个不同的部分标识出其页面的结构,一个表示页眉+三栏+页脚,另外两个表示页眉+两栏+页脚

原因 #3
因为微软的网站对 CSS 的利用,仅限 FAC (字体和颜色)。我更希望看到这个曾经在应用环境下发明了样式表基础理论的公司,更偏重于 CSS,而非旧的方法。

原因 #4
因为目前微软根据浏览其网站的浏览器的不同,提供网站的不同版本。一个提供给 Windows 的 Internet Explorer (v5.5 及以上),另一个什么 dumbed-down 的版本提供给所有其它的浏览器(包括 IE 和 Mac),它省略了一些图片,以及所有的产品徽记。这个非 IE/Win 的版本去掉了一些功能(如弹出式菜单),并用不同的技术来渲染页面元素。如果您有 IE 5.5 或以上版本,以及另外一个浏览器,您可以自己查看。如果没有,以下是两种不同版本的屏幕截图,并用红色的圈标出了不同的地方:

微软提供的两种不同的首页截图。左侧的(提供给 IE 5.5 或更高版本)与右侧(提供给其它浏览器)的相比,显示了更多的图片,从体上样式更加饱满一些。

非 IE/Win 的版本和为 IE/Win 提供服务的版本相比,明显简陋得多。我们都知道它其实并不需要这样。这并不只是在某些浏览器上能够工作而在其它的浏览器上却不行的草率代码。微软故意做了一个 JavaScript 浏览器探测,当浏览器是 IE 5.5 或更高版本时,它会将浏览器重定向到另一个页面上。其实,微软可以只维护一个能够运行在所有浏览器上的版本。

微软还只是为非 IE/Win 的浏览器用户提供了其网站的另一个版本,有些开发者所做的可能远不止这些。一些网站放弃对其它浏览器提供支持,我们听到的最多的原因是 MSIE/Win 被绝大多数用户使用,同时为任何其它的浏览器提供正确的页面会花费太多时间。有些则抱怨说为 IE/Win 之外的浏览器开发太昂贵。其实,“太多时间”和“太昂贵”的说法并不成立。

很多开发者相信这些说法,因为他们是从为 IE 开发——并在 IE 中检查——开始的。当他们用另一种浏览器来查看的时候就会感到沮丧——他们看到各种各样他们认为必须去修正的 bug。

IE 和其它在近两年不断升级版本的浏览器(Mozilla、Firefox、Safari、Opera……)相比,对 CSS 的理解更加松散。从 IE 开始开发,意味着在开发早期发现的问题会更少一些。先在 IE 上开发,然后尝试更新支持其它浏览器,从长期来看这将增加时间和金钱的消耗。但是,我们有一个更好的办法能够更快更省钱的解决这个问题。

从更严格的浏览器开始开发,这些浏览器通常按照它们应该渲染页面的方式去渲染。先让页面在这些浏览器上运行正常,然后再回来为 IE 做一些“修补”。用这种方式,开发将快得多。虽然初期这样会让页面在您流量分析中出现得绝大多数浏览器上不太直观,但是如果您并不打算习惯——或者依赖——IE 松散的渲染行为的话,这个开发过程要流畅和有效率得多。从 IE 开始开发,您可能会花费更长的时间来修改开始的代码,以便适应更严格的浏览器。

走这条路,我们仍然有 IE 方面的问题需要关注。但是,当我们有了更多关于 IE 错误的 CSS 渲染行为的经验后,IE 方面的问题从一开始就降到最少,这是肯定的。

请说事实

在讨论的后半段,我们从头到尾地经历了将微软基于表格和占位 GIF 排版的页面,转换为更容易访问的、纯 CSS 驱动的版本,使其能在任何浏览器上运行。这并不新潮,以前已经有人对 microsoft.com 进行过重新编码。本站一些常来的读者从事无表格的设计到现在已经一年多了。尽管 CSS 海洋的水已经被公平的全面测试过,但是我们仍然没有看到更多的人跳下水。因此有了 Digital Design World 上的讨论,有了这片文章。

在接下来的讨论中,我们将每个环节分成容易操作的若干个小块。我指出了过程中的主要步骤,包括去掉表格,将它们转换成更容易理解的标记,以及用来忠实重现微软首页设计每一个环节的 CSS 技术。

在整个讨论过程中,我们每个环节都演示了很多形象的东西(图示、截屏、统计图表等)来帮助理解这些渲染技术。我也预先准备了在每个环节需要的文件代码。

撰写此篇文章的其中一个目的,是为了发布对 microsoft.com 进行改造的最终结果,看起来有点让人难忘:

 当前设计
(IE/Win)
当前设计
(其它)
改造后
使用表格40360
占位 GIF35760
总 <img> 标签431226
CSS 背景图片1111
浏览器支持2Most modernMost modern
HTML 文件大小40 KB39 KB15 KB
文件大小减少-3%62%


更多

当我们开始进行 Meyer/Davidson ESPN-style 评价和设计时,这些数字变得更加有趣了。在微软一篇公开的题为“Inside Microsoft”的网页上,微软公布了其流量统计:mocrosoft.com 在 2004 年 5 月获得了 12 亿次的 page view。在以上的讨论中,我显示了如何减少一个页面 62% 的标记,或者说 25 KB。我也同样预言了如果微软能够在整个网站上更加积极的应用 CSS,每页面 25KB 是一个公平的估计。如果乘以平均每天 3870 万次的 page view,每页面 25 KB 的减少每天可以为我们节省约 924 GB 的带宽,也就是每年 329 terabytes

光凭这些数据,就应该足以让一些人回头。

现在,回到现实中,我们改造的仅仅只是一个版本,但这种改造仍然支持微软更多“高级”的设计(就像现在在 IE/Win 中看到的那样),在很多其它流行的浏览器中仍然如此。

不管像微软这样的公司是不是需要只维护其主页的一个版本来支持所有的浏览器,来提高页面加载速促,来使其更容易被所有的用户和设备所访问,我觉得值得指出的是,现在非常容易的展示他们——或者任何公司—— 能够创建一个高级的版本,使用更干净的标记,能支持更多的浏览器,能更容易地被访问。所有的展示花费不过一两小时。

更多要点和警示

  • 如果您感到好奇,并且想更仔细一些,CSS 在改造过程中对原版本仅仅增加了 3KB / 5KB(分别对应 IE/Win 和非 IE/Win 版本)到 8KB。
  • IE/Win 版本左侧导航中两个选项所带有的弹出式菜单一样可以被重现。所有这些都由纯 CSS,简单、易懂且更容易访问的标记实现。当鼠标悬垂到列表父列表条目上时,改造版本用 :hover 伪类(pseudo-class)来开关一个内嵌的无序列表(子菜单)。考虑到 IE 在列表条目上不支持 :hover,所以为了在此浏览器上支持弹出式菜单,微软正在使用的 JavaScript 仍然是必要的。或者类似于 Suckerfish Dropdowns 的东西能够用来保持和改造版本所使用的同样易懂的内嵌列表标记。
  • 微软当前的非 IE/Win 版本上如此大的图片标签缩减主要是来源于占位 GIF 的滥用。另外,非 IE/Win 版本单独调用所有列表强调符图片,而不像其 IE/Win 版本以及改造版本那样,通过一条单独的 CSS 声明来调用。
  • 微软网站上能够找到的所有 JavaScript 标记都被移除了。链接元素上成百上千的属性标记显然是出于点击追踪目的。Microsoft would likely want to add some of this layer back in - though hopefully through a valid means of doing so.
  • 正如前面提到的,此文的目的是为了公布使用 CSS 和更简单的、易懂的标记来构建页面所带来的潜在结果和益处。我们仅仅用微软作为一个注明的范例。此文有意没有给出改造后的代码。我明白很多人能够从本次演讲讨论的成果中学到东西。即使没有参加演讲,也能够从对 HTML 和 CSS 代码的修改上获益。但是,我无意通过公开发表对源代码的修改来贬低任何人在微软的角色。我更倾向于有机会能够直接将它们展示给微软,与合适的团队成员讨论这些改变以及相关技术,如果他们愿意这么做的话。

Labels: , , , , ,