我试图解决在IE8中出现的问题。HTML非常简单:
<div id="overlay">
</div>
<div id="imgcontainer">
<div>
<div id="source">
</div>
</div>
</div>
当我使用jQuery将“#source”元素的不透明度设置为“0”时,在IE中我可以看到#overlay的背景,而不是#imgcontainer > div的背景。为什么会这样呢? 以下是一段JavaScript代码:
$(function(){
$("#source").css({
opacity: "0",
});
$("#overlay").css({
width: $(window).width(),
height: $(window).height(),
display: "block",
opacity: "0.6"
});
$("#imgcontainer").css({
zIndex: 2,
position: "fixed",
opacity: "1",
left: "0",
right: "0",
top: "100px",
display: "block"
});
});
您可以在jsFiddle上尝试实时示例。
更新:
经过一些实验,我找到了解决方案。这确实是HTML/CSS问题,因此我进行了一些代码重构并删除了jQuery标签。假设我们有这样的HTML标记:
<body>
<div id="d1">
<div id="d2">
<div id="d3">
</div>
</div>
</div>
</body>
以及CSS样式:
body {
background-color: #c8c8c8;
}
#d1 {
background-color: #6c0922;
width: 500px;
border: 1px solid black;
filter: alpha(opacity = 100);
}
#d2 {
background-color: #146122;
width: 350px;
margin: 20px auto;
border: 1px solid black;
}
#d3 {
background-color: #0080c0;
height: 100px;
margin: 10px 65px;
filter: alpha(opacity = 0);
zoom: 1;
}
乍一看,一切都很好,我们期望
#d3
变成透明的并且能够看到#d2
背景(深绿色)。但在IE7/8中并不简单。在IE中,我们可以通过#d2
和#d1
看到body(灰色)的背景。所有的魔法都在#d1
中。当我们移除filter: alpha(opacity = 100);
时,一切工作正常。您可能会问 - 为什么将不透明的元素的不透明度设置为1?我不知道:)。也许在某些情况下,您应该使用这种行为。非常有趣和意外的行为。
您可以在jsFiddle中尝试这个例子。