J'ai un site Web avec DIV aligné au centre. Maintenant, certaines pages ont besoin de défilement, d'autres non. Lorsque je passe d'un type à un autre, l'apparition d'une barre de défilement déplace la page de quelques pixels sur le côté. Existe-t-il un moyen d'éviter cela sans afficher explicitement les barres de défilement sur chaque page?
218
overflow-y: overlay
dans ce fil?overflow-y: overlay
est déprécié: developer.mozilla.org/en-US/docs/Web/CSS/overflowRéponses:
overflow-y: scroll est correct, mais vous devez l'utiliser avec la balise html, pas body, sinon vous obtenez une double barre de défilement dans IE 7
Ainsi, le bon css serait:
la source
Enveloppez le contenu de votre élément déroulant dans un div et appliquez
padding-left: calc(100vw - 100%);
.L'astuce est que cela
100vw
représente 100% de la fenêtre, y compris la barre de défilement. Si vous soustrayez100%
, qui est l'espace disponible sans la barre de défilement, vous vous retrouvez avec la largeur de la barre de défilement ou0
si elle n'est pas présente. La création d'un remplissage de cette largeur à gauche simulera une deuxième barre de défilement, décalant le contenu centré vers la droite.Veuillez noter que cela ne fonctionnera que si l'élément déroulant utilise toute la largeur de la page, mais cela ne devrait pas poser de problème la plupart du temps car il n'y a que peu d'autres cas où vous avez centré du contenu défilant.
la source
100vw
et100%
mesuré différentes choses, j'ai donc appris quelque chose d'utile!@media screen and (min-width: 800px) {...}
. Dans les cas où le contenu s'adaptera à la largeur de la page. Par exemple sur les petites résolutions, il y aura un écart inutile, déplaçant le contenu vers la droiteJe crois que non. Mais styling
body
avecoverflow: scroll
devrait faire. Vous semblez cependant le savoir.la source
overflow-y: scroll
:)Le défilement étant toujours affiché, ce n'est peut-être pas bon pour la mise en page.
Essayez de limiter la largeur du corps avec CSS3
vw
est la largeur de la fenêtre d'affichage (voir ce lien pour des explications)calc
calculer dans css334px
signifie largeur de barre de défilement double (voir ceci pour fixe ou ceci pour calculer si vous ne faites pas confiance aux tailles fixes)la source
padding-left: 34px;
pour centrer uniformément ma page.Exemple . Cliquez sur le bouton "modifier la hauteur minimale".
Avec
calc(100vw - 100%)
nous pouvons calculer la largeur de la barre de défilement (et si elle n'est pas affichée, elle sera 0). Idée: en utilisant une marge négative à droite, nous pouvons augmenter la largeur de<html>
cette largeur. Vous verrez une barre de défilement horizontale - elle doit être masquée à l'aide deoverflow-x: hidden
.la source
calc(100% - 100vw)
au lieu de multiplier par-1
?Je ne sais pas s'il s'agit d'un ancien message, mais j'ai eu le même problème et si vous souhaitez faire défiler verticalement, vous devriez essayer
overflow-y:scroll
la source
Si vous changez de taille ou après avoir chargé certaines données, vous ajoutez la barre de défilement, vous pouvez essayer de suivre, créer une classe et appliquer cette classe.
la source
J'ai résolu le problème sur l'un de mes sites Web en définissant explicitement la largeur du corps en javascript par la taille de la fenêtre moins la largeur de la barre de défilement. J'utilise une fonction basée sur jQuery documentée ici pour déterminer la largeur de la barre de défilement.
la source
Développer la réponse en utilisant ceci:
Un commentateur a suggéré d'ajouter également un remplissage à gauche pour maintenir le centrage:
Mais les choses ne semblent pas correctes si votre contenu est plus large que la fenêtre d'affichage. Pour résoudre ce problème, vous pouvez utiliser des requêtes multimédias, comme ceci:
Où le 1058px = largeur du contenu + 17 * 2
Cela permet à une barre de défilement horizontale de gérer le débordement x et de maintenir le contenu centré centré lorsque la fenêtre est suffisamment large pour contenir votre contenu à largeur fixe
la source
S'étendant sur la réponse de Rapti , cela devrait tout aussi bien fonctionner, mais cela ajoute plus de marge sur le côté droit de la
body
et la masque avec unehtml
marge négative , au lieu d'ajouter un remplissage supplémentaire qui pourrait potentiellement affecter la mise en page de la page. De cette façon, rien n'est changé sur la page réelle (dans la plupart des cas), et le code est toujours fonctionnel.la source
overflow-x: hidden
et cela l'a corrigé.La solution de @ kashesandr a fonctionné pour moi, mais pour masquer la barre de défilement horizontale, j'ai ajouté un autre style pour le corps. voici la solution complète:
CSS
JS
Solution JS uniquement (lorsque le 2e modal est ouvert à partir du 1er modal):
la source
J'ai essayé de résoudre probablement le même problème que celui causé par la
.modal-open
classe de bootstrap twitter appliquébody
. La solutionhtml {overflow-y: scroll}
n'aide pas. Une solution possible que j'ai trouvée est d'ajouter{width: 100%; width: 100vw}
à l'html
élément.la source
html { width: 100vw; }
a travaillé pour moiJ'ai l'habitude d'avoir ce problème, mais le moyen le plus simple de le résoudre est le suivant (cela fonctionne pour moi):
sur le type de fichier CSS:
aussi simple que ça! :)
la source
Les solutions publiées en utilisant calc (100vw - 100%) sont sur la bonne voie, mais il y a un problème avec ceci: vous aurez toujours une marge à gauche de la taille de la barre de défilement, même si vous redimensionnez la fenêtre pour que le le contenu remplit la fenêtre entière.
Si vous essayez de contourner cela avec une requête multimédia, vous aurez un moment de claquement gênant car la marge ne diminuera pas progressivement lorsque vous redimensionnerez la fenêtre.
Voici une solution qui contourne cela et AFAIK n'a aucun inconvénient:
Au lieu d'utiliser margin: auto pour centrer votre contenu, utilisez ceci:
Remplacez 500px par la moitié de la largeur maximale de votre contenu (dans cet exemple, la largeur maximale du contenu est de 1000px). Le contenu restera désormais centré et la marge diminuera progressivement jusqu'à ce que le contenu remplisse la fenêtre.
Afin d'empêcher la marge de devenir négative lorsque la fenêtre est plus petite que la largeur maximale, ajoutez simplement une requête multimédia comme ceci:
Et voilà!
la source
Si la largeur du tableau ne change pas, vous pouvez définir la largeur de l'élément (tel que tbody) qui contient la barre de défilement> 100% (permettant un espace supplémentaire pour la barre de défilement) et définir overflow-y sur "overlay" (donc que la barre de défilement reste fixe et ne déplace pas le tableau vers la gauche lorsqu'il apparaît). Définissez également une hauteur fixe pour l'élément avec la barre de défilement, afin que la barre de défilement apparaisse une fois la hauteur dépassée. Ainsi:
Remarque: vous devrez ajuster manuellement la largeur% car le% d'espace occupé par la barre de défilement sera relatif à la largeur de votre table (c'est-à-dire: plus petite largeur de table, plus de% requis pour s'adapter à la barre de défilement, car sa taille en pixels est constante )
Un exemple de table dynamique:
la source
Il suffit de régler la largeur de votre élément de conteneur comme ceci fera l'affaire
Cela fera que cet élément ignorera la barre de défilement et cela fonctionnera avec la couleur d'arrière-plan ou les images.
la source
J'ai utilisé du jquery pour résoudre ce problème
la source
la source
Contrairement à la réponse acceptée qui suggère une barre de défilement permanente sur la fenêtre du navigateur même si le contenu ne déborde pas de l'écran , je préférerais utiliser:
En effet, l'apparence de la barre de défilement a plus de sens si le contenu déborde réellement .
Cela a plus de sens que cela .
la source