博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IE8下实现兼容rgba
阅读量:7227 次
发布时间:2019-06-29

本文共 1299 字,大约阅读时间需要 4 分钟。

昨天遇到一个问题,要实现一个背景透明的效果,用CSS3用rgba()就能实现,即

background: rgba(0,0,0,.5);

但是要兼容到IE8,就发现没有透明效果,因为IE8不支持rgba()函数。下面我们总结一下rgba()函数的含义。

rgba的含义,r代表red,g代表green,b代表blue,a代表透明度。红绿蓝是三原色,所有颜色都可以由这三种颜色拼合而成。比如rgba(0,0,0,.5)就是透明度为0.5的黑色。现代浏览器是支持rgba的,但是在IE8等古董级浏览器中是不支持rgba的,IE8只能勉强支持rgb()函数(即去掉了透明度,只能表示颜色)。

不过网上有这样的解法

background: rgb(0, 0, 0);    /*不支持rgba的浏览器*/background: rgba(0,0,0,.5);  /*支持rgba的浏览器*/filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#7f000000,endColorstr=#7f000000);    /*IE8支持*/

第二句话的意思就是当上一行的透明度不起作用的时候执行。这句话的意思本来是用来做渐变的,但是这个地方不需要渐变。所以两个颜色都设置成了相同的颜色。

解释下#7f000000,第一部分是#号后面的7f。是rgba透明度0.5的IEfilter值。从0.1到0.9每个数字对应一个IEfilter值。对应关系如下:

图片描述
第二部分是19后面的六位。这个是六进制的颜色值。要跟rgb函数中的取值相同。比如rgb(0,0,0,)对应#000;都是黑色。

到这里,rgba的用法就可以兼容IE8了。

最近看到,不直接在样式里面添加filter,而是利用<!--[if IE]><![endif]-->来为ie添加filter兼容。在过后又发现IE9同时支持RGBA和filter,导致两个重叠,透明效果变差,所以需要改为<!--[if lt IE 9]><![endif]-->,

具体做法如下:

// 此方法感觉略显麻烦,需要维护两个地方的代码。改为下方做法

IE9同时支持RGBA和filter,会导致两个重叠,透明效果异常。有网友评论,建议用 :root 来去除 ie9+ 浏览器的 filter,也是很不错的办法,在此改为以下做法

.color-block {        background: rgb(0, 0, 0);    /*不支持rgba的浏览器*/        background: rgba(0,0,0,.5);  /*支持rgba的浏览器*/        filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#7f000000,endColorstr=#7f000000);     }        :root .color-block {        filter: none;    }

转载地址:http://sokfm.baihongyu.com/

你可能感兴趣的文章
Netty Channel源码分析
查看>>
基于 HTML5 WebGL 的 3D 机房
查看>>
Java编程——数据库两大神器:索引和锁
查看>>
springMvc学习笔记(2)
查看>>
吐槽Javascript系列二:数组中的splice和slice方法
查看>>
什么是Javascript函数节流?
查看>>
MQ框架的比较
查看>>
oschina
查看>>
Octave 入门
查看>>
深度学习入门:10门免费线上课程推荐
查看>>
React组件设计模式(一)
查看>>
E-HPC支持多队列管理和自动伸缩
查看>>
express + mock 让前后台并行开发
查看>>
30天自制操作系统-2
查看>>
小程序开发之路(一)
查看>>
Odoo domain写法及运用
查看>>
JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
查看>>
猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
查看>>
面试题:给你个id,去拿到name,多叉树遍历
查看>>
go append函数以及写入
查看>>