欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

史上最全的css hack(ie6-9,firefox,chrome,opera,safari)

shiping1 的头像

史上最全的css hack(ie6-9,firefox,chrome,opera,safari)

      在这个浏览器百花争鸣的时代,作为前端开发的我们为了我们漂亮的设计能适应各个浏览器可为煞费苦心,主要体现在javascript和css上面。javascript我这次就不谈了,先说说css。
      为了适应不同浏览器不同的版本(版本主要就ie来说),ie这朵奇葩现在我们要兼容6-9,它的10也快出来了。。。在ie下我们可以写条件注释来区分ie和其他浏览器,以及ie的版本,这些请大家自行google。这篇文章主要讨论的是css hack。下面废话补多说了,直接上代码
复制代码
<!DOCTYPE html>  
<html>  
<head>  
    
<title>Css Hack</title>  
    
<style>  
    #test   
    
{   
        width
:300px;   
        height
:300px;   
          
        background-color
:blue;      /*firefox*/
        background-color:red\9;      /*all ie*/
        background-color:yellow\0;    /*ie8*/
        +background-color:pink;        /*ie7*/
        _background-color:orange;       /*ie6*/
    }  
    :root #test 
{ background-color:purple\9; }  /*ie9*/
    @media all and (min-width:0px){ #test {background-color:black\0;} }  /*opera*/
    @media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} }  /*chrome and safari*/
    </style>  
</head>  
<body>  
    
<div id="test">test</div>  
</body>  
</html> 
复制代码
      上面这段代码大家可以直接copy出来,保存成html在各浏览器试试。下面我来分析下:
    background-color:blue; 各个浏览器都认识,这里给firefox用;
    background-color:red\9;\9所有的ie浏览器可识别;
    background-color:yellow\0; \0 是留给ie8的,但笔者测试,发现最新版opera也认识,汗。。。不过且慢,后面自有hack写了给opera认的,所以,\0我们就认为是给ie8留的;
    +background-color:pink; + ie7定了;
    _background-color:orange; _专门留给神奇的ie6;
    :root #test { background-color:purple\9; } :root是给ie9的,网上流传了个版本是 :root #test { background-color:purple\0;},呃。。。这个。。。,新版opera也认识,所以经笔者反复验证最终ie9特有的为:root 选择符 {属性\9;}
    @media all and (min-width:0px){ #test {background-color:black\0;} } 这个是老是跟ie抢着认\0的神奇的opera,必须加个\0,不然firefox,chrome,safari也都认识。。。
    @media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} }最后这个是浏览器新贵chrome和safari的。
 
    好了就这么多了,特别注意以上顺序是不可以改变的。css hack虽然可以解决个浏览器之间css显示的差异问题,但是毕竟不符合W3C规范,我们平时写css最好是按照标准来,这样对我们以后维护也是大有好处的,实在不行再用。
 
    如果给位看官有更好的css hack写法或者本文有不妥之处,欢迎留言,第一次写文章,请轻砸。
标签: css hack
13
0
(请您对文章做出评价)
» 下一篇:ie6,7 location.href 没有权限的出现原因及解决方案
posted @ 2011-08-23 10:11 飘~ 阅读(51167) 评论(8) 编辑 收藏

  
#1楼 2011-08-23 10:54 | kiter  
你能说说@media all and (min-width:0px)和@media screen and (-webkit-min-device-pixel-ratio:0) 这里面的(min-width:0px)和(-webkit-min-device-pixel-ratio:0)的作用啊!~
  
#2楼 2011-08-23 11:02 | 牛腩  
学习一下。。看得有些混乱的。。现在做网页啥也不管了,只求IE 6,7,8,9,FF,CHROME能看得过去就好了。
  
#3楼 2011-08-23 16:09 | dotNetDR_  
能不能根据UserAgent去动态加载css?这个方案如何?
  
#4楼[楼主] 2011-08-23 18:33 | 飘~  
@dotNetDR_
肯定可以但感觉代价有点大
  
#5楼 2011-08-24 09:35 | 追杀  
引用飘~:
@dotNetDR_
肯定可以但感觉代价有点大

这个,看情况,第一次肯定略微有些大,但是随后修改的时候就好多了,比写hack强多了.
  
#6楼 2012-03-31 15:42 | 脚步骆驼  
非常强大.. “\9” 这个命令的确帮我解决问题呢~
  
#7楼 2012-12-19 19:55 | unifyyeteng  
谢谢,解决了我一个兼容。
  
#8楼 2013-02-28 16:05 | 潇潇shell  
博主,首先辛苦你整理了
看了你的文章,学习了很多
其中有两点疑问,希望你帮忙解答
(1)通过我的测试,我发现background-color:yellow\0;这个不只是IE8认识,IE9也认识,我本机是win7,IE9
(2)我把以下两句:
@media all and (min-width:0px){ #test{background-color:black\0;} } /**/ /*opera*/
@media screen and (-webkit-min-device-pixel-ratio:0){ #test{background-color:gray;} }
修改为如下:
@media all #test{background-color:black\0;} } /**/ /*opera*/
@media screen #test{background-color:gray;} }
就是删除了and 及后面的内容,浏览器测试还是和有一样?能否告知去掉的部分的作用是什么?以后要用的话,就直接省略写可以吗?

来自 http://www.cnblogs.com/WuQiang/archive/2011/08/23/2150240.html
普通分类: