Почему фоновое изображение перемещается при прокрутке в IE?

  • Моя версия хром - 39.0.2171.99 м
  • Версия IE - 11

Я пытаюсь сделать фиксированное фоновое изображение

как вы видите myBlog, фоновое изображение перемещается при прокрутке только IE. Как я могу это исправить?

это мой код для фона

background-image: url("./images/cover.jpg");
background-repeat: no-repeat;
background-position: center center;
background-attachment: fixed;
background-size: cover;

Пожалуйста, помогите мне..

Ответ 1

Это известная ошибка с фиксированными фоновыми изображениями в Internet Explorer. Недавно мы немного поработали над улучшением этого поведения и отправили обновления в нашу предварительную сборку Internet Explorer в Windows 10. Сегодня вы можете протестировать изменения с Mac OS X или Windows на http://remote.modern.ie.

Ниже представлены до и после IE 11 и IE Remote Preview. Обратите внимание, что прокрутка с помощью колеса мыши больше не приводит к скачку фиксированного фонового изображения (или дрожанию), как в Internet Explorer 11.

enter image description here

Ответ 2

Мое последнее исправление основано на всех ответах, которые я нашел:

В главном css для Edge/ie11/ie10

/*Edge*/
@supports ( -ms-accelerator:true ) 
{
    html{
        overflow: hidden;
        height: 100%;    
    }
    body{
        overflow: auto;
        height: 100%;
    }
}
/*Ie 10/11*/
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) 
{
    html{
        overflow: hidden;
        height: 100%;    
    }
    body{
        overflow: auto;
        height: 100%;
    }
}

Для ie9, ie8 и ie7, я добавил код (без медиа-запроса) в отдельный hackheet:

<!--[if lte IE 9]>
    <style type=text/css>
       html{
           overflow: hidden;
           height: 100%;    
       }
       body{
           overflow: auto;
           height: 100%;
       }
    </style>
<![endif]-->

Ответ 3

Я попытался отключить некоторые правила css на вашем сайте и когда я удаляю свойство фона (background: #fff;) для тега html, тогда страница прокручивается плавно. Пожалуйста, попробуйте и скажите, работает ли оно для вас.

Update:

Я также нашел обходное решение здесь:

$('body').on("mousewheel", function () {
  event.preventDefault();

  var wheelDelta = event.wheelDelta;

  var currentScrollPosition = window.pageYOffset;
  window.scrollTo(0, currentScrollPosition - wheelDelta);
});

Ответ 4

Кажется, это работает на трекпадах для меня. Он основан на обходном пути radarek.

    if(navigator.userAgent.match(/Trident\/7\./)) {
    $('body').on("mousewheel", function () {
        event.preventDefault();

        var wheelDelta = event.wheelDelta;

        var currentScrollPosition = window.pageYOffset;
        window.scrollTo(0, currentScrollPosition - wheelDelta);
    });

    $('body').keydown(function (e) {
        e.preventDefault(); // prevent the default action (scroll / move caret)
        var currentScrollPosition = window.pageYOffset;

        switch (e.which) {

            case 38: // up
                window.scrollTo(0, currentScrollPosition - 120);
                break;

            case 40: // down
                window.scrollTo(0, currentScrollPosition + 120);
                break;

            default: return; // exit this handler for other keys
        } 
    });
}

Ответ 5

Идентификатор цели и использование прокрутки вместо этого устраняют проблему.

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    .className {
        background-attachment: scroll;
    }
}

Ответ 6

Я просто наткнулся на случай, когда мне удалось уменьшить заикание, удалив box-shadow из элементов, перекрывающих фиксированный фон.

Ответ 7

Предыдущий ответ исправил мою проблему в IE11! Однако мне пришлось внести небольшое изменение, чтобы он также обновил страницу с помощью F5 (или Ctrl + F5):

//В IE 11 это устраняет проблему при прокрутке по разрыву фотографии без использования полосы прокрутки

 if(navigator.userAgent.match(/Trident\/7\./)) {
    $('body').on("mousewheel", function () {
        event.preventDefault();

        var wheelDelta = event.wheelDelta;

        var currentScrollPosition = window.pageYOffset;
        window.scrollTo(0, currentScrollPosition - wheelDelta);
    });

    $('body').keydown(function (e) {

        var currentScrollPosition = window.pageYOffset;

        switch (e.which) {

            case 38: // up
                e.preventDefault(); // prevent the default action (scroll / move caret)
                window.scrollTo(0, currentScrollPosition - 120);
                break;

            case 40: // down
                e.preventDefault(); // prevent the default action (scroll / move caret)
                window.scrollTo(0, currentScrollPosition + 120);
                break;

            default: return; // exit this handler for other keys
        } 
    });
}

Ответ 8

Используя этот script: fooobar.com/questions/416256/...

Чтобы обнаружить пограничный браузер, я изменил стиль для html и body.

if (document.documentMode || /Edge/.test(navigator.userAgent)) {
   document.documentElement.style.overflow = "hidden";
   document.documentElement.style.height = "100%";
   document.body.style.overflow = "auto";
   document.body.style.height = "100%"; 

}

Ответ 9

Я попробовал решение дважды jr CSS, но он не работает в Edge/15.15063. Даша ответ решил проблему в Edge, но не IE 11. Я заметил, что условие document.documentMode не было завершено. document.documentmode вернет undefined для всех браузеров, за исключением IE 8+, который будет вернуть номер режима. При этом следующий код будет определять как IE 8+, так и Edge и решить проблему с фоновым изображением.

if ((document.documentMode != undefined) || (/Edge/.test(navigator.userAgent))) {
document.documentElement.style.overflow = "hidden";
document.documentElement.style.height = "100%";
document.body.style.overflow = "auto";
document.body.style.height = "100%";}

JS Fiddle для вышеуказанного кода. Это также работает со стрелкой и прокруткой дорожки. Я не рассматривал IE7 -