it-swarm.com.de

Wie setze ich die Bildlaufleiste nur für Modal-Body?

Ich habe folgendes Element:

<div class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-dialog" style="overflow-y: scroll; max-height:85%;  margin-top: 50px; margin-bottom:50px;" > 
        <div class="modal-content"> 
            <div class="modal-header"> 
                <h3 class="modal-title"></h3> 
            </div> 
            <div class="modal-body"></div> 
            <div class="modal-footer"></div> 
        </div> 
    </div> 
</div> 

Es zeigt einen modalen Dialog wie diesen. Im Grunde genommen wird die Bildlaufleiste um den gesamten modal-dialog und nicht um den modal-body gelegt, der den Inhalt enthält, den ich anzeigen möchte.

Das Bild sieht ungefähr so ​​aus:

enter image description here

Wie erhalte ich eine Bildlaufleiste nur um modal-body?

Ich habe versucht, style="overflow-y: scroll; max-height:85%; margin-top: 50px; margin-bottom:50px;" zu modal-body zuzuweisen, aber es hat nicht funktioniert.

133
Subodh Nijsure

Sie müssen height des .modal-body eingeben und overflow-y: auto eingeben. Setzen Sie außerdem den Überlaufwert von .modal-dialog auf initial zurück.

Siehe das Arbeitsbeispiel:

http://www.bootply.com/T0yF2ZNTUd

.modal{
    display: block !important; /* I added this to see the modal, you don't need this */
}

/* Important part */
.modal-dialog{
    overflow-y: initial !important
}
.modal-body{
    height: 250px;
    overflow-y: auto;
}
237
Carlos Calla

Wenn Sie nur IE 9 oder höher unterstützen, können Sie dieses CSS verwenden, das sich nahtlos an die Größe des Fensters anpasst. Abhängig von der Höhe Ihrer Kopf- oder Fußzeile müssen Sie möglicherweise die "200px" anpassen.

.modal-body{
    max-height: calc(100vh - 200px);
    overflow-y: auto;
}
100

Problem gelöst mit Mähdrescherlösung @carlos calla und @jonathan marston.

    /* Important part */
.modal-dialog{
    overflow-y: initial !important
}
.modal-body{
    max-height: calc(100vh - 200px);
    overflow-y: auto;
}
25

Hinzufügen zu Carlos Calla 's großartiger Antwort.

Die Höhe von .modal-body muss festgelegt werden, ABER Sie können Medienabfragen verwenden, um sicherzustellen, dass es für die Bildschirmgröße geeignet ist.

.modal-body{
    height: 250px;
    overflow-y: auto;
}

@media (min-height: 500px) {
    .modal-body { height: 400px; }
}

@media (min-height: 800px) {
    .modal-body { height: 600px; }
}
11
laurakurup

Optional : Wenn Sie nicht möchten, dass das Modal die Fensterhöhe überschreitet und eine Bildlaufleiste im .modal-Body verwendet, können Sie diese ansprechende Lösung verwenden . Sehen Sie sich hier eine funktionierende Demo an: http://codepen.io/dimbslmh/full/mKfCc/

function setModalMaxHeight(element) {
  this.$element     = $(element);
  this.$content     = this.$element.find('.modal-content');
  var borderWidth   = this.$content.outerHeight() - this.$content.innerHeight();
  var dialogMargin  = $(window).width() > 767 ? 60 : 20;
  var contentHeight = $(window).height() - (dialogMargin + borderWidth);
  var headerHeight  = this.$element.find('.modal-header').outerHeight() || 0;
  var footerHeight  = this.$element.find('.modal-footer').outerHeight() || 0;
  var maxHeight     = contentHeight - (headerHeight + footerHeight);

  this.$content.css({
      'overflow': 'hidden'
  });

  this.$element
    .find('.modal-body').css({
      'max-height': maxHeight,
      'overflow-y': 'auto'
  });
}

$('.modal').on('show.bs.modal', function() {
  $(this).show();
  setModalMaxHeight(this);
});

$(window).resize(function() {
  if ($('.modal.in').length != 0) {
    setModalMaxHeight($('.modal.in'));
  }
});
10
dimbslmh

Für Bootstrap Versionen> = 4.3

