浏览器标准的重要性

兼容与完美,在网络的领域里是不能共存的;至少,没有两全其美的时候。

说话DF我为了通过W3C对于Xhtml和CSS所设定的标准检查,千辛万苦的把那些顽固不化的Wordpress插件整理了一遍。

终于在06年1月23日23时得到了神的爱护……xhtml transitional valid and css (profile 2) valid

然而在06年1月24日0时我发现神的爱护是有代价的:

width: 300px;
/* ie5win fudge begins */
voice-family: "\"}\"";
voice-family:inherit;
width: 270px;
}

不知道是谁想出了这种“办法”,用定义两次Width的方式解决了兼容问题。

IE5并不能正确读取voice-family: “\”}\””; voice-family:inherit;这两段,所以在读取第二个Width前就放弃读取#content了。从而它的Width是300px;反之,由于IE6支持voice-family: “\”}\””;voice-family:inherit;因此第二个Width值就会覆盖第一个Width值,最终得出Width=270px。这样便能在同一个Class里定义两个Width值。

(而实际上这是重复定义的典型,不过并不会在其他浏览器产生问题。)

2。同时支持Firefox和IE。

!important是CSS1中就有的定义语句,用以提升某个CSS值的优先级。

例如

background:url('1.png') !important;
background: transparent;
filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='1.png', sizingMethod='scale');
height: 128px;
width: 128px;

这也是重复定义的运用,由于IE并不支持!important,所以第二条background的值就会覆盖第一条的值,并用AlphaImageLoader读取图片1.png。而其他核心的浏览器支持!important,background值不会被覆盖,所以也正常显示图片。

(真正引起错误的是progid: DXImageTransform.Microsoft.AlphaImageLoaderCSS的正规定义里没有他们,实际上,Filter和网页过渡一样,本来就是IE自身的CSS。)

没有办法,硬着头皮改吧。

总结:兼容,理所当然;然而权衡利弊,为了今后网络服务的快速发展,IE你也是时候反省一下自己了,别老要我们用户出力啊。

附,延伸阅读:

1。PNG 文件在 Internet Explorer 6.0 中不显示为透明
2。Windows Explorer vs. the Standards(英文)
3。Understanding and Solving Internet Explorer Leak Patterns(英文