css hack技巧详解 IE6-11、Chrome、FireFox、Safari、Opera

 更新时间:2016年9月14日 14:19  点击:1290
下面我们来看一篇关于css hack技巧详解 IE6-11、Chrome、FireFox、Safari、Opera文章,文章写得非常的深入,希望对各位有帮助。


CSS Hack技术,就是利用不同浏览器不同版本之间的CSS实现的特性差异,来满足我们需要的效果:在所有主流浏览器上显示统一的效果,或者为特定浏览器显示特定的效果。

众所周知,如果在一个css样式选择器中存在两个名称相同的属性,浏览器一般会以最后面的属性为准。

<style type="text/css">
.css-hack {
    background-color: red;
    background-color: blue; /* 最终背景色显示为蓝色 */
}
</style>
<div class="css-hack">CodePlayer</div>
当然,这里有个前提,那就是浏览器首先得能够识别并支持该css属性,对于浏览器不支持的css属性或值,浏览器将一律将其忽略。

这就是CSS Hack技术的实现原理。例如:即使我们在属性名称前面加上一个下划线_,IE 6 照样可以识别该属性,而且只有IE 6可以识别。因此,我们就可以利用这个特性,让IE 6实现某些特定的效果。

.css-hack {
    background-color: red; /* 在其他浏览器上显示为红色 */
    _background-color: blue; /* 在IE 6上显示为蓝色 */
}
再者如,由于IE 6不支持max-width属性,但是IE6的css属性值支持expression表达式。因此,我们可以为IE 6 折中实现max-width的属性效果。

.css-hack {
    background-color: red;
    max-width: 200px;
    _width: expression( function(me){ var maxWidth = 200; me.style.width = (me.offsetWidth <= maxWidth ? me.offsetWidth : maxWidth) + "px"; }(this) ); /* _开头只有IE6可以识别,出于性能考虑,此处的表达式只会执行一次 */
}
下面,我们就来探讨IE 6-11、FireFox、Chrome、Safari、Opera等浏览器的CSS Hack技术,以供特定浏览器进行特定属性的识别(国产浏览器一般都使用IE或Chromium内核,因此不予考虑)。

备注:以下内容多搜集于网络(在网络上搜集的时候发现,网上胡说八道的真多……),并进行了亲自测试,以尽量确保准确无误,但由于各种系统平台、语言环境、大版本、小版本等问题,笔者并不能保证没有任何遗漏或错误。如果有读者发现,敬请留言告知。
IE浏览器的CSS Hack

所有的IE浏览器的CSS Hack

由于所有的IE浏览器都能够识别特定的css属性值后缀\9,因此我们可以给css的属性值添加\9后缀(在结尾的分号之前),从而做到只有IE浏览器能够识别该属性,其他浏览器无法识别从而将其忽略掉。

.css-hack {
    background-color: red; /* 其他浏览器上显示为红色 */
    background-color: blue \9; /* 所有IE浏览器上显示为蓝色 */
}
IE 6的CSS Hack

毫无疑问,如上所述,为css的属性前面加下划线_,这是给IE6专用的。

.css-hack {
    background-color: red; /* 其他浏览器上显示为红色 */
    _background-color: blue; /* 只有IE 6浏览器上显示为蓝色 */
}
IE 7的CSS Hack

IE6、IE7都能够识别加了+、*或#前缀的css属性名称,但是IE 7不支持_前缀,而IE6支持。因此,我们可以先写一个*属性、+属性或#属性让IE6、IE7都能识别,再写一个_属性,只让IE6识别,将属性值复原回去,从而让前者只对IE 7生效。

.css-hack {
    color: red; /* 其他浏览器上显示为红色 */
    +color: blue; /* 只有 IE 6、IE 7 浏览器上显示为蓝色 */
    _color: red; /* 让 IE 6 复原为之前设置的颜色 */
}
注意:有些网页上说,只用+、*或者#号的属性前缀就可以只让IE 7进行单独识别。不过经过本人亲测,不管是用IE Tester,还是专门下载一个XP系统,用原版IE 6测试,都表明:IE6、IE7都可以识别+、*或#号的属性前缀。
另外,还有人说,IE 7支持!important,IE 6不支持!important,因此可以通过*属性: 值!important;的形式来实现IE 7的CSS Hack。

