据我所知,这里有关于IE上不透明度问题的无数问题。我几乎和他们一起经历了几乎所有可用的方法,但我没有尝试过,但没有任何效果。
最奇怪的是,不透明度问题是一个孤立的案例,仅在IE8上发生; IE7没有任何问题。在我继续谈论我面临的问题之前,让我在一个单页HTML网站上向我展示我的标记示例:
这是控制有问题DIV的不透明度的CSS:
#home, #services, #freeport, #about-us, #advantage, #contact{
opacity:0;
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
width:400px;
zoom:1;
}
这是我用来控制不透明度设置的JQUERY:
$(document).ready(function(){ //fades in the menu div first followed by the home div
(function _loop( nodelist ) {
$( nodelist.shift() ).fadeTo( 2400, 1, function() {
_loop( nodelist );
});
}( ["#menu", "#home"] ));
$("#about-us-button").click(function(){ //upon clicking the home button, fades in the home div and fades out the rest of the divs
$("#about-us").fadeTo(900, 1);
$("#home, #freeport, #advantage, #services, #contact").fadeTo(1000, 0);
});
});
注意:我只显示#about-us div在点击#about-us-button后如何消失;其余部分的工作方式相同。还省略了HTML,因为它非常简单 - DIV容器包含一些文本,就是这样。
因此,应用上面提到的CSS样式,我设法让DIV出现在除IE8之外的所有浏览器(包括IE7)中的正确实例中。
最让我感到困惑的是,过滤器在IE7中工作,但是-ms-filter,据说是IE8特定的,无法正常工作。我已经阅读了有关HasLayout问题并且应用了所有方法无济于事。我还确保-ms-filter在过滤之前出现但是也没有用。
我还试图让IE8使用元标记方法模拟IE7,但不幸的是,这也失败了。
应该注意的是,我已将其标记为HTML5,在遇到此问题之后,我将其标记为XHTML 1.0 Transitional和HTML 4.0,但没有任何效果 - 甚至IE8都不是IE7方法。
任何人都知道如何解决这个问题?先谢谢你们!
答案 0 :(得分:1)
不久前我遇到了类似的问题。我不记得确切的细节,但我相信发生的事情是jQuery会在元素级别设置不透明度值,在淡入时不断更改它 - 然后一旦淡入淡出完成就会将属性留在那里,但是空白,覆盖CSS文件的不透明度。您应该可以使用Firebug或Chrome中的Element Inspector对此进行双重检查。
我相信这就是我用来修复错误的方法,强制jQuery在完成后清理该属性,这样我的CSS文件中指定的opacity属性才能真正生效。当然,调整它以适合您的代码。
$("#darkbg, #popup-movie-panel").fadeIn(300, function(){
if(jQuery.browser.msie) {
this.style.removeAttribute('filter');
}
})