Ich habe eine Website mit zentriertem DIV. Einige Seiten müssen gescrollt werden, andere nicht. Wenn ich von einem Typ zu einem anderen wechsle, verschiebt das Erscheinungsbild einer Bildlaufleiste die Seite einige Pixel zur Seite. Gibt es eine Möglichkeit, dies zu vermeiden, ohne die Bildlaufleisten auf jeder Seite explizit anzuzeigen?
218
overflow-y: overlay
in diesem Thread?overflow-y: overlay
wird abgeschrieben: developer.mozilla.org/en-US/docs/Web/CSS/overflowAntworten:
overflow-y: scroll ist korrekt, aber Sie sollten es mit dem HTML-Tag verwenden, nicht mit body, sonst erhalten Sie in IE 7 eine doppelte Bildlaufleiste.
Das richtige CSS wäre also:
quelle
Wickeln Sie den Inhalt Ihres scrollbaren Elements in ein div und wenden Sie es an
padding-left: calc(100vw - 100%);
.Der Trick besteht darin, dass
100vw
100% des Ansichtsfensters einschließlich der Bildlaufleiste dargestellt werden. Wenn Sie subtrahieren100%
, was der verfügbare Platz ohne die Bildlaufleiste ist, erhalten Sie die Breite der Bildlaufleiste oder0
wenn sie nicht vorhanden ist. Wenn Sie links einen Abstand dieser Breite erstellen, wird eine zweite Bildlaufleiste simuliert, die den zentrierten Inhalt wieder nach rechts verschiebt.Bitte beachten Sie, dass dies nur funktioniert, wenn das scrollbare Element die gesamte Breite der Seite verwendet. Dies sollte jedoch die meiste Zeit kein Problem sein, da es nur wenige andere Fälle gibt, in denen Sie scrollbaren Inhalt zentriert haben.
quelle
100vw
und100%
verschiedene Dinge gemessen, also habe ich etwas Nützliches daraus gelernt!@media screen and (min-width: 800px) {...}
. In Fällen, in denen der Inhalt der Seitenbreite entspricht. Zum Beispiel wird es bei kleinen Auflösungen unnötige Lücken geben, die den Inhalt nach rechts verschiebenIch denke nicht. Aber Styling
body
mitoverflow: scroll
sollte reichen. Das scheinen Sie aber zu wissen.quelle
overflow-y: scroll
:)Wenn der Bildlauf immer angezeigt wird, ist dies möglicherweise nicht gut für das Layout.
Versuchen Sie, die Körperbreite mit css3 zu begrenzen
vw
ist die Breite des Ansichtsfensters (siehe diesen Link für eine Erklärung).calc
Berechnen in CSS334px
steht für doppelte Breite der Bildlaufleiste (siehe dies für feste oder dies zu berechnen, wenn Sie festen Größen nicht vertrauen)quelle
padding-left: 34px;
um meine Seite gleichmäßig zu zentrieren.Beispiel . Klicken Sie auf die Schaltfläche "Mindesthöhe ändern".
Mit können
calc(100vw - 100%)
wir die Breite der Bildlaufleiste berechnen (und wenn sie nicht angezeigt wird, ist sie 0). Idee: Mit negativem Rand rechts können wir die Breite<html>
auf diese Breite erhöhen . Sie sehen eine horizontale Bildlaufleiste - diese sollte mit ausgeblendet werdenoverflow-x: hidden
.quelle
calc(100% - 100vw)
anstatt zu multiplizieren-1
?Ich weiß nicht, ob dies ein alter Beitrag ist, aber ich hatte das gleiche Problem und wenn Sie nur vertikal scrollen möchten, sollten Sie es versuchen
overflow-y:scroll
quelle
Wenn Sie die Größe ändern oder nach dem Laden einiger Daten die Bildlaufleiste hinzufügen, können Sie Folgendes versuchen, eine Klasse erstellen und diese Klasse anwenden.
quelle
Ich habe das Problem auf einer meiner Websites gelöst, indem ich die Breite des Körpers in Javascript explizit durch die Größe des Ansichtsfensters abzüglich der Breite der Bildlaufleiste festgelegt habe. Ich verwende eine hier dokumentierte jQuery-basierte Funktion , um die Breite der Bildlaufleiste zu bestimmen.
quelle
Erweitern Sie die Antwort damit:
Ein Kommentator schlug vor, auch die linke Polsterung hinzuzufügen, um die Zentrierung beizubehalten:
Aber dann sehen die Dinge nicht richtig aus, wenn Ihr Inhalt breiter als das Ansichtsfenster ist. Um dies zu beheben, können Sie Medienabfragen wie folgt verwenden:
Wobei 1058px = Inhaltsbreite + 17 * 2
Auf diese Weise kann eine horizontale Bildlaufleiste den x-Überlauf verarbeiten und den zentrierten Inhalt zentriert halten, wenn das Ansichtsfenster breit genug ist, um Ihren Inhalt mit fester Breite aufzunehmen
quelle
Ausgehend von Raptis Antwort sollte dies genauso gut funktionieren, aber es fügt mehr Rand auf der rechten Seite des hinzu
body
und verbirgt ihn mit negativemhtml
Rand, anstatt zusätzliche Auffüllungen hinzuzufügen, die möglicherweise das Layout der Seite beeinflussen könnten. Auf diese Weise wird (in den meisten Fällen) nichts auf der eigentlichen Seite geändert, und der Code ist weiterhin funktionsfähig.quelle
overflow-x: hidden
und das hat es behoben.Die Lösung von @ kashesandr hat bei mir funktioniert, aber um die horizontale Bildlaufleiste auszublenden, habe ich einen weiteren Stil für den Körper hinzugefügt. Hier ist die Komplettlösung:
CSS
JS
JS Only Solution (wenn das 2. Modal vom 1. Modal geöffnet wurde):
quelle
Ich habe versucht, wahrscheinlich das gleiche Problem zu beheben, das durch die
.modal-open
angewendete Twitter-Bootstrap- Klasse verursacht wurdebody
. Die Lösunghtml {overflow-y: scroll}
hilft nicht. Eine mögliche Lösung, die ich gefunden habe, ist das Hinzufügen{width: 100%; width: 100vw}
zumhtml
Element.quelle
html { width: 100vw; }
arbeitete für michFrüher hatte ich dieses Problem, aber der einfachste Weg, es zu beheben, ist folgender (das funktioniert bei mir):
zum CSS-Dateityp:
so einfach! :) :)
quelle
Die mit calc (100vw - 100%) veröffentlichten Lösungen befinden sich auf dem richtigen Weg, aber es gibt ein Problem: Sie haben für immer einen Rand links von der Größe der Bildlaufleiste, selbst wenn Sie die Größe des Fensters so ändern, dass die Inhalt füllt das gesamte Ansichtsfenster aus.
Wenn Sie versuchen, dies mit einer Medienabfrage zu umgehen, haben Sie einen unangenehmen Moment, da der Rand beim Ändern der Fenstergröße nicht immer kleiner wird.
Hier ist eine Lösung, die das umgeht und AFAIK hat keine Nachteile:
Verwenden Sie Folgendes, anstatt margin: auto zum Zentrieren Ihrer Inhalte zu verwenden:
Ersetzen Sie 500px durch die Hälfte der maximalen Breite Ihres Inhalts (in diesem Beispiel beträgt die maximale Breite des Inhalts 1000px). Der Inhalt bleibt nun zentriert und der Rand wird schrittweise verringert, bis der Inhalt das Ansichtsfenster ausfüllt.
Um zu verhindern, dass der Rand negativ wird, wenn das Ansichtsfenster kleiner als die maximale Breite ist, fügen Sie einfach eine Medienabfrage wie folgt hinzu:
Et voilà!
quelle
Wenn sich die Breite der Tabelle nicht ändert, können Sie die Breite des Elements (z. B. tbody), das die Bildlaufleiste enthält, auf> 100% einstellen (wobei zusätzlicher Platz für die Bildlaufleiste vorhanden ist) und overflow-y auf "overlay" setzen (so) dass die Bildlaufleiste fest bleibt und die Tabelle nicht nach links verschiebt, wenn sie angezeigt wird). Stellen Sie außerdem mit der Bildlaufleiste eine feste Höhe für das Element ein, damit die Bildlaufleiste angezeigt wird, sobald die Höhe überschritten wird. Wie so:
Hinweis: Sie müssen die Breite% manuell anpassen, da der prozentuale Platzbedarf der Bildlaufleiste relativ zu Ihrer Tabellenbreite ist (dh: kleinere Tabellenbreite, mehr% erforderlich, um die Bildlaufleiste anzupassen, da die Größe in Pixel konstant ist )
Ein dynamisches Tabellenbeispiel:
quelle
Wenn Sie einfach die Breite Ihres Containerelements so einstellen, reicht dies aus
Dadurch ignoriert dieses Element die Bildlaufleiste und arbeitet mit Hintergrundfarben oder Bildern.
quelle
Ich habe eine Frage gestellt, um das zu lösen
quelle
quelle
Im Gegensatz zu der akzeptierten Antwort, die eine permanente Bildlaufleiste im Browserfenster vorschlägt, selbst wenn der Inhalt nicht über den Bildschirm läuft , würde ich lieber Folgendes verwenden:
Dies liegt daran, dass das Erscheinungsbild der Bildlaufleiste sinnvoller ist, wenn der Inhalt tatsächlich überläuft .
Das macht mehr Sinn als das .
quelle