в вашем примере это Doctype или его отсутствие, что приводит к его разрыву в IE8, но в целом это проблема с фильтрами IE, и hasLayout даже при правильном Doctype все еще встречается в IE7. Хотя я не уверен, что именно вы пытаетесь оживить, я нашел обходной путь для примера в вашем OP
Ключ не в том, чтобы располагать div outer
, если вам это нужно, оберните его другим div, который «удерживает» позицию. Еще одна вещь, которую я обнаружил, заключалась в том, что IE мог также делать с фильтром непрозрачности в inner
div, но вы не можете в своем реальном коде
вот некоторый обходной код:
CSS
#wrap{ position: absolute; top: 30px; left:150px}
.outer {
filter: alpha(opacity=50);
opacity: 0.5;
width: 200px;
height: 150px;
border: 2px solid #f00;
background-color: #700;
}
.inner {
position: absolute;
filter: alpha(opacity=50);
top: 100px;
left: 50px;
width: 100px;
height: 100px;
border: 2px solid #00f;
background-color: #007;
}
button {position: absolute; left: 0px; width: 100px;}
HTML
<button>Toggle Fade</button>
<div id="wrap">
<div class="outer">
<div class="inner"></div>
</div>
</div>
JQuery
$(document).ready(function() {
$('button').click(function(e) {
$('.outer, .inner').fadeToggle("slow", "linear");
});
});
Если переключатель не применяется и к внутреннему div, анимация в IE довольно прерывистая, он плавно затухает во внешнем div, но внутренний div просто показывает / скрывает мгновенно
другим браузерам не нужна прозрачность на inner
, так как они правильно наследуют его ... так что на этом вам решать, нужен ли вам фильтр на inner