zoukankan      html  css  js  c++  java
  • 再谈浏览器的兼容性

    首先,关于CSS hack的方法网上有很多介绍,种类繁多,初学者常常感到很困惑。这类的CSS hack的方法,有的是针对某一个非常特殊的情况的方法,有的则是相对于比较通用的一些方法。

    对于后者我们在平常的学习工作中,可以多留心收集一些,前者则不需要太关注,只是遇到的时候到网上搜索一下,寻找解决方法即可。

    这里举一个比较通用的hack方法,比如对于CSS中的某一个属性,我们希望针对不同的浏览器,设置不同的值。例如,某一个div,我们希望在Firefox中宽度为50像素,在IE中宽度为60像素。那么怎么实现呢?请看如下代码:

    1
    2
    3
    4
    
    #demo div{
         width:50px;    /* FireFox 有效 */
        +width:60px;    /* IE 有效 */
    }

    在上面的代码中, 第2行的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中又会出现错位。

    CSS圆角错位

    而页面的内容层层嵌套,在并不知道细节的情况下,很难找到问题的根源。因此这里使用修补的方法就很方便(尽管不是最优雅完善的方法),例如对于控制圆角图像位置的属性使用上面的方法,分别控制即可。

    总上所述,对任何属性都可以使用加号或者下划线方法,来实现针对不同浏览器的各自设置。当然,最后还是要指出,任何hack方法都要慎重使用,最好还是能够按照标准、优雅的CSS来进行设计,这样的代码可读性、维护性都要好很多,也是我们追求的目标。

  • 相关阅读:
    Scrum Works 1.84安装
    使用Sandcastle Styles 来生成VS2008的帮助文档.
    NDoc 用户指南(转)
    第一章 C#语言基础(C# Language Elements)
    SQL Server 2005 中删除重复记录
    SDE 远程连接
    C# 按钮美化技巧
    SOP 中的 Service
    C# DateTime赋值为null
    C# WebBrowser显示html字符串
  • 原文地址:https://www.cnblogs.com/lzhdim/p/1532820.html
Copyright © 2011-2022 走看看