How to put scroll bar only for modal-body?

后端 未结 13 1173
悲哀的现实
悲哀的现实 2020-11-30 18:14

I have the following element:

相关标签:
13条回答
  • 2020-11-30 18:30

    A simple js solution to set modal height proportional to body's height :

    $(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>');
    });
    

    body's height has to be 100% :

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

    I set modal body height to 80% of body, this can be of course customized.

    Hope it helps.

    0 讨论(0)
  • 2020-11-30 18:32

    I know this is an old topic but this may help someone else.

    I was able to make the body scroll by making the modal-dialog element position fixed. And since I would never know the exact height of the browser window, I took the information I was sure about, the height of the header and the footer. I was then able to make the modal-body element's top and bottom margins match those heights. This then produced the result I was looking for. I threw together a fiddle to show my work.

    also, if you want a full screen dialog just un-comment the width:auto; inside the .modal-dialog.full-screen section.

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

    And here is the css that I used to modify the bootstrap dialog.

    .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;
    }
    
    0 讨论(0)
  • 2020-11-30 18:33

    Problem solved with combine solution @carlos calla and @jonathan marston.

        /* Important part */
    .modal-dialog{
        overflow-y: initial !important
    }
    .modal-body{
        max-height: calc(100vh - 200px);
        overflow-y: auto;
    }
    
    0 讨论(0)
  • 2020-11-30 18:37

    Optional: If you don't want the modal to exceed the window height and use a scrollbar in the .modal-body, you can use this responsive solution. See a working demo here: 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'));
      }
    });
    
    0 讨论(0)
  • 2020-11-30 18:38

    What worked for me is setting the height to 100% the having the overflow on auto hope this will help

       <div style="height: 100%;overflow-y: auto;"> Some text o othre div scroll </div>
    
    0 讨论(0)
  • 2020-11-30 18:42

    For Bootstrap versions >= 4.3

    Bootstrap 4.3 added new built-in scroll feature to modals. This makes only the modal-body content scroll if the size of the content would otherwise make the page scroll. To use it, just add the class modal-dialog-scrollable to the same div that has the modal-dialog class.

    Here is an example:

    <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>

    0 讨论(0)
提交回复
热议问题