2009-06-17 46 views
5

我有以下HTML:使用时,如何保持PNG Alpha透明 “-MS-过滤器” 属性

<a><img src="myfile.png" /> Some text</a> 

而这个CSS:

a:hover 
{ 
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; 
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75); 
    opacity: .75; 
} 

的问题,这在IE发生图8和IE 7.

当PNG图像是受-MS-滤波器滤波器,其alpha transpa rency被毁了。试试看,你会看到。这是IE 8和IE 7中的一个bug。

我可以删除应用于CSS中的“-ms-opacity”和“filter”属性吗?这是什么语法? (例如-ms-filter:“”;

有没有人知道解决此问题的方法?

+0

我不认为我们理解你的问题。你可以尝试重新引用它吗? – 2009-06-17 03:58:15

+0

@SpliFF et al。 - 有人可以添加(或编辑)一个答案,以使在IE 7和8中使用75%不透明度的部分透明度显示来制作PNG所需的CSS。这是原始问题,没有答案是完整的。 – OrangeDog 2012-05-02 16:02:27

回答

4

更新:AlphaImageLoader直接应用于img的过滤器可能会覆盖Alpha过滤器。至于去除过滤器,你有没有试过filter:none;

是的,程序化地针对IE6和下面的条件注释。

<!--[if lt IE 7]> 
<style>a:hover{filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);}</style> 
<![endif]--> 

而且脚本像IE7-js将处理PNG透明度为你不用非标准代码弄乱你的CSS。

<!--[if lt IE 7]> 
<script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js" type="text/javascript"></script> 
<![endif]--> 
+0

对不起,我对IE 6不感兴趣 - 我试图在使用'-ms-filter'或'filter'css属性时在IE7和IE8中工作。 – cbp 2009-06-17 03:48:49

10

只是点缀SpliFF的答案,我可以通过添加下面的jQuery的到我的网页解决这个问题:

$(function() { 
    if (jQuery.browser.msie) 
     $('img[src$=".png"]').each(function() { // must have quotes around .png 
      this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+this.src+",sizingMethod='scale')"; 
     }); 
}); 

这将适用于AlphaImageLoader的太所有的PNG在页面中。

2

对于寻找其他答案的人来说,我使用下面的代码解决了这个问题,我用纯JavaScript编写了自己的代码,所以它与框架无关。仍然必须将其放入框架的DOM准备事件中(或者像我一样使用domready.js)。它使用AlphaImageLoader加载所有带.PNG扩展名的图像。必须在应用Alpha滤波器之前完成(您也可以在JS之后的代码中应用滤波器)。

下面的代码:

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

记得把它条件注释里面的IE:

<!--[if IE]><![endif]--> 

请让我知道,如果它工作得很好。 亲切的问候!

相关问题