Overflow-x:hidden n'empêche pas le contenu de déborder dans les navigateurs mobiles
J'ai un site web ici.
Visualisé dans un navigateur de bureau, le noir de la barre de menu correctement s'étend seulement sur le bord de la fenêtre, depuis le body
a overflow-x:hidden
.
Dans tout navigateur mobile, que ce soit sur Android ou iOS, le noir de la barre de menu affiche sa pleine largeur, qui apporte de l'espace sur la droite de la page. Aussi loin que je peux dire, cet espace n'est même pas une partie de la html
ou body
balises.
Même si j'ai mis de la fenêtre d'une largeur spécifique dans le <head>
:
<meta name="viewport" content="width=1100, initial-scale=1">
Le site s'étend vers l'1100px mais a encore de l'espace au-delà de la 1100.
Ce qui me manque? Comment puis-je garder la fenêtre d'affichage à 1100 et couper le débordement?
- Ceci est particulièrement un problème dans iOS9
InformationsquelleAutor Indigenuity | 2013-01-11
Vous devez vous connecter pour publier un commentaire.
La création d'un site wrapper div à l'intérieur de la
body
et de l'application de laoverflow-x:hidden
à l'emballage, au LIEU de labody
ouhtml
résolu le problème.Il semble que les navigateurs qui parse le
<meta name="viewport">
balise simplement ignoreroverflow
attributs sur lahtml
etbody
balises.overflow
àhidden
, j'ai dû mettre leposition
àfixed
...overflow-x: hidden
pour la premièrediv
à l'intérieur debody
a très bien fonctionné. Pas besoin d'ajouter un autrediv
, juste essayer de mettre à votre ultrapériphériquesdiv
.<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
- question ici: le changement de contenu du conteneur peut provoquer un grand changement dans la hauteur, qui à son tour peut provoquer bizarre le comportement de zoom.position: fixed
. merci <33position:relative
fonctionne aussi bien.essayer
au lieu de simplement
overflow
rien àhtml
et/oubody
dans n'importe quelle combinaison n'a pas résolu le problème.Vainqueurs's commentaire sur le accepté de répondre à mérite d'être sa propre réponse, car elle est très élégante, une solution qui ne, fait le travail. Et je vais ajouter un peu à son utilité.
Victor notes ajoutant
position:fixed
œuvres.Et en effet il ne. Cependant, il a aussi un léger côté l'influence de essentiellement de défilement vers le haut.
position:absolute
résout ce mais, ré-introduit la possibilité de faire défiler sur mobile.Si vous savez que votre fenêtre d'affichage ( mon plugin pour ajouter de la fenêtre d'affichage pour le
<body>
), vous pouvez simplement ajouter un css à bascule pour leposition
.J'ai aussi ajouter à prévenir la page sous-jacente de sauter à gauche/à droite lors de l'affichage/masquage des auxiliaires modaux.
position:fixed or absolute
perturber leurs positions. Ne convient pas de travail dans mon cas 🙁position:fixed
ne convient pas à beaucoup de ces éléments. La question d'origine n'a pas vraiment préciser que si, donc je pense toujours que cette réponse est très utile.C'est la solution la plus simple pour résoudre horizontale de défilement dans Safari.
table-responsive
Bug. C'était la solution.fonctionne sur iOS9
Comme @Autochtones des états, ce qui semble être causé par les navigateurs de l'analyse du
<meta name="viewport">
tag.Pour résoudre ce problème à la source, essayez les solutions suivantes:
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
.Dans mes tests, cela évite à l'utilisateur de zoomer pour voir le débordait de contenu, et par conséquent empêche de panoramique/défilement à elle aussi.
initial-scale=1
à une balise meta viewport en effet de résoudre le problème. Merci!minimum-scale=1
qu'il fixeSans précédent seule solution a fonctionné pour moi, j'ai dû mélanger et a obtenu le numéro fixe également sur les anciens appareils (iphone 3).
Tout d'abord, j'ai dû l'envelopper le code html contenu dans une div extérieure:
Ensuite, j'ai dû appliquer débordement caché à l'emballage, car overflow-x n'a pas de travail:
et cela a réglé le problème.
Cela a fonctionné pour moi, après l'ajout de
position: relative
de l'emballage.overflow: hidden
au lieu deoverflow-x: hidden
. Fonctionne sur mobile Safari, Chrome, IE11 sur OSX et Gagner.Garder la fenêtre intacte:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
En supposant que vous souhaitez atteindre l'effet d'un continu barre noire sur le côté droit:
#menubar
ne devrait pas dépasser 100%, ajuster la rayon des frontières tels que le côté droit est carré et d'ajuster le rembourrage de sorte qu'il s'étend sur un peu plus à droite. Modifier les lignes suivantes à votre#menubar
:Réglage de la
padding
de 10px de cours quitte le menu de gauche sur le bord de la barre, vous pouvez mettre le reste de la 40px à chacun desli
, 20px sur chaque côté, à gauche et à droite:Lorsque vous redimensionnez le navigateur plus petits, vous trouverez toujours le fond blanc: placez votre texture d'arrière-plan au lieu de votre div
body
. Ou sinon, réglez le menu de navigation, d'une largeur de 100% à une valeur inférieure à l'aide de requêtes de média. Il y a beaucoup de réglages à effectuer pour que votre code pour créer une mise en page correcte, je ne suis pas sûr de ce que vous avez l'intention de faire, mais le code ci-dessus en quelque sorte réparer votre débordant bar.box-sizing: border-box;
vous pouvez ajouter le remplissage à 100% de la largeur de la div.L'ajout d'un wrapper
<div>
autour de l'intégralité de votre contenu sera fait le travail. Alors que du point de vue sémantique "dégueulasse", j'ai ajouté un div avec une classe de overflowWrap droit à l'intérieur de labody
tag puis définir mon CSS comme ceci:Peut-être exagéré maintenant, mais fonctionne comme un charme!
J'ai rencontré le même problème avec les appareils Android, mais pas sur les périphériques iOS. Réussi à résoudre par la spécification de position:relative à la div extérieure des éléments en position absolue (avec overflow:hidden pour div extérieure)
J'ai résolu le problème en utilisant overflow-x:hidden; comme suit
structure est comme suit
1st div end_screen >> inside it >> end_screen_2(div) >> inside it >> end_screen_2.
'end_screen is the wrapper of end_screen_1 and end_screen_2 div's
Comme subarachnid dit overflow-x caché pour le corps et le html travaillé
Voici un exemple fonctionnel
Lien
Je viens de travailler sur ce pour quelques heures, en essayant diverses combinaisons de choses à partir de cela et d'autres pages. La chose qui a fonctionné pour moi à la fin était de faire un site wrapper div, comme suggéré dans l'acceptation de réponse, mais pour définir à la fois les débordements cachés au lieu de simplement le x de débordement. Si je laisse overflow-y à défiler, je me retrouve avec une page seulement défile verticalement par quelques pixels et puis s'arrête.
Juste ce fut assez, sans que quoi que ce soit sur le corps ou d'éléments html.
La seule façon de résoudre ce problème pour mon bootstrap modal (contenant un formulaire) était d'ajouter le code suivant dans mon CSS: