TL;DR
这是一个更新后的示例可在 IE11 中运行以及所有其他支持的浏览器。
解释
有几个问题...
根据您正在使用的插件,当浏览器不支持 CSS3 过滤器(如 IE10/11)时,以下内容适用:
...该插件使用Modernizr._prefixes
, css-filters
, Inline SVG
and svg-filters
功能从 Modernizr 进行检测以确定浏览器支持。如果浏览器支持内联 SVG 和 SVG 过滤器,但不支持 CSS 过滤器,则插件会将元素替换为带过滤器的 SVG 元素。
自从img
IE11 中的元素需要替换为 SVG 元素,插件脚本(带有现代化shiv)需要它才能工作。在您提供的 jsFiddle 示例中,脚本jquery.gray.min.js
实际上甚至没有在 IE11 中执行,因为它由于 mime 类型不匹配而被阻止(此警告位于控制台中)。
为了解决这个问题,我只需将脚本复制/粘贴到示例中。此外,值得注意的是,现代化文档说明该脚本must执行before the <body>
负载。当使用 HTML5 Shiv 时,这似乎与 IE 相关:
我们建议将 Modernizr 放在头部的原因有两个:HTML5 Shiv(在 IE 中启用 HTML5 元素)必须在<body>
,如果您正在使用 Modernizr 添加的任何 CSS 类,您将希望防止 FOUC。
现在脚本实际上是在 IE11 中执行的,需要初始化插件并img
元素需要替换为 SVG。根据该插件,img
如果元素具有类,元素将自动被替换.grayscale
。或者,您似乎也可以使用自定义.gray()
方法也。因为你的例子实际上并没有上课.grayscale
to the img
元素,它不会在 IE11 中被初始化。
下面,您会注意到我添加了课程.grayscale
to the img
元素(以便在 IE11 中初始化它)。此外,班级.grayscale-off
也被添加到元素中,以便获得灰色效果off最初。在更新后的 jQuery 中,您将看到该类刚刚被切换。
以下是相关更新的 HTML/CSS/jQuery:
此处更新示例
我还稍微缩短了 jQuery:
$('#content').on('mouseenter mouseleave', 'article.project', function (e){
$('.grayscale', this).toggleClass('hover grayscale-off');
$(this).find('.post-link').toggle();
});
.grayscale.grayscale-replaced > svg {
opacity: 0;
-webkit-transition: opacity .2s ease;
transition: opacity .2s ease;
}
.grayscale.grayscale-replaced.grayscale-off > svg {
opacity: 1;
}
<div id="content">
<article class="project">
<img width="375" height="375" class="grayscale grayscale-off" src="http://lorempizza.com/380/240" alt="image-title" />
<div class="overlay">
<h3>Project Title</h3>
<a class="post-link expand" href="...">+</a>
</div>
</article>
</div>