Ich arbeite an einer Site mit Bootstrap 3.1.0.
Sie werden feststellen, dass beim Öffnen des modalen Fensters die Browser-Bildlaufleiste nur für den Bruchteil einer Sekunde verschwindet und dann wieder angezeigt wird. Das Gleiche gilt, wenn Sie es schließen.
Wie kann ich es so gestalten, dass es ohne Interaktion mit der Browser-Bildlaufleiste geöffnet und geschlossen wird? Ich habe Beiträge auf dem Stapel gesehen, in denen Leute Probleme hatten, aber ich kann keine spezifische Antwort auf mein Problem finden. Wenn also jemand anderes diese Anfrage gestellt hat und jemand davon weiß und mich damit verknüpfen möchte, würde ich mich freuen es. Ich habe ungefähr 2 Stunden danach gesucht, bevor ich etwas gepostet habe.
html
twitter-bootstrap
responsive-design
twitter-bootstrap-3
Daniel White
quelle
quelle
Antworten:
Das habe ich in Github gefunden, als ich nach diesem Problem gesucht habe und für mich funktioniert es gut
js:
$(document).ready(function () { $('.modal').on('show.bs.modal', function () { if ($(document).height() > $(window).height()) { // no-scroll $('body').addClass("modal-open-noscroll"); } else { $('body').removeClass("modal-open-noscroll"); } }); $('.modal').on('hide.bs.modal', function () { $('body').removeClass("modal-open-noscroll"); }); })
CSS Verwenden Sie dieses CSS, wenn Sie Nav-Fixed-Top und Navbar-Fixed-Bottom haben :
body.modal-open-noscroll { margin-right: 0!important; overflow: hidden; } .modal-open-noscroll .navbar-fixed-top, .modal-open .navbar-fixed-bottom { margin-right: 0!important; }
oder verwenden Sie dieses CSS, wenn Sie Navbar-Standard haben
body.modal-open-noscroll { margin-right: 0!important; overflow: hidden; } .modal-open-noscroll .navbar-default, .modal-open .navbar-default { margin-right: 0!important; }
quelle
.modal { overflow-y: auto; } .modal-open { overflow: auto; }
Wird es loswerden. Dies wurde hinzugefügt, damit die Modals schneller reagieren, sodass Sie nach unten scrollen und ein Modal sehen können, wenn der Bildschirm zu kurz ist. Es verhindert auch, dass der Hintergrund gescrollt werden kann, während ein Modal aktiv ist. Wenn Sie diese Funktionalität nicht benötigen, können Sie das von mir veröffentlichte CSS verwenden.
Weitere Informationen: Sie setzen .modal-open auf dem Körper, wodurch jegliches Scrollen auf dem Körper verhindert wird und die Bildlaufleiste des Körpers ausgeblendet wird. Wenn das Modal angezeigt wird, hat es den dunklen Hintergrund, der den gesamten Bildschirm einnimmt, und das hat einen Überlauf-y: scroll, wodurch die Bildlaufleiste zurückgesetzt wird. Wenn das erweiterte Modal den unteren Bildschirmrand passiert, können Sie trotzdem den Bildlauf fortsetzen dunkler Hintergrund und sehen den Rest davon.
quelle
.modal-open { overflow: auto; padding-right: 0px !important; }
Fügen Sie auch Polster hinzu , wie @ ben.kaminski sagte, wodurch das Problem der Verschiebung nach links vollständig beseitigt wird. Hoffnung hilft.Das Problem der Verschiebung nach links kann nur mit CSS behoben werden.
.modal-open[style] { padding-right: 0px !important; }
Sie überschreiben nur einen Inline-Stil, der im Code vorhanden ist. Ich verwende meine in einem WordPress-Build und der Inline-Stil wurde auf den Körper angewendet. Sah so aus:
<body class="home blog logged-in modal-open" style="padding-right: 15px;">
Hoffe das hilft jemandem!
quelle
.modal { overflow-y: auto; } .modal-open { overflow: auto; } .modal-open[style] { padding-right: 0px !important; }
Danke an ben und cjd.
Der obige Code scheint für mich zu funktionieren.
quelle
Dies ist ein gemeldetes Problem beim Booten: https://github.com/twbs/bootstrap/issues/9855
Und dies ist meine vorübergehende Schnellkorrektur und funktioniert auch mit der festen oberen Navigationsleiste, nur mit Javascript. Laden Sie dieses Skript zusammen mit Ihrer Seite.
$(document.body) .on('show.bs.modal', function () { if (this.clientHeight <= window.innerHeight) { return; } // Get scrollbar width var scrollbarWidth = getScrollBarWidth() if (scrollbarWidth) { $(document.body).css('padding-right', scrollbarWidth); $('.navbar-fixed-top').css('padding-right', scrollbarWidth); } }) .on('hidden.bs.modal', function () { $(document.body).css('padding-right', 0); $('.navbar-fixed-top').css('padding-right', 0); }); function getScrollBarWidth () { var inner = document.createElement('p'); inner.style.width = "100%"; inner.style.height = "200px"; var outer = document.createElement('div'); outer.style.position = "absolute"; outer.style.top = "0px"; outer.style.left = "0px"; outer.style.visibility = "hidden"; outer.style.width = "200px"; outer.style.height = "150px"; outer.style.overflow = "hidden"; outer.appendChild (inner); document.body.appendChild (outer); var w1 = inner.offsetWidth; outer.style.overflow = 'scroll'; var w2 = inner.offsetWidth; if (w1 == w2) w2 = outer.clientWidth; document.body.removeChild (outer); return (w1 - w2); };
Hier ist das Arbeitsbeispiel: http://jsbin.com/oHiPIJi/64
quelle
.modal { overflow: auto; } .modal-open { overflow: auto; } .modal-open[style] { padding-right: 0px !important; }
Ich habe versucht, ein Modal von einem anderen abzufeuern, und die Schicht wurde verdoppelt. Danke für deinen Tipp.Wenn Sie eine feste Navigationsleiste haben und beim Öffnen von Modal nicht nach oben scrollen möchten, verwenden Sie diesen Stil
.modal-open { overflow: visible; } .modal-open, .modal-open .navbar-fixed-top, .modal-open .navbar-fixed-bottom { padding-right:0px!important; }
quelle
Keines der Elemente auf dieser Seite hat in Version 3.3.4 und 3.3.5 für mich funktioniert. Das Hinzufügen dieses CSS hat das Problem für mich gelöst.
body { padding-right:0px !important; margin-right:0px !important; }
quelle
um das Problem zu lösen, das dazu führt, dass die Seite nach rechts verschoben wird
html, body{ padding: 0 !important; }
quelle
overflow-y:auto
Antworten.$('body').on('show.bs.modal', function () { if ($("body").innerHeight() > $(window).height()) { $("body").css("margin-right", "17px"); } }); $('body').on('hidden.bs.modal', function (e) { $("body").css("margin-right", "0px"); });
Diese kleine Korrektur simuliert die Bildlaufleiste, wenn das Modal angezeigt wird, und fügt dem Körper einen Rand rechts hinzu.
quelle
Keine der oben genannten hat funktioniert und andere Stunden der Forschung. Aber der folgende Code funktionierte perfekt mit nur ein bisschen CSS. Das obige würde Inline-Stilpolster nicht entfernen: 17px; Mit JS oder jquery konnte ich 0 Auffüllungen hinzufügen, hatte aber keine Auswirkung.
.modal-open { padding-right: 0px !important; overflow-y: scroll; width: 100%; display: block; } .modal { position: fixed; top: 0; left: 0; z-index: 1050; display: none; width: 100%; height: 100%; outline: 0; padding-right: 0 !important; }
quelle
html, body{ padding-right: 0px !important; position: relative!important; }
Versuchen Sie diesen Code wirklich, es funktioniert
quelle
.modal { overflow-y: auto; } .modal-open { overflow: auto; } .modal-open[style] { padding-right: 0px !important; }
quelle
Ich hatte dieses Problem mit Bootstrap 4. Ich habe
html { overflow-y: scroll; }
und ich denke, es ist ein Problem, aber nach dem Hinzufügen.modal-open[style] { padding-right: 0px !important; }
zu meiner lokalen CSS-Datei funktioniert alles perfekt!.modal-open[style] { padding-right: 0px !important; }
quelle
padding-right: 0;
padding-right: 0px
In meinem Fall gibt das Body-Tag bereits an
overflow:hidden
.Wenn der modale Dialog geöffnet wird, wird er auch zum Text hinzugefügt
padding-right:17px;
.Mein Code hier
.modal-open { overflow: hidden!important; padding-right:0!important }
quelle
Ich habe dieses Problem behoben, indem ich diesen Code in meine CSS-Datei eingefügt habe:
body { padding-right: 0px !important; }
quelle
Ab Bootstrap 3.3.2 scheint das Verhalten so zu sein, dass die Bildlaufleisten entfernt werden, wenn das Dialogfeld angezeigt wird, und Bootstrap dem Body-Element eine rechte Auffüllung hinzufügt, um den zuvor von der Bildlaufleiste belegten Platz zu kompensieren. Leider verhindert dies nicht die Bildschirmverschiebung, zumindest in modernen Versionen von Chrome, IE, Firefox oder Safari. Keine der Korrekturen hier behebt dieses Problem vollständig, aber das Kombinieren der Antworten von ben.kaminski und eines Teils der Antwort von cjd82187 behebt das Problem nur mit CSS:
/* removes inline padding added by Boostrap that makes the screen shift left */ .modal-open[style] { padding-right: 0px !important; } /* keeps Bootstrap from removing the scrollbar if it's there */ .modal-open { overflow: auto; }
Wie von ben.kaminski erwähnt, wurde der Code zu Twitter Bootstrap hinzugefügt, sodass Sie einen Bildlauf durchführen können, um das Modal anzuzeigen, wenn es sich am unteren Bildschirmrand befindet. Um diese Funktionalität beizubehalten, können Sie die CSS-Lösung in eine Medienabfrage einbinden, sodass sie nur für große Ansichtsfenster gilt.
@media (min-width: 992px) { .modal-open[style] { padding-right: 0px !important; } .modal-open { overflow: auto; } }
quelle
Implementierte diese einfache Lösung
.modal-open { padding-right: 0 !important; } html { overflow-y: scroll !important; }
quelle
Verwenden Sie für Bootstrap-4.3.x das folgende CSS:
.modal-open { padding-right: 0 !important; } /* if you have .navbar in your page then add padding-right for your .navbar (default is 16px) */ .modal-open .navbar { padding-right: 16px !important; }
Das ist es. Es wird nichts anderes benötigt als: JavaScript-Code, um einige
.class
in Ihrebody
und dann CSS-Codes hinzuzufügen, um sie zu formatieren.quelle
Wenn das Bootstrap-Modal geöffnet wird, wird die Klasse .modal-open auf body tag gesetzt. In diesem Tag wird Überlauf: versteckt gesetzt. das müssen wir ändern. Fügen Sie den folgenden Code in Ihr CSS ein.
<style> body.modal-open { overflow: visible !important; } </style>
Referenz: - So beheben Sie den modalen Hintergrund von Bootstrap Scrollen Sie nach oben
quelle
Meine Seite benötigte eine modifizierte Version von Agni Pradharmas Code, um zu verhindern, dass er sich verschiebt, wenn das Modal angezeigt wird. Ich habe einen festen Navigationsheader und einige Seiten mit Bildlauf, andere ohne. Demo hier: http://jsbin.com/gekenakoki/1/
Ich habe beide CSS verwendet:
.modal { overflow-y: auto; } .modal-open { overflow: auto; }
und das Skript:
$(document.body) .on('show.bs.modal', function () { if (this.clientHeight <= window.innerHeight) { return; } // Get scrollbar width var scrollbarWidth = getScrollBarWidth(); if (scrollbarWidth) { $(document.body).css('padding-left', scrollbarWidth); } }) .on('hidden.bs.modal', function () { $(document.body).css('padding-left', 0); }); function getScrollBarWidth () { var inner = document.createElement('p'); inner.style.width = "100%"; inner.style.height = "200px"; var outer = document.createElement('div'); outer.style.position = "absolute"; outer.style.top = "0px"; outer.style.left = "0px"; outer.style.visibility = "hidden"; outer.style.width = "200px"; outer.style.height = "150px"; outer.style.overflow = "hidden"; outer.appendChild (inner); document.body.appendChild (outer); var w1 = inner.offsetWidth; outer.style.overflow = 'scroll'; var w2 = inner.offsetWidth; if (w1 == w2) w2 = outer.clientWidth; document.body.removeChild (outer); return (w1 - w2); };
quelle
Wenn jemand
react-bootstrap
die Lösung verwendet, ist dies nur ein bisschen komplexer, dareact-bootstrap
Inline-Stile auf dasbody
Element angewendet werden, um die Stileoverflow
und zupadding
bearbeiten. Dies bedeutet, dass Sie diese Inline-Stile mit überschreiben müssen!important
body.modal-open { // enable below if you want to additionally allow scrolling with the modal displayed // overflow: auto !important; // prevent the additional padding from being applied padding: 0 !important; }
HINWEIS : Wenn Sie das Scrollen nicht aktivieren (dh die Bildlaufleiste sichtbar machen), indem Sie den
overflow
Stilauskommentieren, wird der Seiteninhalt anscheinend um die Breite der Bildlaufleiste verschoben (sofern die Bildlaufleiste zuvor sichtbar war).quelle
Meine Jquery-Lösung:
var nb = $('nav.navbar-fixed-top'); $('.modal') .on('show.bs.modal', function () { nb.width(nb.width()); }) .on('hidden.bs.modal', function () { nb.width(nb.width('auto')); });
quelle
Für Bootstrap Version 3.2.0 beheben diese Zeilen in der CSS-Datei den Fehler:
.modal-open .navbar-fixed-top, .modal-open .navbar-fixed-bottom { padding-right: 17px; }
Lösung hier gefunden
quelle
Die beste Lösung für mich war, diese Einstellungen zu verwenden. Es funktioniert für Web und Mobile
.modal-open { overflow: hidden; position: absolute; width: 100%; height: 100%; }
quelle