平日里项目紧张,不怎么写blog,也怎么读blog,周末当然是我blog的时间,我尝试着每个周末都写些东西。今天看到了 ceocio 关于 XHTML + CSS 的一个讨论:http://blog.joycode.com/ceocio/archive/2004/09/03/32312.aspx
我看到帖子中大多谈的是下载速度与开发习惯等问题,我想从另一个角度尝试写一些我对这个问题(特别是 CSS)的看法:
首先我给出一个截图,这是 ceocio 举出的一个 XHTML + CSS 制作的页面在 Mozilla 浏览器“眼”中的效果。是不是不够理想啊?(或许看到这里,下面的文章你已经知道我要写些什么了)
浏览器市场
作为 Web 站点来说,大多数时候面向 Internet 公开,你很少会要求访问者必须使用某种特定的浏览器来浏览你的站点(虽然你可以建议,但仍然无法强求),但你还希望能够最大限度的预料到访问者将要看到的页面效果,你还希望这个效果不要过于差劲。
比如 tinydust.net 的访问统计,其实还是有不少用户使用非 IE 浏览器的,而国内很多 Web 作者,特别是 javascript 脚本作者,只会考虑 IE 的效果,丝毫不会顾虑非 IE 浏览器是否有脚本错误,甚至,我见过一个站点,干脆用脚本把非 IE 浏览器访客“拒之门外”!
然后就说 IE,从 4.0 加入 DHTML 功能开始,到 5.0 基本实现 CSS 1.0 和 W3C DOM Level 1,到 5.5 完善了一些 CSS 和 DOM 方面的功能。(而后从 5.5 到 6.0 在 CSS 和 DOM 方面变化不大)由于 Windows 2000 中初始安装的是 IE 5.0,Windows XP 开始初始安装 IE 6.0,而目前 Windows 2000 还有大量用户使用,也就造成了 IE 5.0 在访问者中的比例还是比较大的。目前,各浏览器所占比例大约为:IE 6.0: 三分之一强; IE 5.5 三分之一; IE 5.0 三分之一弱; 其他 10%。
因为 HTML 的标准化工作展开的比较早,各种浏览器在对 HTML 的实现上基本上都是按照 W3C HTML 3.2/4.0/ XHTML 等标准来进行的,可以说,同样的纯 HTML (无脚本及样式等)在不同浏览器下的效果差异是很小的,基于纯 HTML 的页面设计效果是可控的、可以预见的。
回顾一下当年的 IE 和 Netscape 霸权之争:IE 4.x 和 Netscape 4.x 都在自己的浏览器中加入了动态 HTML 的功能:IE 的是 DHTML(包括:DOM, CSS, behavior等),Netscape 也有自己相似的一套(比如现在已经很少见的 layer 标签是 Netscape 4 的标志)。W3C 相关标准的制定进度,远远落在市场的后面,这也造就了后来的混乱。W3C DOM/CSS 等相关标准提出后(CSS 标准其实在 IE 4 之前已经有,但不完善),IE 5.0 起,除了向前兼容 IE 4.0 微软自己的一套 DHTML 外,也针对 W3C DOM/CSS 等标准作了一些调整。
(CSS 的调整幅度小,DOM 的调整幅度还是相当大的,比如 IE 4 中的 document.all 这样的集合并不非 W3C 标准规定中的,而 document.getElementById 方法确是 IE 4 没有、W3C 标准中的方法,IE 5 中添加的。)
当 IE 取得霸权之后,Netscape 没有继续推出 5.x 版本,终结在 4.7;另一方面,开源阵营的 Mozilla 以 W3C 标准为基础,追求对 W3C 标准的完全兼容;Netscape 决定放弃以前那个已经失败的版本,在 Mozilla 基础上增强自己的浏览器,Netscape 6 开始已经完全“脱胎换骨”的版本面世。其他的、市场份额很小的浏览器厂商或作者,在这样的市场条件中,要么臣服于 IE,走兼容 IE 的道路;要么遵守 W3C 的标准,努力追求完全实现 W3C 标准。
技术角度:两大阵营
至此,从技术角度,我们可以把浏览器分为两大阵营:一个是 IE 及其兼容;一个是以 Mozilla 为代表的 W3C 标准浏览器。(当然 IE 5 开始也可以归为后者,但为了兼容 IE 4.x,我们的脚本还是要以 4.x 为准的。)举个例子: document.all 的脚本在 IE/IE-compatible 运行良好,在 Mozilla/W3C-compatible 中运行就可能脚本错误;而 document.getElementById 的脚本在 IE 5+ / Mozilla / W3C-compatible 中运行良好,但对 IE 4.x 无效。
DOM/CSS 标准是好的,但各种浏览器对它们的实现却是复杂多样的,对于多数 Web 页面作者来说,过多的运用 DOM/CSS 将会增加这种复杂性,使得我们的目标——使页面效果可控、可预料——变得更加困难。
并不是绝对的
我写这些的目的是让大家了解浏览器市场的复杂,不要只盯着 IE 浏览器中效果,要让你的站点更友好,容得下更多的浏览器朋友。
网易新版社区 http://newclub.163.com 当前的帖子内容页面,在 Mozilla “眼”中只有标题和结尾,帖子内容完全看不到,就是一个典型的反面教材。
[deleted](我对开头提出的问题的看法是:在浏览器市场份额没有大的变动前,应用 CSS 格式化时也要顾及一下浏览器的差异,在不太影响效果的前提下应用 CSS。)
睡了一觉又想了想,好像文章得到这样一个结论是奇怪的。其实结论应该是:
无论做 Web 开发使用哪种模式(无论是用 table 还是 CSS),都应该有所顾及其他浏览器中的效果。
ceocio 的那个有点问题的效果图,也说明了他做的时候没有考虑过其他浏览器中的效果。
附:下面是一个对比表格,显示了 IE 4/5/5.5 / Netscape 4/6 / Opera 4/5 在 CSS 1.0 实现方面的差异:
http://devedge.netscape.com/library/xref/2003/css-support/css1/mastergrid.html
打印 | 张贴于 2004-09-04 20:35:00 | Tag:暂无标签
留言反馈
但制定标准的人所考虑的一定比作网页的人要全面,所以才会有标准。
只能这样说,不遵守标准可能会出问题,但也可能不出,但兼顾标准在内的多种因素,一定不出问题。
就象买保险,并不是为了出事,只是防备万一,也许这万一不出现,但出现了,可能会很可怕。
我平时经常切换再不用的OS下: WIN/LINUX/OSX
对那些只兼容IE的浏览器深恶痛绝....
话说回来,一个WEB程序员有必要去了解“Web 标准”,至少他需要熟悉W3C的那些标准,但他不一定要去做,这是要依赖于他和他所在团队的能力的
但是,如果一个网页设计师藐视“Web 标准”,他绝对不配称为网页设计师的!
我的是 Mozilla 1.7,依然如旧,你看一下帖子页面,能看到帖子内容吗?
to Ginn:
技术讨论,建议你不要针对个人 :)
很没有专业精神哦,我就这个问题给你发过Email,不过你没没有答复。
事实上如果你不支持,或者显示效果很差,你又怎么得到更多的用户呢?
〉〉有的浏览器象IBM的Dos界面的盲人浏览器听都没听过
不是Dos界面,是home page reader,很不错的产品,我们应该重视accessbility
事实上99%的网站,在Mozilla/firefox里面是正常的,而那1%大部分是中文网站。
中国的网站开发者应该想到什么呢?不敢说写的都是标准,至少测试一下吧。
睡了一觉又想了想,好像文章得到那样一个结论是奇怪的。其实结论应该是:
无论做 Web 开发使用哪种模式,都应该有所顾及其他浏览器中的效果。
ceocio 的那个有点问题的效果图,也说明了他做的时候没有考虑过其他浏览器中的效果。
另外,说到标准,每次我第一个联想到的就是OSI与TCP/IP
例如我:
做企业软件,就要求必须是IE6。
做网站,就只针对IE5做。
做共享B/S软件,就考虑,如果IE的市场吃饱了,再去考虑非IE的。。
例如如果要做像.Text这些应用那么广泛的软件,就应该支持多点浏览器了。
我没有歧视非IE浏览器的意思,我是按我需要的做。
如果真的歧视,那么我岂不是要歧视IE5?
对于选择目标浏览器,那么目的要明确点,
如果只是希望技术上能做到,当然能满足自己的心理需要。
如果是为了提供更好的服务,那么人民会感谢你的。
如果因为这个把项目搞砸了,那么你就是公司的罪人了。
如果我们连汉字标准都不是最权威的,还有谁有资格呢?
因为我不打算放弃只用rss浏览器或者只用atom浏览器的潜在用户,何况做到兼容这两个标准,实在不难。
不知道有多少人知道,RSS的来源?当年Push技术大行其道的时候,微软推出了CDF(频道定义格式文件),而Netscape推出的是RSS。
但后来,Push没落了,而RSS却突然复活了,而且竟然忽如一夜春风雨,到处都流行这玩艺了。前段时间为了玩手机上的RSS阅读器,我去读了一下RSS标准,好象没有那么复杂吧?谁定义不出来?我甚至可以使用Web Service做一个更加充满交互性的RSS,比如我只要最后十条更新,或者我只要哪个时间段的RSS。而且Web service现在已经不止.NET支持了,实现起来更加容易,更加简单。
但就看厂商及各位站长提供不提供支持了。
RSS标准现在也出现了内部,2.0与1.1之争,又有RDF以及Atom来捣乱。所以,标准之争永远会生存下去的。而受益的永远是我们这群使用者。我坚信这一点。
一个商业公司,如果其推出的标准真的非常差,没有任何竞争性,就算其再有钱,再会甩阴谋,他的标准也不会胜出的:)
有时候闲着没事,辩论一下真的挺好。但网络社区就是这样,匿名方式导致大家无所顾忌。
希望这种和平的辩论能够经常举行。大不了我以后办一个实名制论坛来举办这种活动,类似于头脑风暴:)
这样来说,如果客户提出来需求了,比如就是一个绘图程序,你是愿意自己从底层来写还是直接使用GDI+来写,或者是使用一个现成的控件呢?
程序员懒绝对是天生的,不止程序员,大家都在懒,知道最近有人横穿北京二环路被撞死吗?
我手头的数据表示,目前博客堂的受众是6%使用的是Linux,包括我前段时间一直在用Linux测试自己的程序的时候的访问的量,如果他增加到20%,我想我会静下心来就迎合这部分人的感受。因为我懒。
再者,根据我的个人感受,目前博客堂的所有页面在Linux下使用的变形情况并不是非常严重,能够接受,只是不那么美观。
有个办法,可以通过rss浏览器(如:RssBandit)访问博客堂:P
就拿ASP.Net说,各人觉得在模板技术中DIV+CSS的威力极大。:)
但是,他看的时候发现界面很混乱,所以他就不来了。
分析目标客户的时候,我觉得这个问题就象鸡生蛋还是蛋生鸡一样,还是很有意思的。是因为linux用户不来,你才决定不管linux的兼容性的。但是这样的结果是,也许linux用户来了,但是因为兼容性不好就走了,再也不来了。
骂人的事情,其实也无所谓,我相信不会是你弄了个马甲来骂的,对你这点信心我还是有的。
其实标准的问题,我想用题外化来说
如果我做一个小的有图形界面的文件转换程序,我可能会用vc或者bcb,这样我的代码会用到vc的mfc和bcb的vcl,所以肯定不能移植到linux。
但是,我要做一个很复杂的项目的时候,我就认为,我应该把数据转换那个部分用纯c++库风格来写,这样,至少底层是可以移植到大部分平台的,界面做起来各个平台都有RAD,所以也不很难。
网站也是类似,即使你只用ie4/ie5/ie6和w3c的完全兼容的子集,实际上也是完全可以完成客户的需求的。即使客户太挑剔,你也可以加一些js对agent做些判断,然后代换一下代码。
另外,使用标准,我觉得更加重要的意义在于,改变web页面,数据和样式混杂的过去,对程序员来说,这也许是web页面设计的最繁琐的地方,在数据和样式分离的思想下,程序员可以直接设计一些所需要数据的xml/xhtml文件,然后至于页面什么样子,为什么不让美工去自由发挥呢
标准出来了这么久,为什么应用的很少呢?不同浏览器之间的css兼容性是一个大障碍,但是从长远看,IE也会尽量弥合自己和w3c的裂痕。另一个障碍就是基于w3c的,或者比较完美支持的css可视化设计的网页设计工具的缺乏,这个也只好等待相关厂商了。还有的问题就是用户的坚持,我的一个朋友火炬是坚决的firefox用户,他的带动下很多人开始使用firefox(包括我,我之前用myie).他甚至投诉很多大网站对firefox的支持不好,结果是什么,是那些网站确实做了改善。我刚用firefox的时候,sina对firefox的支持也很差,但是上个月的某天,我发现sina的页面,在firefox下面,基本上没有问题了。所以,这也是能改变的。上个月,csdn推《网站重构》那本书,现在我发现很多地方都开始在讨论table思想和xml/css思想的优劣,可能和那本书的介绍有关。
写得太多了,不象评论了,寒
对于标准来说,很多情况下,事实标准会领先于某某协会定主的标准,这也是市场经济的优胜劣汰。
当年WAPI提出的时候,我也是非常充满自豪感,希望这次可以壮大我们的民族产业,可是当看了一些标准分析文章之后(对不起,由于我对这个专业不熟悉,我只能道听途说),感觉就不是那回事,然后,就要标准强制执行时,却烟消云散了。我想问的是,为什么没有继续坚持,提出更好的标准来呢?没有标准,我们如何去抢占市场?
另外,大家看看自己的IE中的编码,会发现里面有一个GB18030的简体中文编码(好象部分Linux也开始支持了),可是有多人在用?它其实是一个GB2132的扩充集,但在它出现没有多久,就被优胜劣汰,让UTF8占据了上风。
另外我们还推出了一个CJK(中日韩)标准,不知道现在的结果如何了。
山东大汉,说话口直一些,如果有说错的地方,希望谅解。
我也使用非IE的浏览器,像我的同事,郑子颖,家里面都使用Mac上网,并不是我们固微软技术而自封的。只是当市场上真有太多标准的话,最终会慢慢趋向统一的,只有真正赢得民心的,才能够得到天下。对吧?:)
毕竟,当一种技术有太多的标准,你在写程序的时候,要考虑多种标准是非常麻烦的事情,我是一个懒人,我相信大部分的程序员都是懒人。
当然,我没有暗示任何“只要是微软的,我们就无条件支持”的意思,最主要的是,让市场去选择。
罪过啊,不应该不修正兼容性就把例子拿出来的。:(
不过,里面还是有很多能说明东西的,比如结构,比如将标题图片,背景图片等耦合元素全部提取到css,使用li等结构化元素替换其他排版标签。
不同的站点,不同的需求。作为一个 Web 站点界面设计与开发人员,当然应该考虑到浏览器的差异性。这是其职责所在。
道理就如同一个数据库结构设计者,如果不考虑其设计对开发及运行的影响的话,他的设计也不会太有价值一样,这同样是其职责所在。
作为你个人,你可以不管你访问的站点是否兼容其它浏览器,因为这不是你的职责;但如果你是 Web 开发者,这只能代表你的工作不到家。
这里是以微软技术为主,访问者以 IE 居多,所以整个博客堂的记录中 IE 就是 100%;当然这也是我选择这个模板而不考虑浏览器因素的主要原因。
另外 ASP.NET 的标准服务器控件都是跨浏览器的,为不同的浏览器返回不同的脚本。如果我们制作服务器控件,也应该做到跨浏览器。这同样是控件开发人员的职责。
另外,我认为不应该忽视第三方浏览器,在Mozilla产生之后,从技术上讲,实际上第三方浏览器和IE已经没有差距了。市场竞争的主要焦点在于,对标准的支持和安全性。
因为在win平台,ie天生的占有率很高,所以我们在数据分析中发现Mozilla的比重很小,但是在最近一年IE重大漏洞频繁出现的情况下,Mozilla的市场占有率有了非常大的提高。
blog.joycode.com是专门关注ms平台的网站,所以用户里面linux用户非常少,这非常正常,但是如果是关注c++或者java或者数据库等平台无关的技术网站也刻意的去忽视对标准的兼容,那么就会失去很有价值的一些用户
事实上,虽然IE的标准和w3c标准有差异,但是,并非不可弥合,而且没有技术层面的IE支持而w3c标准不能支持的,现在是采用w3c的最好的时机
很多人漠视标准,可能以下的一些原因
1、不重视非ms非IE的浏览器
2、目前的开发工具对xml和css支持并不完全,或者结果不符合w3c标准
3、没有深入研究区别
我不想在这里太细的聊这个问题了,毕竟我只是在做一个评论
而且在某网站的传统下,我说的话就算再客观也会挨骂的,哎
在Linux下面,看一些.Text的Skin也会失真,比如你这个页面。
But who care?查看blog.joycode.com的访问者分析,使用非IE浏览器的少之又少:)