мерцание фиксированного позиционированного элемента только в IE, как решить?

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

веб-сайт: http://gerbrandy.zitemedia.nl:88/

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

Я понятия не имею, как это исправить. Пробовал несколько вещей, но не знаю, как отключить, например, javascript, но это не так. Я использую IE11 в Windows 8.1.

Есть ли у кого-то такой же опыт с этим, и вы знаете, как обойти эту проблему?


person Codebeat    schedule 08.01.2014    source источник
comment
Кажется, у меня работает с IE11 на Win 7 (64). Возможно, это связано с версией Windows (7/8/8.1 — современная или настольная)?   -  person Nigel Ellis    schedule 08.01.2014
comment
Хай Найджел, спасибо за тестирование. Ну, я использую голландскую версию Windows 8.1, но звучит не так уж особенно, я думаю? Я не тестировал его на Win7.   -  person Codebeat    schedule 08.01.2014
comment
Используете ли вы современный/сенсорный интерфейс или интерфейс рабочего стола, поскольку они иногда отображаются по-разному?   -  person Nigel Ellis    schedule 08.01.2014
comment
@Nigel, нет, я не использую ужасный интерфейс Windows 8. Я использую Windows 8 без нового графического интерфейса, насколько это возможно.   -  person Codebeat    schedule 08.01.2014
comment
Это облегчение :) Я сейчас на работе, поэтому у меня только машина с Windows 7. Может быть, кто-то еще может сравнить Windows 7 и Windows 8 IE11, чтобы увидеть, есть ли разница.   -  person Nigel Ellis    schedule 08.01.2014
comment
Я также тестировал Win7 с IE11, и он работает нормально.   -  person Codebeat    schedule 12.01.2014
comment
Для меня нервное поведение было вызвано opacity:0.99 в элементе HTML (исправление для более жирных шрифтов на Mac).   -  person nebulousGirl    schedule 08.07.2016
comment
css вопрос на мой взгляд, а не js. просто придирка, полезный вопрос, так как я нашел ответ на свой вопрос здесь.   -  person gabore    schedule 23.06.2020


Ответы (8)


Три вещи могут вызвать мерцание/прерывистость/задержку IE 11 для элемента с фиксированной позицией при прокрутке:

  1. Если у вас есть «переполнение: авто;» в родительском элементе-контейнере удалите его.

  2. Удалить фоновое вложение: исправлено; от элемента фиксированного положения.

  3. Удалите border-radius из элемента с фиксированной позицией (только для мобильных IE).

person Adamy    schedule 29.12.2014
comment
Переполнение отсортировало это для меня. Я перемещаю свой элемент из содержащего его элемента с помощью overflow:auto; и это сработало. - person Will; 13.01.2015
comment
да, border-radius вызвал у меня проблемы с IE Mobile - person sTx; 01.02.2016
comment
Переход к переполнению: видимый; в родительском элементе сделал это за меня. (было переполнение: скрыто;) - person Wojtek; 19.01.2017
comment
Предложение по радиусу границы было золотым. Большое спасибо! - person ihpar; 11.08.2017
comment
Я заставил родителя иметь position: static, и это решило мою проблему. - person rideron89; 26.10.2017
comment
удаление background-attachment:fixed сработало для меня. - person HirenParekh; 14.12.2017
comment
Примечание. У моего родителя не было переполнения, но у моего текущего элемента было overflow: auto, что привело к сбою. - person scottheckel; 08.11.2019
comment
В моем случае пришлось position: static двум родителям исправить это. На всякий случай, если кто-то задается вопросом, почему в их реализации может быть недостаточно только статического прямого родителя. - person gabore; 23.06.2020

У меня была та же проблема, похоже, это ошибка, которая возникает, когда на странице слишком много всего происходит для ваших характеристик компьютера, я смог исправить это, добавив следующий код преобразования в элемент фиксированной позиции, (transform: translateZ(0);-webkit-transform: translateZ(0);), который заставляет браузер использовать аппаратное ускорение для доступа к графическому процессору устройства (GPU), чтобы заставить пиксели летать. Веб-приложения, с другой стороны, работают в контексте браузера, что позволяет программному обеспечению выполнять большую часть (если не все) рендеринга, что приводит к меньшей мощности для переходов. Но Интернет догоняет, и большинство поставщиков браузеров теперь обеспечивают графическое аппаратное ускорение с помощью определенных правил CSS.

Используя -webkit-transform: translate3d(0,0,0); запустит GPU для переходов CSS, делая их более плавными (более высокий FPS).

