回答读者提问(19)——再谈浏览器的兼容性
关于浏览器的兼容性问题,我写过一篇小文章,《回答读者提问(12)——关于CSS在不同浏览器的调试经验》。今天在就这个问题,谈一些制作中的技巧。
首先,关于CSS hack的方法网上有很多介绍,种类繁多,初学者常常感到很困惑。这类的CSS hack的方法,有的是针对某一个非常特殊的情况的方法,有的则是相对于比较通用的一些方法。
对于后者我们在平常的学习工作中,可以多留心收集一些,前者则不需要太关注,只是遇到的时候到网上搜索一下,寻找解决方法即可。
这里举一个比较通用的hack方法,比如对于CSS中的某一个属性,我们希望针对不同的浏览器,设置不同的值。例如,某一个div,我们希望在Firefox中宽度为50像素,在IE中宽度为60像素。那么怎么实现呢?请看如下代码:
1 2 3 4 | #demo div{ width:50px; /* FireFox 有效 */ +width:60px; /* IE 有效 */ } |
在上面的代码中, 第2行的width:50px这是普通的样式,下一行中,在width属性前面加一个加号,这条样式在Firefox中被认为无效,但是在IE中这个加号会被忽略掉,因此仍然被理解为width属性,从而覆盖上一条的设置,这样就可以区分Firefox浏览器和IE浏览器了。
那么如果希望进一步区分IE 6和IE 7呢?请看如下代码:
1 2 3 4 5 | #demo div{ width:50px; /* FireFox 有效 */ +width:60px; /* IE 7 有效 */ _width:70px; /* IE 6 有效 */ } |
上面代码就可以实现对三种浏览器的区分了。在IE7中,属性前加一个加号,这个加号会被忽略,而如果在属性前加一个下划线这整条样式会被忽略,从而实现了对这三种主流浏览器的区分。
到这里,我们自然会想到,什么情况下会用的这种方法来区分浏览器呢?我们要制作的页面,通常会有两种情况,一种是彻底从头开始做,另一种是基于一个已经存在的网页进行修改或者修补。
对于第一种情况来说,我们对网页的每一个细节都十分清楚,因此并不经常遇到非常Firefox和IE的兼容性问题,即使遇到了,一般也可以找到其他方法解决。而对于第二种情况来说,则复杂的多了,因为一个网页可能非常复杂,层叠关系也很复杂,对于后接手的人,很难搞清楚某一个的属性上面有多少层设置会对他产生影响,因此往往只能采用“贴膏药”的方式进行修补。
比如说,如下的一个页面的最终效果,在制作圆角框的时候,在IE中,圆角对整齐之后,在firefox中却出现如图所示的错位,而如果按照Firefox调整好,在IE中又会出现错位。

而页面的内容层层嵌套,在并不知道细节的情况下,很难找到问题的根源。因此这里使用修补的方法就很方便(尽管不是最优雅完善的方法),例如对于控制圆角图像位置的属性使用上面的方法,分别控制即可。
总上所述,对任何属性都可以使用加号或者下划线方法,来实现针对不同浏览器的各自设置。当然,最后还是要指出,任何hack方法都要慎重使用,最好还是能够按照标准、优雅的CSS来进行设计,这样的代码可读性、维护性都要好很多,也是我们追求的目标。
7,388


firfox浏览器怎么设置啊?
老师好!请教个问题。我仿新浪做了个FLASH翻牌效果广告,是JV调用的。在IE6可以正常浏览,在IE7里页面时一片空白。看到老师的这篇文章,受到一些启发。只是仍不明白,我遇到的该类问题,该如何解决呢?望赐教!谢谢!
老师,请问怎么让解决ie6不支持margin负值的问题呢?
bolo ,
IE6 也是支持负margin的啊?没有不支持吧?
原来区分ie和ff可以简单成这样!谢谢老师了!
bolo ,
这是万不得已的方法,能不用尽量不用才好!
用多了有什么后果?能说说吗?
sky,
弊端是,以后你再要修改页面的时候,可能会遇到麻烦。
什么麻烦呢?能具体说说吗?IE8已经出来了IE8的兼容问题怎么解决呢?
IE8根本就不等于FireFox 显示的结果啊,有一定区别啊
sky,
IE 8 很好,基本上颌FIRFOX没有区别。
我说的麻烦是,如果用了这些特殊的hack方法,将来你要修改页面的时候,就要顾及这些hack,有可能由于这些hack导致本来正常的效果,又不正常了。
safari浏览器怎么安装起来不能使用啊?会出现一个错误的对话框!请高手解决下,你们用这款浏览器的感觉如何啊?会有和firfox和ie不同的效果吗?
我用的机器自带safari浏览器,用起来感觉很舒服,也很人性化。就是挺多网站用safari会出现布局紊乱,甚至是一些非常正规有名的网站:比如智联。
safeiluosi,
如果一个网页在Firefox下看着正常,在Safari下一般不会有问题,比如我们这个视频教室页面,制作的时候没有用Safari测试过,但后来用Safarikan,完全正常。
兼容问题还真是麻烦呢!做一个模板还得安装几个浏览器啊?三个浏览器能同时安在一个机子上吗?
没问题,可以的。Firefox本来就和IE不打架,然后IE6 和IE7可以找到并存的方法。你可以在Google上搜索一下“IE6 和IE7并存”,有很多网页说明具体怎么操作。其他浏览器也都不会打架,你愿意装上也可以,比如opera,safari等等。
此外,如果你的机器上已经装的是IE7,可以试试“Multiple IE”这个软件,可以安装上IE5/5.5/6。但是我自己没试过。
温大人 是不是IE6和火狐通过了的话IE7必过?
米奇 ,
No,你还是都测试一下比较好!
老师,
请问background-position是对背景图片的位置(例如要图片显示再浏览器中间)进行定位还是对图片(例如一个很大图片我只要它中间部分显示)本身进行定位,
tt,你好!
你说的这两点实际上是一样的,比如设置为center,那么就是背景图片的中心点和浏览器窗口的中心点对齐,至于背景图片是否显示完全,那就看二者的大小了。如果背景图片比浏览器窗口大,就只显示中心的那部分。
另外,给你一个建议,实际上对于类似的问题,你自己写几行简单的代码试验一下,一下子就知道答案了。就像《CSS设计彻底研究》的前几章中,我们使用的方法——“做试验”,经过做几次试验,找到其中的规律,这样就真正把原理搞懂了。就像中学学数学,如果没有真正理解公式的原理,死记硬背,做题的时候就很难,如果真正把其中的原理搞懂,做题就是自然而然的了。
好长时间没有来前沿了,呵呵,还记的我吗?《CSS彻底研究》这本书也出来了,可我不急着买了,我的网站也停下来了,我喜欢CSS网页布局,可我在这接下来的半年里我不能再学习它了。我参加了江西省的IBM培训,那里上课太紧张了,没有一点时间干别的,不过培训完之后我一定会回来再学下去的。最后祝福前沿的工作人员新年快乐,等着我回来哟!
焦飞龙,
好啊,谢谢你的支持!祝你学习顺利!