全面CSS Hack 解决方法

2010-03-18 11:19:19 by 【6yang】, 50 visits, 收藏 | 返回
CSS Hack是在标准CSS没办法兼容各浏览器显示效果时才会用上的补救方法,在各浏览器厂商解析CSS没有达成一致前,我们只能用这样的方法来完成这样的任务.

我进行前端开发的时候,测试用的浏览器大致有: IE7, IE6, Opera9(文章撰写时版本为9.25 8825), Safari3(文章撰写时版本为3.0.4 523.15), Firefox2(文章撰写时版本为2.0.0.11).

在正常的 selector { property:value; } 的基础上常会根据具体情况为相同元素使用Hack以达到浏览器间统一.




IE系列:
===========================================================================================
selector { +property:value; } 在属性名前加上加号"+",这个Hack只有IE系列可以识别.
selector { *property:value; } 在属性名前加上星号"*",这个Hack只有IE系列可以识别.
selector { _property:value; } 在属性名前加上下划线"_",这个Hack只有IE系列 (除IE7外) 识别.
* html selector{ property:value; } 在选择器上运用继承法 * html selector, 这个Hack只有IE系列 (除IE7外) 可以识别.
html/**/ >body  selector { property:value; } 在选择器上运用继承法 html/**/ >body  selector ,这个Hack只有IE系列 (除IE7外) 可以识别.
selector { property/**/:value; } 在属性名和冒号":"之间加入注释,屏蔽IE6用.
selector/**/ { property/**/:value; } 在选择器和花括号"{"之间以及在属性名和冒号":"之间加入注释,屏蔽IE5和IE6用 (不屏蔽IE5.5) .
select/**/ { property:value; } 在选择器和花括号"{"之间加入注释,屏蔽IE5用.
*+html  selector { property:value !important; } 在选择器上运用继承法 *+html selector 再加上 !important, 这个Hack只有IE7可以识别.


********************************************************************************************

Firefox:
===========================================================================================
*:lang(lang) selector { property:value !important; } 用伪类lang(语言)再加上!important进行定义的话,目前只有Firefox可以识别.



********************************************************************************************

Opera:
============================================================================================
@media all and (min-width: 0px){ selector { property:value; } } 利用特殊继承法进行定义的话,目前只有Opera可以识别.


CSS盒模型在IE5.X上是有严重解析错误的.这个Hack针对IE5.X:

selctor { width:IE5.X宽度; voice-family :""}""; voice-family:inherit; width:正确宽度; }

清除浮动Hack,相信这个定义用的人很多:

selector:after { content:"."; display:block; height:0; clear:both; visibility:hidden; }




=====================================================================================
**********************             CSS HACK                  ************************
=====================================================================================

浏览器BUG处理方法整理(部分),供喜欢网页设计的朋友共享:
1. 星号*
   IE都能识别*,标准浏览器如FF不能识别*。
   例:p { color:yellow; *color:red;}
   类似的有
   + 加号
   只有IE解释
   p{color:red; +color:blue}
   IE 显示blue  FF显示 red
2.!important
   IE6及以下将会忽略该样式,IE7 FF将支持;
   p{color:red !important;color:yellow;}
   IE7 FF将红色  IE6显示黄色
   此处注意的是!important方法只是按上述格式后才被IE6及以下忽略,除此之外的提高样式权重方法可通用。
3.下划线。
   IE6及以下版本将运用该样式,其他将忽略
   p{color:red; _color:blue}

4、注释:    
    p {color:red};      
    这种样式在IE6中是可以应用显示的,而在IE5及以下版本是不会被处理的,所以可以针对IE5/6进行区别
5、@IMPORT:
    在@IMPORT中使用URL来导入样式,标准用法是将URL中的值带上引号,如下@IMPORT URL("newstyle.css");这种用法  可以被IE5以上的浏览器及FF支持,从而实现了IE4的样式单独处理.
    另外,还有一个方法:
    @IMPORT URL("noie.css") screen;
    screen是用于指定设备类型的选项,screen用于屏幕显示,print用于打印设备显示但是IE对这种方法不支持,,所有的IE浏览器, 从而可以进行IE和FF的区别。
6、属性选择符:    用于对具有特定属性的对象进行选择
    span[class=left]{color:blue}      
    span[title]{color:red;}    
   IE6不支持,但是在FF里面工作正常,所以可以对IE和FF进行分别处理.
    在实际开发中,经常要对IE和FF进行分别处理,可以用如下代码:
    #content{
    color:red;
    }
    [xmlnx] #content{
    color:blue
    }
   此种方法我觉得很实用,也经常用,推荐朋友使用,如需更详细的说明,我可以再发贴。
7.子对象选择符:
   span>p{color:red}
   IE6也是没有支持,也可用来区别IE和FF
8、Tantek方法
   #content{
               color:blue;
               voice-family:""}"";
               voice-family:inherit;
               color:red;
   }
   上面的代码在使用了voice-family之后下面的color:red,将不会被IE5.5及以下浏览器所解析.因此在IE6/7/FF上文本颜色将呈现红色,在IE5.5及以下浏览器上将呈现蓝色;
   另外,voice-family还有一种处理方式:
   #content{
                color:red;
                voice-family:"}"
                voice-family:inherit;
                color:blue;
   }
   使用这个方法,将使IE6及以下版本浏览器与FF浏览器的文字都呈现红色,而IE5及以下版本浏览器呈现蓝色!
9、转义属性
    p{width:200px;}
    IE5.5 以下将忽略。注意:反斜线字符不能出现在0-9或字母a-f前面
10、IE中的条件注释
一、条件注释简介
    IE中的条件注释(Conditional comments)对IE的版本和IE非IE有优秀的区分能力,是WEB设计中常用的
    hack方法。
    条件注释只能用于IE5以上。
    如果你安装了多个IE,条件注释将会以最高版本的IE为标准。
    条件注释的基本结构和HTML的注释(<!– –>)是一样的。因此IE以外的浏览器将会把它们看作是普通的
注释而完全忽略它们。
    IE将会根据if条件来判断是否如解析普通的页面内容一样解析条件注释里的内容。
二、条件注释属性
    gt : greater than,选择条件版本以上版本,不包含条件版本
    lt : less than,选择条件版本以下版本,不包含条件版本
    gte : greater than or equal,选择条件版本以上版本,包含条件版本
    lte : less than or equal,选择条件版本以下版本,包含条件版本
    ! : 选择条件版本以外所有版本,无论高低
三、条件注释使用方法
    注意把代码中的<>换成英文中相应的大于或小于号
    <!--[if IE 5]>仅IE5.5可见<![endif]-->
    <!--[if gt IE 5.5]>仅IE 5.5以上可见<![endif]-->
    <!--[if it IE 5.5]>仅IE 5.5以下可见<![endif]-->
    <!--[if gte IE 5.5]>IE 5.5及以上可见<![endif]-->
    <!--[if ite IE 5.5]>IE 5.5及以下可见<![endif]--><!--[if !IE 5.5]>非IE 5.5的IE可见<![endif]
    -->
    下面的代码是在非IE浏览器下运行的条件注释
    <!--[if !IE]><!-->您使用不是 Internet Explorer<!--<![endif]-->
    <!--[if IE 6]><!-->您正在使用Internet Explorer version 6或者 一个非IE 浏览器<!--<![endif]-->
分享到:
share

    图片原图

    loading

    loading