Bootstrap 4.3 fügte Modalen eine neue integrierte Bildlauffunktion hinzu. Dies bewirkt nur, dass der Inhalt durch Modal-Body gescrollt wird, wenn die Größe des Inhalts andernfalls zum Scrollen der Seite führen würde. Fügen Sie dazu einfach die Klasse Modaldialog-scrollbar zu demselben Div hinzu, das die Klasse Modaldialog hat.

Hier ist ein Beispiel:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalScrollable">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModalScrollable" tabindex="-1" role="dialog" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalScrollableTitle">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>
6
Kodos Johnson

Ich weiß, dass dies ein altes Thema ist, aber dies kann jemand anderem helfen.

Ich konnte den Körper scrollen lassen, indem ich die Position des Modal-Dialog-Elements festlegte. Und da ich die genaue Höhe des Browserfensters nie erfahren würde, habe ich die Informationen genommen, die mir sicher waren, die Höhe der Kopf- und Fußzeile. Dann konnte ich den oberen und unteren Rand des Modal-Body-Elements an diese Höhen anpassen. Dies führte dann zu dem Ergebnis, das ich suchte. Ich warf eine Geige zusammen, um meine Arbeit zu zeigen.

wenn Sie einen Vollbild-Dialog wünschen, entfernen Sie einfach den Kommentar für die Breite: auto; innerhalb der .modal-dialog.full-screen Sektion.

https://jsfiddle.net/lot224/znrktLej/

Und hier ist das CSS, mit dem ich das Dialogfeld bootstrap geändert habe.

.modal-dialog.full-screen {
    position:fixed;
    //width:auto;  // uncomment to make the width based on the left/right attributes.
    margin:auto;                        
    left:0px;
    right:0px;
    top:0px;
    bottom:0px;
}

.modal-dialog.full-screen .modal-content {
      position:absolute;
      left:10px;
      right:10px;
      top:10px;
      bottom:10px;
}

.modal-dialog.full-screen .modal-content .modal-header {
        height:55px;  // adjust as needed.
}

.modal-dialog.full-screen .modal-content .modal-body {
        overflow-y: auto;
          position: absolute;
          top: 0;
          bottom: 0;
        left:0;
        right:0;
          margin-top: 55px; // .modal-header height
          margin-bottom: 80px;  // .modal-footer height
}

.modal-dialog.full-screen .modal-content .modal-footer {
        height:80px;  // adjust as needed.
        position:absolute;
        bottom:0;
        left:0;
        right:0;
}
4
Bogus Hawtsauce

Oder einfacher, Sie können zuerst zwischen Ihre Tags und dann in die CSS-Klasse einfügen.

<div style="height: 35px;overflow-y: auto;"> Some text o othre div scroll </div>
4
user7695590
#scroll-wrap {
    max-height: 50vh;
    overflow-y: auto;
}

Verwenden Sie max-height mit vh als Einheit für modal-body oder ein Wrapper-Div innerhalb von modal-body. Dadurch wird die Höhe von modal-body oder das Umbruch-Div (in diesem Beispiel) automatisch geändert, wenn ein Benutzer die Größe des Fensters ändert.

vh ist die Längeneinheit, die 1% der Ansichtsfenstergröße für die Ansichtsfensterhöhe darstellt.

Browserkompatibilität Diagramm für vh Einheit.

Beispiel: https://jsfiddle.net/q3xwr53f/

1
Steven

Was für mich funktioniert hat, ist die Einstellung der Höhe auf 100%, wobei der Überlauf auf Auto hofft, dies wird helfen

   <div style="height: 100%;overflow-y: auto;"> Some text o othre div scroll </div>
0
njoshsn

Eine einfache Lösung, um die modale Höhe proportional zur Körpergröße einzustellen:

$(document).ready(function () {
    $('head').append('<style type="text/css">.modal .modal-body {max-height: ' + ($('body').height() * .8) + 'px;overflow-y: auto;}.modal-open .modal{overflow-y: hidden !important;}</style>');
});

körpergröße muss 100% sein:

html, body {
    height: 100%;
    min-height: 100%;
}

Ich setze die modale Körpergröße auf 80% des Körpers, dies kann natürlich angepasst werden.

Ich hoffe es hilft.

0
migli