wake-up-neo.net

So aktivieren Sie das Scrollen von Inhalten in einem Bootstrap-Modal

Ich versuche, viel Text in eine mit Twitter Bootstrap erstellte modale Box einzufügen, aber ich habe ein Problem: Der Inhalt lässt sich nicht scrollen. Ich habe versucht, overflow:scroll und overflow-y:scroll hinzuzufügen, aber ohne Erfolg; Dies bewirkt lediglich, dass eine Bildlaufleiste angezeigt wird, ohne dass der Bildlauf tatsächlich aktiviert wird.

Was ist der Grund dafür und was kann ich tun?

71
user798204

Ändern Sie in Bootstrap.css das Hintergrundattribut (position) von Modal von fixed in absolute.

62
jktress

In Bootstrap 3 müssen Sie die css-Klasse .modal ändern.

vorher (Bootstrap-Standard):

.modal {

    overflow-y: auto;
}

after (nachdem Sie es bearbeitet haben):

.modal {

    overflow-y: scroll;
}
41
Philipp Wirth

Diese Antwort besteht eigentlich aus zwei Teilen, einer UX-Warnung und einer tatsächlichen Lösung.

UX-Warnung

Wenn Ihr Modal so viel enthält, dass ein Bildlauf erforderlich ist, fragen Sie sich, ob Sie überhaupt einen Modal verwenden sollten. Die Größe des Bootstrap-Modals ist standardmäßig eine ziemlich gute Einschränkung für die Anzahl der visuellen Informationen. Je nachdem, was Sie erstellen, möchten Sie möglicherweise eine neue Seite oder einen Assistenten auswählen.

Aktuelle Lösung

Ist hier: http://jsfiddle.net/ajkochanowicz/YDjsE/2/

Mit dieser Lösung können Sie auch die Höhe von .modal ändern und den .modal-body den verbleibenden Platz mit einer vertikalen Bildlaufleiste belegen, falls erforderlich.

UPDATE

Beachten Sie, dass das Modal in Bootstrap 3 überarbeitet wurde, um überfließenden Inhalt besser zu handhaben. Sie können das Modal selbst nach oben und unten scrollen, während es unter dem Ansichtsfenster fließt.

17
Adam Grant

Legen Sie die Höhe für modal-body und nicht für das gesamte Modal fest, um einen perfekten Bildlauf für die modale Überlagerung zu erhalten. Ich verstehe es so:

.MyModal {
    height: 450px;
    overflow-y: auto;
}

Hier können Sie die Höhe nach Ihren Anforderungen einstellen.

4
Ravindra

Wenn ich mich recht erinnere, dass Überlauf eingestellt wurde: "Verdeckt auf dem Körper" funktionierte nicht bei allen Browsern, die ich für eine modale Bibliothek testete, die ich für eine mobile Website erstellt hatte. Insbesondere hatte ich Probleme mit dem Scrollen des Körpers zusätzlich zum modalen Scrollen, selbst wenn ich Überlauf auf den Körper lege.

Für meine jetzige Seite habe ich so etwas getan. Es speichert im Wesentlichen nur Ihre aktuelle Bildlaufposition, zusätzlich zu "Überlauf" im Seitenkörper wird "Verdeckt" festgelegt, und stellt die Bildlaufposition wieder her, nachdem der Modal geschlossen wurde. Es gibt eine Bedingung, wenn ein anderer Bootstrap-Modal geöffnet wird, während einer bereits aktiv ist. Ansonsten sollte der Rest des Codes selbsterklärend sein. Wenn der Überlauf: ausgeblendet auf dem Hauptteil nicht verhindert, dass das Fenster für einen bestimmten Browser gescrollt wird, wird dadurch beim Verlassen der ursprüngliche Bildlauf mindestens zurückgesetzt.

function bindBootstrapModalEvents() {
    var $body = $('body'),
        curPos = 0,
        isOpened = false,
        isOpenedTwice = false;
    $body.off('shown.bs.modal hidden.bs.modal', '.modal');
    $body.on('shown.bs.modal', '.modal', function () {
        if (isOpened) {
            isOpenedTwice = true;
        } else {
            isOpened = true;
            curPos = $(window).scrollTop();
            $body.css('overflow', 'hidden');
        }
    });
    $body.on('hidden.bs.modal', '.modal', function () {
        if (!isOpenedTwice) {
            $(window).scrollTop(curPos);
            $body.css('overflow', 'visible');
            isOpened = false;
        }
        isOpenedTwice = false;
    });
}

