Непрозрачность и фильтр вызывают утечку памяти в IE7

У меня есть div, определенный как

<div id="block_screen">&nbsp</div>

есть таблица стилей, связанная с ее идентификатором

#block_screen
{
    position: absolute;
    background-color: #000;
    height: 100%;
    width: 100%;
    top: 0;
    left: 0;
    z-index: 9997;
    opacity: 0.25;
    filter: alpha(opacity=25);
}

Цель состоит в том, чтобы показать фон как полупрозрачный серый, когда отображается этот div. Вот почему я использую стили непрозрачности и фильтра. Он работает правильно. Но в IE7 происходит утечка памяти каждый раз, когда отображается div. Я предполагаю, что это из-за непрозрачности и стилей фильтрации, которые IE7 не может корректно обрабатывать. IE8 и другие браузеры работают нормально.

Есть ли обходные пути для этой проблемы, если я хочу использовать IE7?


person Souvik Basu    schedule 16.09.2011    source источник
comment
Что еще вы ожидали? фильтры не должны использоваться. Старый IE не способен отображать крутые новинки, просто примите это. И когда вы добавляете хаки, такие как Alpha(Opacity), потому что ваш клиент запросил поддержку IE6 - вы на самом деле портите опыт пользователям IE6... С IE7 это менее экстремально, но то же самое.   -  person c69    schedule 16.09.2011
comment
@c69, Где ты взял правило, что нельзя использовать фильтры? Старый IE (версия 4, выпущенная в 1997 году) изобрел концепции новых интересных вещей, которые теперь являются частью спецификации CSS3. Alpha(Opacity) — это не хак, это надежная функция, созданная до публикации CSS2 — задолго до CSS3. И если они не реализованы чрезмерно (как и все остальное), они не портят работу пользователей IE6/7. В этом случае утечка памяти, скорее всего, связана с неправильным манипулированием домом или утечкой событий javascript. Но это определенно не связано с атрибутами filter или opacity.   -  person Marcus Pope    schedule 25.07.2012
comment
@MarcusPope, когда не очень умный клиент попросил меня сделать галереи с альфа-непрозрачностью для ie6 (в старые времена), бедняжка даже не могла двигаться (потому что у вас около 20 фильтров) и часто вылетала. Отзывчивость пользовательского интерфейса была плохой, и когда вы пытались прокрутить или изменить размер, все это блокировалось примерно на 10 секунд, а затем перерисовывалось. Это лучший опыт? я так не думаю. Кроме того, фильтры DX были настолько хороши, что Microsoft полностью убрала их поддержку из IE10.   -  person c69    schedule 25.07.2012
comment
@ c69 - Хм, я не думаю, что этот опыт оправдывает полный отказ от использования фильтров. Похоже, у вас были ограниченные системные ресурсы и, возможно, некоторые проблемы с перекомпоновкой — у обоих есть обходные пути. Но именно поэтому я указал, что умеренное использование не портит впечатления и не вызывает утечек памяти. И да, фильтры устарели в IE9, потому что теперь он поддерживает CSS3. Этот переход никак не связан с качеством DX-хуков, а связан с обновлением до современных стандартов. В 1997 году они были потрясающими, и сегодня они по-прежнему являются лучшим полифилом для многих свойств CSS3.   -  person Marcus Pope    schedule 26.07.2012


Ответы (1)


В моей специальной таблице стилей IE для ie меньше 9 я обычно использую:

 -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=85)";
filter: alpha(opacity=85);
background-color: #000;

Навскидку я считаю, что -ms-filter - это ie6'ism и фильтр для ie7/8. У меня нет утечек памяти, поэтому, честно говоря, у меня возникло бы желание поискать в другом месте.

person dougajmcdonald    schedule 16.09.2011
comment
Вы в основном правы, но -ms-filter - это ie8-ism, который позволяет атрибутам фильтра, соответствующим стандартам, с префиксом поставщика, проверять соответствие спецификации css2.1. Вы по-прежнему можете использовать filter: в IE8 и 9, хотя эта функция устарела и может отсутствовать в IE10. - person Marcus Pope; 25.07.2012
comment
кроме того, старое свойство filter теперь конфликтует с именем css4 фильтры. - person c69; 25.07.2012