본문 바로가기

Story/html/css

ie8 투명 png 에서 opacity 적용해서 전환 효과시 버그 해결방법

반응형

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 + "')";
       
}
   
}
}

 

출처 http://stackoverflow.com/questions/1204457/how-to-solve-hack-fading-semi-transparent-png-bug-in-ie8

 

위 글을 참고로 해서

해당 png 이미지가 있는 tag를

<img src="이미지.png"

style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='crop',src='이미지.png')" />

와 같이 수정했더니 투명과 투명이 아닌부분 경계선이 지저분해 보이는 현상이 사라졌다.

반응형