Wenn Sie das nicht mögen, besteht die andere Möglichkeit darin, eine maximale Höhe und einen Überlauf zuzuweisen: auto .modal-body wie folgt:

.modal-body {
  max-height:300px;
  overflow:auto;
}

In diesem Fall können Sie die maximale Höhe für verschiedene Bildschirmgrößen konfigurieren und den Überlauf: auto für verschiedene Bildschirmgrößen belassen. Sie müssen jedoch sicherstellen, dass die modale Kopfzeile, die Fußzeile und der Textkörper nicht mehr als die Bildschirmgröße ergeben. Ich würde diesen Teil in Ihre Berechnungen einbeziehen.

4
Daniel

Wenn Sie Bootstrap Modal mit Skrollr verwenden, wird der Modal nicht mehr scrollbar. 

Problem behoben, bei dem die Ausbreitung des Berührungsereignisses angehalten wurde. 

$('#modalFooter').on('touchstart touchmove touchend', function(e) {
    e.stopPropagation();
});

weitere Details unter Fügt dem Element in # skrollr-body ein Bildlaufereignis hinzu

2
ken

So habe ich es mit reinem CSS geschafft, einige Klassen zu überschreiben:

.modal {
  height: 60%;

  .modal-body {
    height: 80%;
    overflow-y: scroll;
  }
}

Ich hoffe es hilft dir.

Für Bootstrap 3 müssen Sie auch die .modal-open-Klasse auf body überschreiben.

    body.modal-open, 
    .modal-open 
    .navbar-fixed-top, 
    .modal-open 
    .navbar-fixed-bottom {
     margin-right: 15px; /*<-- to margin-right: 0px;*/
    }
1
Jmorvan

Ich hatte das gleiche Problem und fand einen Fix wie folgt:

$('.yourModalClassOr#ID').on('shown.bs.modal', function (e) {
    $(' yourModalClassOr#ID ').css("max-height", $(window).height());
    $(' yourModalClassOr#ID ').css("overflow-y", "scroll");          /*Important*/
    $(' yourModalClassOr#ID ').modal('handleUpdate');

});

100% arbeiten.

1
.modal-body {
    max-height: 80vh;
    overflow-y: scroll;
}

es funktioniert für mich

1
Ivan Komarov

Ich habe dieses Problem bei Mobile Safari auf meinem iPhone6

Bootstrap fügt dem Body die Klasse .modal-open hinzu, wenn ein Modal geöffnet wird.

Ich habe versucht, minimale Überschreibungen auf Bootstrap 3.2.0 vorzunehmen, und habe folgendes gefunden:

.modal-open {
    position: fixed;
}

.modal {
    overflow-y: auto;
}

Zum Vergleich habe ich unten die zugehörigen Bootstrap-Stile hinzugefügt.

Ausgewählter Extrakt aus Bootstrap/less/modals.less (nicht in Ihrem Fix enthalten):

// Kill the scroll on the body
.modal-open {
  overflow: hidden;
}

// Container that the modal scrolls within
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  -webkit-overflow-scrolling: touch;
}

.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}

Verwendete Mobile Safari-Version: User-Agent Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4

1
ptim

Ich konnte dies überwinden, indem ich die Metrik "vh" mit maximaler Höhe für das .modal-body-Element verwendete. 70vh sah für meine Anwendungen richtig aus.

.modal-body {
   overflow-y: auto;
   max-height: 70vh;
}
1
Keith.Abramo

Nachdem ich all diese Lösungen verwendet hatte, konnte ich immer noch nicht mit der Maus scrollen.

Also habe ich unten Css Fixes hinzugefügt, damit es funktioniert

.modal-open {
    overflow: hidden;
}

.modal-open .modal {
    overflow-x: hidden;
    overflow-y: auto;
    **pointer-events: auto;**
}

pointer-events hinzugefügt: auto; um die Maus scrollbar zu machen.

0
Ritesh Kashyap

Bootstrap fügt dem "modal-open"-Tag einen css <body> hinzu, wenn ein Modal geöffnet oder geschlossen wird. Wenn Sie also mehrere Modale öffnen und dann eine beliebige schließen, wird die modal-open-CSS aus dem body-Tag entfernt.

Der Bildlaufeffekt hängt jedoch von dem in "overflow-y: auto;" definierten Attribut modal-open ab.

0
Nick