Подтвердить что ты не робот

Теневые артефакты во время анимации в IE9

Вот css, html и js для воспроизведения:

HTML:

<div id="outer">
    <div>123</div>
    <div id="inner">345</div>
</div>

CSS

#outer {
    -moz-border-radius: 5px;
    border-radius: 5px;
    box-shadow: 0px 3px 2px rgba(0, 0, 0, 0.3);
}

#inner {
    height: 200px;
}

JS:

$(function() {
    $('#outer').click(function() {
        $('#inner').slideUp();
    });
});

и http://jsfiddle.net/DwApF/, а также

Какие-либо обходные пути для этой проблемы?

enter image description here

4b9b3361

Ответ 1

Попытка # 1

http://jsfiddle.net/DwApF/3/

Это скрывает тень, а затем восстанавливает ее после завершения слайда. Это взломать решение, но это способ, которым можно обойти различные типы поведения.

Попытка # 2

http://jsfiddle.net/DwApF/11/

Это делает одновременную анимацию как внешних, так и внутренних контейнеров. Он скользит тень без артефактов. Однако вам нужно будет вручную манипулировать высотой внешнего контейнера, а также заниматься сокрытием содержимого внутреннего контейнера. устраняет проблему с артефактом.

Попытка # 3 - Мое предпочтительное решение

http://jsfiddle.net/DwApF/12/

Это все еще использует одновременную анимацию как внешних, так и внутренних контейнеров. Я не вижу никаких артефактов в IE9. Он также обрабатывает скрытие содержимого внутреннего контейнера с помощью overflow: hidden.

Калибровка внешнего контейнера должна выполняться вручную, но я думаю, что это адекватное решение. Должен быть способ определить свернутую высоту с помощью jQuery, чтобы это значение не требовалось жестко закодировано.

Это решение работает в IE9, Chrome и Firefox. Обратите внимание, что я добавил несколько цветов/границ, чтобы было легче видеть разные контейнеры.

Ответ 2

Плохая новость в том, что ошибка в IE10 хуже. Хорошей новостью является то, что это простое правило, похоже, исправляет его - по крайней мере, в IE10. Поскольку IE9 поддерживает: после псевдо класса, он также должен работать.

.Element:after {
content: ".";
font-size: 1px;
display: inline;
overflow: hidden;
}

Замените .Element либо именем класса, либо ID (#Element) объекта, который показывает артефакт.

В IE9 часто назначается переполнение: скрытый будет работать - хотя это не работает в IE10.

Ответ 3

Это решение сработало для меня - просто анимируйте атрибут box-shadow родителя в одно и то же время:

$(function() {
    $('#outer').click(function() {
        $('#inner').slideUp();
        $(this).animate({'box-shadow': '0px 3px 2px rgba(0, 0, 0, 0.3)'});
    });
});

Ответ 4

Мне это показалось: просто оберните div в другой div этими стилями на внешнем div

padding-bottom: 10px;
padding-right: 0px;
overflow: visible

Не знаю, почему это сделало трюк для меня.

Ответ 5

Решение для меня состояло в том, чтобы поместить DIV, я хотел исчезнуть внутри другого DIV, как было упомянуто ранее.... ОДНАКО..... Я не применяю к нему каких-либо специальных стилей, Вместо этого все, что я сделал, это использовать jQuery для установки на новый родительский DIV и сделать это вместо этого.

Он избавился от этих досадных теневых артефактов для меня. (на IE10)