TL DR
Below is an example that works in IE11 and all other supported browsers.
Exaplaination
There were a few problems ...
According to the plugin that you use when the browser does not support CSS3 filters (for example, in IE10 / 11), the following applies
... the plugin uses the functions of Modernizr._prefixes , css-filters , Inline SVG and svg-filters , which are detected by Modernizr to determine browser support. If the browser supports built-in SVG and SVG filters, but not CSS filters, the plugin replaces the elements with SVG filters.
Since the img element must be replaced by the SVG element in IE11, a script plugin (with Modernizr shiv) is required for it to work. In the above example, the jsFiddle script jquery.gray.min.js was not even actually executed in IE11, because it was blocked due to inappropriate mime types (this warning was in the console).
To get around this, I just copy / paste the script into the example. In addition, it is worth noting that Modernizr Docs report that the script must execute before loading <body> , This seems relevant in IE when using HTML5 Shiv:
We recommend placing Modernizr in your head twice: HTML5 Shiv (which allows HTML5 elements in IE) should run before <body> , and if you use any of the CSS classes that Modernizr adds, you want to prevent FOUC.
Now that the script is running in IE11, the plugin should be initialized, and the img element should be replaced by SVG. According to the plugin, img elements will be automatically replaced if the element has a .grayscale class. Also, it looks like you can also use your own .gray() method. Since your example did not actually pass the .grayscale class to the img element, it would not initialize in IE11.
Below you will notice that I added the .grayscale class to the img element (to initialize it in IE11). In addition, the .grayscale-off class is also added to the element so that the gray effect is turned off initially. In the updated jQuery, you will see that this class is simply switched.
Here is the corresponding updated HTML / CSS / jQuery:
Updated example here
I also shortened jQuery a bit:
$('#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>