实际上,这样也是不行的,因为IE 6不是不支持!important,只是有个bug而已,详情请参见IE6究竟支不支持!important和IE6 IE7(Q) IE8(Q) 不完全支持!important规则。

使用!important来实现IE 7的CSS Hack,必须是在同一个样式选择器中,而且同样需要在后面加_属性来复原IE 6的设置(这种方式还麻烦点,上面的方法还少写个!important)。

.css-hack {
    color: red; /* 其他浏览器上显示为红色 */
    *color: blue !important; /* 只有 IE 6、IE 7 浏览器上显示为蓝色 */
    _color: red; /* 让 IE 6 复原为之前设置的颜色 */
}
此外,IE 7也支持在选择器前添加*+html ,让当前选择器成为*+html的后辈选择器,只有IE 7可以识别此类样式选择器(据说某些旧版本的Opera浏览器也能识别,不过这些版本早已作古了,无需考虑)。

.css-hack {
    color: red; /* 其他浏览器显示红色 */
}
*+html .css-hack {
    color: blue; /* 只有IE 7显示蓝色  */
}
IE 7还支持在选择器前添加*:first-child+html,让当前选择器成为*:first-child+html的后辈选择器。

.css-hack {
    color: red; /* 其他浏览器显示红色 */
}
*:first-child+html .css-hack {
    color: blue; /* 只有IE 7显示蓝色  */
}
IE 8的CSS Hack

只有IE8支持嵌套如下@media类型查询语句:@media \0screen。

.css-hack {
    color: red; /* 其他浏览器显示红色 */
}

@media \0screen {
    .css-hack { color: blue; } /* 只有IE 8显示蓝色 */
}
IE 9的CSS Hack

没找到一个靠谱的。

IE 10的CSS Hack

没找到一个靠谱的。

IE 11的CSS Hack

没找到一个靠谱的。

IE 6 + IE 7 的CSS Hack

如上所述,只有IE 6、IE 7可以识别加了+或*号的属性前缀。

.css-hack {
    color: red; /* 其他浏览器显示红色 */
    *color: blue; /* IE 6、IE 7显示为蓝色 */
}
FireFox、Chrome、Safari、Opera的CSS Hack

FireFox的CSS Hack

FireFox支持嵌套其专用的css语句:@-moz-document url-prefix()。

.css-hack {
    color: red; /* 其他浏览器显示红色 */
}

@-moz-document url-prefix() {
    .css-hack {
        color: blue; /* 只有FireFox显示为蓝色 */
    }
}

Chrome、Safari等Webkit内核的浏览器的CSS Hack

Chrome、Safari等采用webkit内核的浏览器支持媒体类型查询语句:@media screen and (-webkit-min-device-pixel-ratio:0)。

.css-hack {
    color: red; /* 其他浏览器显示红色 */
}

@media screen and (-webkit-min-device-pixel-ratio:0) {
    .css-hack {
        color: blue; /* Webkit内核浏览器显示蓝色 */
    }
}

[!--infotagslink--]

