5

我有以下 HTML:

<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-filterfilter的影响时,它的 alpha 透明度就被破坏了。试试看,你会看到。这是 IE 8 和 IE 7 中的一个错误。

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

有谁知道解决这个问题的方法?

4

3 回答 3

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。

于 2009-06-17T04:10:04.807 回答
4

更新:直接应用于 img 的AlphaImageLoader过滤器可能会覆盖 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]-->
于 2009-06-17T03:43:23.173 回答
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]-->

请让我知道它是否工作正常。亲切的问候!

于 2010-11-08T18:08:07.177 回答