我正在尝试在一个页面上展示一些图片,它们应该以灰度显示,除非鼠标悬停在上面时它们才会平滑地过渡到彩色。我已经成功地在IE、Chrome和Firefox上实现了它,但是在Safari 5.x上无法工作。问题出现在Mac版和Windows版的Safari浏览器上。以下是我目前的代码:
filter: url('desaturate.svg#greyscale');
filter: gray;
-webkit-filter: grayscale(1);
第一行加载一个外部的.svg滤镜(我不使用
url("data:
...规则内联它,因为我想避免在旧版本Firefox中的错误)。第二行是为IE设置的,看起来与
filter:progid:DXImageTransform.Microsoft.BasicImage(grayScale=1);
一样有效。关于webkit的最后一行应该适用于Safari 6及以上版本,以及Chrome。
在Safari 5.x上有没有显示灰度图像的CSS规则?或者,如果不可能,可以有人推荐一个JavaScript解决方案,最好能处理灰度图像的动画效果?我想避免使用服务器端hack来生成灰度图像,因为那会搞乱我的HTML,然后我就必须进行一些恶心的浏览器检测来有条件地提供HTML。
谢谢。 编辑:
由于这已经成为一个“值得注意的问题”,请不要在此处发布仅适用于Safari 6及以上版本或包含数据URL中的.svg文件的答案。当我写下原始问题时,对我来说很重要支持一些被认为是非常过时的Safari和Firefox版本,但无论如何那就是我的原始问题。
我非常清楚对于现代浏览器,使用几行CSS代码就可以轻松实现灰度过滤,但是在我做这个项目的时候,图形设计师正在使用Safari 5.x,而客户正在使用Firefox 3.x。对我有效的解决方案是Giona建议的,即使用Modernizr测试CSS过滤功能,如果不支持,则退回到JavaScript。
如果我今天再做同样的事情,我会告诉他们两个都去更新他们的浏览器!