Примечание: translate3d(0,0,0) ничего не делает с точки зрения того, что вы видите. он перемещает объект на 0 пикселей по осям x, y и z. Это всего лишь метод принудительного аппаратного ускорения.

 #element {
        position: fixed;
        width: 100%;
        left: 0;
        top: 0;
        z-index: 9994;
...other stuff and then
        /* MAGIC HAPPENS HERE */
        transform: translateZ(0);
        -webkit-transform: translateZ(0);
    }
person Neo    schedule 18.09.2014
comment
Это работает, но остерегайтесь просто прикреплять преобразования к любому элементу; это может испортить любые дочерние элементы с position:fixed. (stackoverflow.com /вопросы/2637058/) - person AlexMA; 22.10.2018

Мы можем удалить серое мерцание в IE9, IE10, IE11, MEdge‹=20, установив overflow html и body, например

html{
  overflow: hidden;
  height: 100%;    
}

body{
  overflow: auto;
  height: 100%;
}
person TLbiz    schedule 27.09.2018

По-видимому, «ошибка» затрагивает только IE11 в Windows 8.1 или, возможно, 8.0 тоже. Удаление background-attachmend:fixed сработало для меня. По-видимому, это правило было излишним, поскольку фоновое изображение корректно отображается во всех браузерах без этого правила. Второе решение — отключить плавную прокрутку в настройках IE, но это не оптимально, поскольку она включена при установке по умолчанию.

Мерцающий CSS:

#element_id{
    position:fixed;
    height:100%;
    left:0;
    bottom:0;
    right:0;
    background-image:url('path/to/jpg');
    -webkit-background-size:cover;
    -moz-background-size:cover;
    -o-background-size:cover;
    background-size:cover;
    background-repeat:no-repeat;
    background-position:center center;
    background-attachment:fixed;
}

... и новый код (удалена 1 строка):

#element_id{
    position:fixed;
    height:100%;
    left:0;
    bottom:0;
    right:0;
    background-image:url('path/to/jpg');
    -webkit-background-size:cover;
    -moz-background-size:cover;
    -o-background-size:cover;
    background-size:cover;
    background-repeat:no-repeat;
    background-position:center center;
}
person mch    schedule 09.12.2014
comment
Ах, спасибо за решение после всего этого времени. Больше не работаю в этой отстойной компании (с их отстойными скриптами, CMS и шаблонами), так что не могу попробовать. Но ваше решение звучит правдоподобно. Я думаю, что размер фона должен быть вещью CSS, а не сценарием. Кроме того, background-size:cover может быть проблемой на iPad 1 или 2. Вместо этого вы должны указать размер экрана в пикселях. - person Codebeat; 10.12.2014

Метод аппаратного ускорения, как показано ниже, вызвал мой.

outline: 1px solid transparent;

Удалите его, возможно, это и есть причина.

person dewwwald    schedule 05.04.2016
comment
Очень случайно, но это сработало. Он был глубоко вложен в div моей фиксированной позиции, но все равно вызывал мерцание всего этого. - person Vivek Maharajh; 20.04.2016
comment
чтобы оптимизировать фиксированный элемент, используйте -ms-transform: translateZ(0);, это все равно оптимизирует его, т. е. вы не увидите мерцания в Safari. - person dewwwald; 20.04.2016
comment
Я пытался избавиться от мерцания на хроме, и translateZ (0) решил это. Спасибо еще раз! Я думаю, что хром тоже случайный. - person Vivek Maharajh; 20.04.2016
comment
У меня было автоматическое воспроизведение фонового видео, и оно мерцало в IE Edge. Не знаю, почему это сработало, но спасибо! :) - person Davide Perozzi; 22.11.2017

Другой причиной мерцания, очевидно, может быть другой фиксированный элемент внутри фиксированного элемента. По крайней мере, это было причиной в моем случае. Ложное поведение Edge кажется случайным.

person webdesignwien    schedule 11.02.2018

Такое поведение связано с ошибкой в ​​функции «Плавная прокрутка» Microsoft. Происходит в IE10 и 11 на Win7 и выше. Я бы не рекомендовал изменять ваш отлично работающий код, чтобы исправить еще одну ошибку MS. Вместо этого отключите их «функцию», открыв «Настройки Internet Explorer», перейдите в «Дополнительно» и в категории «Просмотр» выберите последнюю опцию, которую вам нужно отключить «Использовать плавную прокрутку».

person FabianS    schedule 13.01.2019
comment
По-видимому, существует более или менее рабочее JS-решение. там тоже. - person FabianS; 13.01.2019

body Моего веб-сайта было установлено значение position: relative. Удаление этого помогло решить мою эксклюзивную для IE проблему с мерцанием/прыганием.

person LUKUS    schedule 13.06.2017