Css gray 无法覆盖IE10

网站变灰这个效果很常见,在我这里暂时没有找到最优解决方式,

先把今天的研究结果记录一下。

第一种方案 :

对所有静态资源文件进行灰度处理,得到新一个资源目录,例如asset_ori 原始资源    asset_gray灰度资源,将文件映射指向灰度资源

这里面包括对img以及css中所有颜色属性的处理,css里面最好不要有red,green这种字母颜色,但是还是会有#xyz,rgb(x,y,z),rgba(x,y,z,o)

灰度算法

临时变量=(原红色值*30+原绿色值*59+原蓝色值*11)/100; 
原红色值=临时变量;
原绿色值=临时变量;
原蓝色值=临时变量;

第二种方案 CSS方案:

针对IE10以下    filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);

针对IE10    不支持filter

针对chrome    filter:grayscale(1);

针对firefox    filter: url(desaturate.svg#grayscale);  利用svg,经测试,发现只能运用在img元素上,其他元素上运用直接不可见了

针对Opera     暂未找

第三种方案 js方案

不说性能,先说原理,利用canvas对图片进行灰度处理,得到base64的新图像数据,可以直接设置在img的src或者element的backgroud-image上。

为了达到这个目的,可以在样式中预留出需要重新编译的部分,比如 .add.gray,  .upload.gray,使用js将里面的background-image重新设置

这个方案最终接近于第一种方案,只不过处理的动作和时间放在了客户端

 

三种方案比较

第一种是完美的,可以写个通用程序处理,工作量也不大,但是对于海量图片,这磁盘消耗就X2了,如果再有CDN,那消耗就更大了

第二种很便捷,不完美,有浏览器兼容问题。

第三种看起来很美,能完美处理,处理动作和时间都放在了客户端,只是优化的问题还需要再考虑

综合起来

我倾向于三种综合处理,根据场景,1||1+2||1+2+3,尽可能地利用原生CSS的能力

 

 

posted @ 2013-10-06 19:10  web 的世界  阅读(1463)  评论(0编辑  收藏  举报