J'essaye de faire background-image
fixe.
Comme vous le voyez dans mon blog , le background-image
se déplace lors du défilement sur IE 11.
Comment puis-je réparer cela?
Voici mon CSS:
background-image: url("./images/cover.jpg");
background-repeat: no-repeat;
background-position: center center;
background-attachment: fixed;
background-size: cover;
Il s'agit d'un bogue connu avec des images d'arrière-plan fixes dans Internet Explorer. Nous avons récemment effectué des travaux pour améliorer ce comportement et avons envoyé des mises à jour de notre version préliminaire d'Internet Explorer sur Windows 10. Vous pouvez tester les modifications aujourd'hui depuis Mac OS X ou Windows sur http://remote.modern.ie .
Ci-dessous se trouvent l'avant et l'après, IE 11 et IE Aperçu à distance. Remarquez comment le défilement avec la molette de la souris ne fait plus sauter l'image d'arrière-plan fixe ( ou gigue) comme dans Internet Explorer 11.
Ma dernière solution est basée sur toutes les réponses que j'ai trouvées:
Sur le css principal pour 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%;
}
}
Pour ie9, ie8 et ie7, j'ai ajouté le code (sans requête média) dans une feuille de hacks distincte:
<!--[if lte IE 9]>
<style type=text/css>
html{
overflow: hidden;
height: 100%;
}
body{
overflow: auto;
height: 100%;
}
</style>
<![endif]-->
J'ai essayé de désactiver certaines des règles CSS sur votre site et lorsque je supprime la propriété d'arrière-plan (background: #fff;) pour la balise html, la page défile en douceur. S'il vous plaît, essayez-le et dites si cela fonctionne pour vous.
Mettre à jour:
J'ai également trouvé une solution ici :
$('body').on("mousewheel", function () {
event.preventDefault();
var wheelDelta = event.wheelDelta;
var currentScrollPosition = window.pageYOffset;
window.scrollTo(0, currentScrollPosition - wheelDelta);
});
Cela semble fonctionner sur des trackpads pour moi. Il s'appuie sur la solution de contournement de 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
}
});
}
Pour la dernière version d'Edge, utilisez ceci, car la réponse précédente de 2xjr ne fonctionne plus:
/*Edge - works to 41.16299.402.0*/
@supports (-ms-ime-align:auto)
{
html{
overflow: hidden;
height: 100%;
}
body{
overflow: auto;
height: 100%;
position: relative;
}
}
/*Ie 10/11*/
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)
{
html{
overflow: hidden;
height: 100%;
}
body{
overflow: auto;
height: 100%;
}
}
Je viens de tomber sur un cas où j'ai pu réduire le bégaiement en supprimant box-shadow
à partir d'éléments qui chevauchent l'arrière-plan fixe.
Cibler IE et utiliser le défilement à la place semble résoudre le problème.
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
.className {
background-attachment: scroll;
}
}
En utilisant ce script: https://stackoverflow.com/a/34073019/795822
Pour détecter le navigateur Edge, j'ai ensuite changé le style pour html et 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%";
}
Voici un moyen de gérer les touches PageUP et PageDOWN en fonction des réponses précédentes:
if(navigator.userAgent.match(/Trident\/7\./)) { // if IE
$('body').on("mousewheel", function () {
// remove default behavior
event.preventDefault();
//scroll without smoothing
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 33: // page up
e.preventDefault(); // prevent the default action (scroll / move caret)
window.scrollTo(0, currentScrollPosition - 600);
break;
case 34: // page down
e.preventDefault(); // prevent the default action (scroll / move caret)
window.scrollTo(0, currentScrollPosition + 600);
break;
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
}
});
}
La réponse précédente a résolu mon problème dans IE11! Cependant, j'ai dû faire un petit changement donc cela me permettra également de rafraîchir la page en utilisant F5 (ou Ctrl + F5):
// In IE 11 cela résout le problème lors du défilement d'une pause photo sans utiliser la barre de défilement
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
}
});
}
J'ai essayé la solution CSS de proudjr mais elle ne fonctionne pas dans Edge/15.15063. La réponse de Dasha a résolu le problème dans Edge mais pas IE 11. J'ai remarqué que le document.documentMode
la condition n'était pas complète. document.documentmode renverra undefined
pour tous les navigateurs sauf pour IE 8+ qui --- renverra le numéro de mode . Avec cela, le code suivant détectera à la fois IE 8+ et Edge et résoudre le problème d'image d'arrière-plan.
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 pour le code ci-dessus. Cela fonctionne également avec les touches fléchées et le défilement du pavé tactile. Je n'ai pas pris en compte IE7-