相关文章

  • photoshop打开很慢怎么办 ps打开慢的设置技巧

    photoshop软件是一款专业的图像设计软件了,但对电脑的要求也是越高越好的,如果配置一般打开ps会比较慢了,那么photoshop打开很慢怎么办呢,下面来看问题解决办法。 1、...2016-09-14
  • Jquery Ajax Error 调试错误的技巧

    JQuery使我们在开发Ajax应用程序的时候提高了效率,减少了许多兼容性问题,我们在Ajax项目中,遇到ajax异步获取数据出错怎么办,我们可以通过捕捉error事件来获取出错的信息。在没给大家介绍正文之前先给分享Jquery中AJAX参...2015-11-24
  • php语言中使用json的技巧及json的实现代码详解

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
  • 基于PHP给大家讲解防刷票的一些技巧

    刷票行为,一直以来都是个难题,无法从根本上防止。但是我们可以尽量减少刷票的伤害,比如:通过人为增加的逻辑限制。基于 PHP,下面介绍防刷票的一些技巧:1、使用CURL进行信息伪造$ch = curl_init(); curl_setopt($ch, CURLOP...2015-11-24
  • 图解Sublime Text3使用技巧

    通过本篇文章给大家介绍Sublime Text3使用技巧的相关知识,对sublime text3技巧相关知识感兴趣的朋友一起学习吧...2015-12-24
  • 从chrome调试工具中把拖延时间的东西找出来

    我打开android开发手册的时候:http://www.csdn123.com/html/android/reference/packages.html 发现打开速度很慢,我用按了一下F12打开调试面板,切换到网络的选项卡network...2016-05-19
  • 利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)

    这篇文章主要介绍了利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化),本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-24
  • Python爬虫必备技巧详细总结

    本篇文章介绍了我在爬虫过程中总结的几个必备技巧,都是经过实验的,通读本篇对大家的学习或工作具有一定的价值,需要的朋友可以参考下...2021-10-22
  • 分享12个非常实用的JavaScript小技巧

    这篇文章主要介绍了分享12个非常实用的JavaScript小技巧,这些小技巧可能在你的实际工作中或许能帮助你解决一些问题,需要的朋友可以参考下...2016-05-14
  • Illustrator像素级完美绘制经验技巧分享

    今天小编在这里就来给Illustrator的这一款软件的使用者们来说一说像素级完美绘制的经验技巧,各位想知道具体信息的使用者们,那么下面就快来跟着小编一起看一看。 给...2016-09-14
  • Chrome插件开发系列一:弹窗终结者开发实战

    从这一节开始,我们将从零开始打造我们的chrome插件工具库,第一节我们将讲一下插件开发的基础知识并构建一个简单但却很实用的插件,在构建之前,我们先简单的了解一下插件以及插件开发的基础知识...2020-10-03
  • 前端开发必知的15个jQuery小技巧

    本文主要介绍了前端开发必知的15个jQuery小技巧。具有很好的参考价值,下面跟着小编一起来看下吧...2017-01-26
  • MySQL中的binlog相关命令和恢复技巧

    操作命令:复制代码 代码如下:show binlog events in 'mysql-bin.000016' limit 10;reset master 删除所有的二进制日志flush logs 产生一个新的binlog日志文件show master logs; 或者 show binary logs; 查看二进制文...2014-05-31
  • 兼容ie和firefox css alpha实现透明效果

    文章介绍了利用了css hack来实现兼容ie和firefox 的div透明效果,有需要的朋友可以参考一下,好了费话不说多了。 为了实现一些特殊效果,需要将页面元素变透明,本文介...2017-07-06
  • MySQL编程中的6个实用技巧

    每一行命令都是用分号(;)作为结束对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的分号省略掉,例如: 复制代码 代码如下: mysql_query("INSERT INTO...2015-03-15
  • c# Linq常用的小技巧

    这篇文章主要介绍了c# Linq常用的小技巧,文中讲解非常详细,示例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-11-03
  • CSS不得不掌握的技巧【清除float浮动】

    本文我们来讲讲CSS必备掌握的重点:清除float浮动clear,掌握此内容,可以让你在css+div布局中,一些浮动问题得心应手。 一、浮动产生原因 一般浮动是什么情况呢?一般是...2016-09-14
  • chrome监听cookie变化与赋值问题

    这篇文章主要介绍了chrome监听cookie变化与赋值问题,cookie监听与赋值操作需要manifest文件里声明权限问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-10-22
  • mysql中coalesce()的使用技巧小结

    在mysql中,其实有不少方法和函数是很有用的,这次介绍一个叫coalesce的,拼写十分麻烦,但其实作用是将返回传入的参数中第一个非null的值,下面这篇文章主要给大家介绍了在mysql中coalesce()使用技巧的相关资料,需要的朋友可以参考下。...2017-06-21
  • 如何写软文?软文写法技巧

    我们很多人都感觉软文的力量强大,如春风化雨,润物细无声!等你发现这是一篇软文的时候,已经完了,因为你至少脑海中有这种印象了!对于软文来说,这是一种成功! 很多人写软...2016-10-10