关于不同浏览器下的CSS中Hack的兼容性

这篇文章主要介绍了各种浏览器下的css hack兼容性写法,css hack大致可以分为内部hack和选择器hack以及html头部引用hack,需要的朋友可以参考下

由于不同浏览器所遵循的标准也有所不同,再加上不可避免的程序bug、经济利益等因素的干扰。同样的网页代码(HTML + CSS),在不同浏览器上的显示效果却略有不同,甚至大有不同。即使是同一个浏览器,其不同版本的显示效果也有所不同,尤其是IE。这就给网页前端设计人员带来了很大的困扰。开发人员必须兼顾考虑到所有主流的浏览器,才能在不同的浏览器上显示出相同或满足需要的效果。于是CSS Hack技术就诞生了。

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

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

   .css-hack {       background-color: red;       background-color: blue; /* 最终背景色显示为蓝色 */}      

CodePlayer

当然,这里有个前提,那就是浏览器首先得能够识别并支持该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的后辈选择器。

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内核浏览器显示蓝色 */    }   }

慎用\0的CSS Hack

网上许多与CSS Hack相关的文章中说,在css的属性值和分号之间添加字符\0,可以实现对IE 8或 IE 9的CSS hack(有的说,仅支持IE8)。

网上的示例是这样的:

.css-hack {       color: red; /* 其他浏览器显示红色 */    color: blue\0; /* IE8、IE9 显示蓝色 */    +color: green; /* IE7 显示绿色 */    _color: brown; /* IE6 显示棕色 */}

通过实际测试发现,关于使用字符\0实现的上述CSS Hack有3点需要注意。

1、IE10也能够识别添加了字符\0的css属性值(笔者这里没有IE 11,不知道IE 11是否也能识别)。

2、属性值和\0之间不能有空格,有一个空格的话(例如:blue \0),在IE 8中就失效了,仅对IE 9/IE 10有效。

3、如果我们只想对IE 8/IE 9进行CSS Hack呢?这个时候,我们去掉后面两行与IE6、IE7有关的代码。

.css-hack {       color: red; /* 其他浏览器显示红色 */    color: blue\0; /* IE8、IE9 显示蓝色 */}

这个时候,在IE 6、IE 7浏览器中,你会发现你看到的不是红色,而是黑色(也就是默认的字体颜色)!

这是因为一般浏览器的思路是,先过滤掉无效的css属性值,然后再从正确的属性设置中根据优先级获取最后面的css属性值。而IE 6/7浏览器不是先过滤掉无效的属性值,而是先根据优先级,获取最后面的css属性值,然后再来判断该属性值是否,无效就忽略掉。因此,如果按照网上所说,仅仅使用\0来实现IE 8+的CSS Hack,则会对IE6/7中的显示效果造成破坏。你必须通过额外的css属性设置来复原IE6/7的样式。

因为,我们不能够简单地下结论说,使用\0可以实现对IE 8、IE 9甚至IE 10 +的CSS Hack。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

如何利用CSS实现标题文字过长部分显示省略号

关于CSS3开启硬件加速的使用和陷阱

以上就是关于不同浏览器下的CSS中Hack的兼容性的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1610313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 01:23:01
下一篇 2025年12月24日 01:23:18

