How to solve/hack fading semi-transparent PNG bug in IE8?

Hey, I don’t know if you’re still looking for an answer. A couple of days ago I had the same issue animating a div with a PNG image inside. I tried many solutions and the only one that worked fine is one I coded myself.

The issue seems to be IE lacking opacity support and proper PNG support, so it breaks PNG display after applying an opacity effect (I believe animation frameworks rely on the propietary MSIE filter “AlphaImageLoader” for opacity effect on IE). The curious thing (to me that still don’t understand very well) is that this issue can be solved using the same filter to load the image before the animation.

I wrote a simple javascript that applies the filter to every image with .PNG extension. My animations run fine on IE with it.

I copy the code below. I’ts framework independent (it’s pure JavaScript), but you have to put it inside your framework’s DOM ready event (or use domready.js, like I did).

var i;
for (i in document.images) {
    if (document.images[i].src) {
        var imgSrc = document.images[i].src;
        if (imgSrc.substr(imgSrc.length-4) === '.png' || imgSrc.substr(imgSrc.length-4) === '.PNG') {
            document.images[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='crop',src="" + imgSrc + "")";
        }
    }
}

Please let me know if worked fine for you and if animation runned smooth.
Kind regards!

Leave a Comment