解决了IE9下的神奇filter黑背景
追求梦想是一个永不止步的过程,正是因为期间的不容易才让一切变得不是一般的有趣。
昨天发现了IE8的问题,我开始拼死地想做IE9的网页测试。最后,我装了微软的Vitural PC 2007,虽然,那个玩意说不兼容Home Edition,然后我下载了Win7-IE8的镜像文件,在解压过程中波折重重,其中包括首先把硬盘的东西移走,然后修改临时文件夹到最后的得知解压文件大小为近9GB的时候我不得不把原来FAT32的磁盘在数据没有备份的情况下格式化为NTFS。冒了很大的风险,经历N多困难,最后当我能在虚拟机里运行出英文版Win7的时候,那个激动啊!因为我下载的是IE8,需要升级为IE9。首先我需要解决的问题就是我必须让虚拟机上网,好不容易在NAT模式下自动匹配IE上网了,用了很长时间我才明白到这样的IE9升级可以说是不可能完成的任务。
我甚至要狠心装一个虚拟机去测试网页啊!我为什么要这样呢?因为从Goolge的分析数据看来,浏览我网站的人中有40%来自IE9,我必须照顾IE9的效果,同时,在中国,IE8以下是盛行的,所以,IE6-9是我必须面对的问题。
幸好,有网友做我的坚实后盾,帮我在IE9下刷新测试。谢谢他!但,如果可以选择的话,我希望一个人能把这些测试工作都完成好。
都说IE9不理会IE从前一直使用filter,事实证明不然!IE9会CSS3,但IE9没有把filter视而不见,而是偷偷地继续调用了那个滤镜。特别,当CSS3和滤镜同时在一个class里设定的时候,它两种都用上了!恰逢,我今天用到的是CSS的垂直翻转效果。
IE9下CSS3是这么表述的:-ms-transform:translateX(-100%) rotate(-90deg);-ms-transform-origin:right top;
IE9以下的IE版本,filter是这么表述的:filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
只使用filter,IE9下是这个效果。
CSS3和filter都出现在同一个class里,IE9下是这个效果。
只使用CSS3,IE9下是这个效果。
于是,谁还敢说IE9对filter完全没feel呢?如果真的没feel,应该像Chrome或Firefox那样鸟都不鸟,但显然不是。
昨天的问题有解决思路了——精准的浏览器选择!
我一直都觉得应该把代码都写在class里,当遇到IE9的时候kill掉一些。但无论我用filter:;,filter:-;,filter:none;等都无济于事,可能filter根本只能enable和disable。后来,点点的工程师提醒了我,减法不行的话,我可以用加法!我不一定要把代码全部都写在class里,遇到IE9减去,我可以直接不在class里写filter,而当遇到IE9以下IE时再加上!
哇咔咔,就是这个思路了!
所以最终,我在主体class里去掉了filter,在文件头加上了这么一段hack。
1 2 3 4 5 | <!--[if lte IE 8]> <style type="text/css"> .stitch_active > h2,.stitch_header > h2{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);} </style> < ![endif]--> |
地球终于被拯救了!!!!在写这段hack的时候出过一个笑话,我把“lte”写成了“Ite”,幸好被点点工程师发现了!尼玛,lI1(小写L、大写i、数字一)在某些字体下真的很难分辨的说。“lte”的意思是小于或者等于。
累并快乐着真好!