相关推荐

  • 如何利用CSS实现标题文字过长部分显示省略号

    这篇文章主要介绍了css实现标题文字过长部分显示省略号的方法,并且讲解了针对单行文字溢出和多行文字溢出的情况,需要的朋友可以参考下 前段时间在公司移动站的重构,遇到了一个产品列表title的需求是只显示两行,然后超过两行的字符用省略号显示。如下图的效果,当时第一感觉是这个需求只能通过后台输出的时候截…

    好文分享 2025年12月24日
    000
  • 关于CSS background的使用方法

    下面为大家带来一篇css background全部汇总。内容挺不错的,现在就分享给大家,也给大家做个参考。 所有背景属性都不能继承。 1. background-color 所有元素都能设置背景颜色。 background-color的默认值是transparent;也就是说,如果一个元素没有指定背…

    好文分享 2025年12月24日
    000
  • 关于CSS3 rem(设置字体大小)的解析

    本篇文章主要介绍了详解css3 rem(设置字体大小) 教程,内容挺不错的,现在分享给大家,也给大家做个参考。 css3新增了相对单位 rem ,使用rem同em一样皆为相对字体大小单位,不同的是rem相对的是HTML根元素。鉴于很多网友提到了rem,所以我这里就对其中一个总结。 在Web中使用什么…

    2025年12月24日
    000
  • 关于css中清除浮动塌陷的方法

    这篇文章主要介绍了关于css中清除浮动塌陷的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 在大家在使用css的过程中,多多少少会遇到清除浮动这个问题。所以这篇文章给大家总结了p+css中关于清除浮动塌陷的4种方法,相信会对大家学习或者使用p+css能有所帮助,有需要的朋友们下面…

    2025年12月24日 好文分享
    000
  • 关于css过渡和3D效果的简单实现

    下面为大家带来一篇css过渡+3d效果的简单实现。内容挺不错的,现在就分享给大家,也给大家做个参考。 css过渡+3D效果的简单实现 guodu#wp{ border: 1px solid red; width: 500px; height: 500px; background-color: pin…

    2025年12月24日
    000
  • 关于css如何控制背景的分享

    这篇文章主要介绍了css控制背景示例,这里提供了css设置背景图片、设置背景颜色的方法,需要的朋友可以参考下 一、设置背景颜色:background-color 十六进制 background-color:#ff0000;英文名称 background-color:red;三原色 backgroun…

    2025年12月24日
    000
  • 利用CSS实现纯英文数字自动换行

    下面为大家带来一篇css代码使纯英文数字自动换行的简单实现。内容挺不错的,现在就分享给大家,也给大家做个参考。 当一个定义了宽度的块状元素中填充的全部为纯英文或者纯数字的时候,在IE和FF中都会撑大容器,不会自动换行 并且当数字或者英文中带有汉字时,会从汉字处换行,而纯汉字却可以自动换行。这个问题如…

    好文分享 2025年12月24日
    000
  • 关于CSS中的table-cell属性的使用方法

    table-cell属性在处理行内的等高元素排列方面非常有效,下面我们就来看一下css中的table-cell属性使用实例教程,需要的朋友可以参考下 先让我们来研究下table,那些年曾经使用的table布局为何如此辉煌荡漾呢?她的特点有哪些呢?抛弃table的兼容性、seo、加载等与本文无关的内容…

    2025年12月24日 好文分享
    000
  • 如何使用CSS的pointer-events属性实现鼠标穿透效果

    这篇文章主要介绍了关于如何使用css的pointer-events属性实现鼠标穿透效果,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 当pointer-events的值设置为none之后,浏览器将不会获得鼠标在当前位置的层上的点击事件,而造成鼠标穿透的效果!下面就来为大家展开讲解一下…

    好文分享 2025年12月24日
    000
  • css 字体单位之间的区分和字体响应式的实现

    下面为大家带来一篇css 字体单位之间的区分以及字体响应式的实现详解。内容挺不错的,现在分享给大家,也给大家做个参考。 问题场景: 在实现响应式布局的过程中,如何设置字体大小在不同的视窗尺寸以及不同的移动设备的可读性? 需要了解的有: 1.px,em,pt之间的换算关系1em = 16px1px  …

    2025年12月24日
    000
  • CSS中zoom属性和scale属性的用法及区别

    这篇文章主要介绍了css中的zoom属性和scale属性的用法及区别,是css入门学习中的基础知识,需要的朋友可以参考下 zoom 属性语法:zoom:normal | | 默认值:normal适用于:所有元素继承性:有取值:normal:使用对象的实际尺寸。:用浮点数来定义缩放比例。不允许负值:用…

    2025年12月24日
    000
  • 如何实现css绘制透明三角形

    这篇文章主要教大家使用css绘制透明三角形,css绘制三角形很简单,如何绘制透明的三角形,本文为大家解决这个问题,感兴趣的小伙伴们可以参考一下 css实现下图样式,具体像素值记不住了,很好设置,html code (2014百度秋招面试题):                             …

    2025年12月24日
    000
  • 关于css实现右侧固定宽度和左侧宽度的自适应方法

    这篇文章主要介绍了关于css实现右侧固定宽度和左侧宽度的自适应方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 这篇文章主要介绍了css实现右侧固定宽度 左侧宽度自适应,这种布局比较常见,博客园很多默认主题就是这种。一般情况下,这种布局中宽度固定的区域是侧边栏,而自适应的区域是主体…

    2025年12月24日
    000
  • 使用CSS 给表单必选项添加星号的实现方法

    在制作网页表单的时候,如果一个选项是必填的,通常会给选项添加一个星号,下面通过给大家分享使用css 给表单必选项添加星号的实现方法,需要的朋友参考下吧 在制作网页表单的时候,如果一个选项是必填的,通常会给选项添加一个星号,比如 Typecho 的评论表单: 姓名 * 示例:  * 姓名  立即学习“…

    2025年12月24日
    000
  • 关于CSS代码如何书写规范

    这里为大家送上一份CSS代码书写规范究极指南,包括代码注释和命名规范以及空格缩进等一应俱全,都来自大家平时的约定俗成,绝对值得学习借鉴,需要的朋友可以参考下 1.格式化代码1.1文件[建议]:CSS文件使用无BOM的UTF-8编码1.2缩进[强制]:使用 4 个空格做为一个缩进层级,不允许使用 2 …

    好文分享 2025年12月24日
    000
  • 实如何使用CSS保持页面内容的宽高比

    这篇文章主要介绍了如何使用CSS保持页面内容宽高比的方法,作者举了伪元素和vw单元等不同方法下的例子,需要的朋友可以参考下 需求描述:移动端实现横跨页面半圆。(类似问题,实现4×4的正方形网格) 简化问题,我们可以理解为实现一个高度和宽度比为1:2的块。 需要解决问题:        1,…

    2025年12月24日 好文分享
    000
  • CSS3中文字镂空和透明值以及阴影效果的设置

    这篇文章主要介绍了css中文字镂空、透明值、阴影效果设置示例小结,其中通过text-stroke-color透明值的设置可以让文字在某些程度上更加柔和,需要的朋友可以参考下 text-fill-color打造镂空文字:代码 -webkit-text-fill-color:transparent; -…

    2025年12月24日 好文分享
    000
  • CSS3中not()选择器实现最后一行li去除某种css样式的代码

    这篇文章主要介绍了关于css3中not()选择器实现最后一行li去除某种css样式的代码,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 在日常开发中经常会遇到在循环中的最后一个li不同于其他的li,要去除某种css样式,本文介绍的是利用CSS3新增的:not()伪类选择符,实现起来非…

    2025年12月24日
    000
  • 关于CSS图片的优化建议

    这篇文章主要介绍了css图片优化的一些相关建议,主要针对sprites图片整合技术来作简单介绍,需要的朋友可以参考下   CSS图片优化就是尽量压缩图片的大小,加快页面加载速度,这对于大型网站是很有用的。不要小看它,它可以大大提高网页加载速度。通常大家用到的方法就是css sprites。   CS…

    好文分享 2025年12月24日
    000
  • CSS Sprite从大图中截取小图的解析

    这篇文章主要介绍了css sprite从大图中截取小图完整教程的相关资料,需要的朋友可以参考下 相信很多喜欢研究网页界面的童鞋都遇到过一个奇妙的现象:网页中很多图片素材被合成在一张图片上。 起初小菜模仿网站的时候,经常遇到这个现象,那时候也不知道这时什么技术,人家的整张图片素材不会利用,只能用ps切…

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信