Я пытаюсь решить проблему, которая появляется в 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 .
UPD:
После некоторых экспериментов я нашел решение,Это действительно проблема html \ css, поэтому я произвел рефакторинг кода и удалил тег jQuery.Представьте, что у нас есть такой html murk up:
<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
.Вся магия в #d1
вы уже догадались.Когда мы удаляем filter: alpha(opacity = 100);
, все работает правильно.
Вы можете спросить - но почему вы устанавливаете opacity = 1 для элемента, который сейчас непрозрачен?Я не знаю :).Может быть по какой-то причине вы должны использовать это поведение.Очень интересное и неожиданное поведение.
С этим примером можно поиграть в jsFiddle .