Làm thế nào để đặt thanh cuộn chỉ cho cơ thể phương thức?


164

Tôi có yếu tố sau:

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

Nó hiển thị hộp thoại phương thức một cái gì đó như thế này, về cơ bản, nó đặt thanh cuộn xung quanh toàn bộ modal-dialogvà không modal-bodychứa nội dung tôi đang cố gắng hiển thị.

Hình ảnh trông giống như thế này:

nhập mô tả hình ảnh ở đây

Làm thế nào để tôi có được một thanh cuộn modal-bodychỉ xung quanh ?

Tôi đã cố gắng gán style="overflow-y: scroll; max-height:85%; margin-top: 50px; margin-bottom:50px;"cho modal-bodynhưng nó không hoạt động.


1
Vui lòng cung cấp một mẫu làm việc để cung cấp cho bạn sự trợ giúp tốt hơn, bạn có thể sử dụng bootply.com/new để làm điều đó.
Carlos Calla

Tiếp theo, cho phép các khối tiêu đề và chân trang chất lỏng tùy chọn bên trong phương thức để chỉ cuộn cơ thể: stackoverflow.com/questions/49173969/iêu
leontalbot

Câu trả lời:


297

Bạn phải đặt heightcái .modal-bodytrong và đưa ra overflow-y: auto. Cũng đặt lại .modal-dialoggiá trị tràn sang initial.

Xem mẫu làm việc:

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

Cảm ơn vì điều đó. Nó hoạt động rất tốt. Có thể là một cái gì đó không rõ ràng với tôi trong css. Tôi đã thử gán chiều cao tối đa cho cơ thể phương thức: 65% không hoạt động. Giải pháp bạn cung cấp chỉ hoạt động nếu tôi gán chiều cao cố định cho cơ thể phương thức. Có cách nào để nói hộp thoại modal chiếm 85% cửa sổ và thân modal nên chiếm 90% hộp thoại modal không? Nhưng một lần nữa giải pháp bạn cung cấp làm việc cho tôi, bây giờ. Cảm ơn!
Subodh Nijsure

3
@SubodhNijsure Xin lỗi vì phản hồi muộn. Bạn không thể đặt chiều cao theo% vì điều đó có nghĩa là% cha mẹ của nó, trong trường hợp này là cha mẹ có nội dung .modal và chiều cao của nó phụ thuộc vào con cái của nó. Đó là lý do tại sao nó sẽ không hoạt động trừ khi bạn đặt một trong số chúng. Hoặc bạn đặt chiều cao nội dung .modal hoặc đặt chiều cao cơ thể .modal. Nếu bạn đặt chiều cao của nội dung dưới cùng, vì bạn không lấp đầy tất cả chiều cao của nội dung .modal.
Carlos Calla

Hãy nhớ rằng initialtừ khóa của CSS không hoạt động cho Internet Explorer, mặc dù nó hoạt động với Edge.
phân tích

18
chỉ là một con trỏ nhỏ: thay vì "chiều cao 250px" có thể trông xấu xí trên một số điện thoại chỉ có chiều cao 230px hoặc thấp hơn với thanh điều hướng theo chiều ngang: chỉ sử dụng max-height: 80vh;80% tổng chiều cao của khung nhìn và chỉ cho chiều cao tối đa, chứ không phải nếu nó là một cửa sổ bật lên nhỏ
Toskan

1
hoạt động tốt, nhưng sau khi đóng chế độ, các liên kết trên cửa sổ 'cha mẹ' không thể nhấp được nữa ... đã giải quyết bằng mã sau: .modal .modal-body {max-height: 420px; tràn-y: tự động; }
cwhisperer

119

Nếu bạn chỉ hỗ trợ IE 9 trở lên, bạn có thể sử dụng CSS này sẽ mở rộng quy mô theo kích thước của cửa sổ. Bạn có thể cần phải điều chỉnh "200px", tùy thuộc vào chiều cao của tiêu đề hoặc chân trang của bạn.

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

Theo [1] và [2], điều này cũng được Chrome, Firefox và Safari hỗ trợ. [1] developer.mozilla.org/en-US/docs/Web/CSS/, [2] developer.mozilla.org/en-US/docs/Web/CSS/
thừng

Lưu ý: Giải pháp này làm cho cửa sổ bật lên xuất hiện dưới tiêu đề hoặc chân trang tùy thuộc vào tùy chọn được chọn ở trên cùng hoặc dưới cùng Xem fiddle này tôi đã tạo: jsfiddle.net/2qeo99k3/4 Nếu không có hack css, nó chỉ hoạt động tốt, chỉ cần gỡ bỏ nó trong fiddle để xem nó hoạt động
Marc Roussel

Một cách giải quyết cho popover có thể được tìm thấy ở đây: stackoverflow.com/questions/45666828/ mẹo
Marc Roussel

36

Vấn đề được giải quyết với giải pháp kết hợp @carlos calla và @jonathan marston.

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

20

Đối với phiên bản Bootstrap> = 4.3

Bootstrap 4.3 đã thêm tính năng cuộn tích hợp mới vào các chế độ. Điều này chỉ làm cho cuộn nội dung cơ thể phương thức nếu kích thước của nội dung sẽ làm cho cuộn trang. Để sử dụng nó, chỉ cần thêm lớp modal-hộp thoại có thể cuộn vào cùng một div có hộp thoại modal lớp .

Đây là một ví dụ:

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


14

Thêm vào Carlos Calla câu trả lời tuyệt vời của .

Chiều cao của thân máy .modal phải được đặt, NHƯNG bạn có thể sử dụng truy vấn phương tiện để đảm bảo phù hợp với kích thước màn hình.

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

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

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

Có một giả định rằng chiều cao sẽ là 400px hoặc cao hơn trên thiết bị di động là bị lỗi. Sử dụng chiều rộng để xác định chiều cao hoàn toàn không phải là một giải pháp khả thi. Có quá nhiều trường hợp sử dụng sẽ khiến điều này bị phá vỡ.
Dâu tây

2
@Strawberry anh ấy thực sự đã sử dụng chiều cao tối thiểu (không phải chiều rộng tối thiểu) và đảm bảo chiều cao cho trước nhỏ hơn chiều cao tối thiểu trong truy vấn phương tiện. Ngoài ra, anh ta chỉ đưa ra một ví dụ cho ý tưởng của mình vì truy vấn phương tiện có thể thay đổi rất nhiều tùy thuộc vào những gì OP muốn đạt được.
Carlos Calla

12

Tùy chọn : Nếu bạn không muốn phương thức vượt quá chiều cao cửa sổ và sử dụng thanh cuộn trong phần thân .modal, bạn có thể sử dụng giải pháp đáp ứng này. Xem bản demo hoạt động tại đây: 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'));
  }
});

5

Tôi biết đây là một chủ đề cũ nhưng điều này có thể giúp đỡ người khác.

Tôi đã có thể làm cho cuộn cơ thể bằng cách cố định vị trí phần tử hộp thoại modal. Và vì tôi sẽ không bao giờ biết chính xác chiều cao của cửa sổ trình duyệt, tôi đã lấy thông tin mà tôi chắc chắn, chiều cao của tiêu đề và chân trang. Sau đó tôi đã có thể làm cho lề trên và dưới của phần tử mô đun khớp với các độ cao đó. Điều này sau đó tạo ra kết quả mà tôi đang tìm kiếm. Tôi đã cùng nhau ném một chiếc dĩa để thể hiện công việc của mình.

Ngoài ra, nếu bạn muốn một hộp thoại toàn màn hình, chỉ cần bỏ bình luận chiều rộng: auto; bên trong phần .modal-hộp.full-screen.

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

Và đây là css mà tôi đã sử dụng để sửa đổi hộp thoại bootstrap.

.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;
}

5

Hoặc đơn giản hơn, bạn có thể đặt giữa các thẻ của mình trước, sau đó đến lớp css.

<div style="height: 35px;overflow-y: auto;"> Some text o othre div scroll </div>

1
#scroll-wrap {
    max-height: 50vh;
    overflow-y: auto;
}

Sử dụng max-heightvới vhđơn vị trên modal-bodyhoặc một div trình bao bọc bên trong modal-body. Điều này sẽ tự động thay đổi kích thước chiều cao modal-bodyhoặc gói div (trong ví dụ này) khi người dùng thay đổi kích thước cửa sổ.

vh là đơn vị độ dài chiếm 1% kích thước khung nhìn cho chiều cao khung nhìn.

Biểu đồ tương thích trình duyệt cho vhđơn vị.

Ví dụ: https://jsfiddle.net/q3xwr53f/


1

Điều làm việc cho tôi là thiết lập chiều cao thành 100% khi có tràn tự động với hy vọng điều này sẽ giúp ích

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

0

Một giải pháp js đơn giản để đặt chiều cao phương thức tỷ lệ thuận với chiều cao của cơ thể:

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

chiều cao cơ thể phải là 100%:

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

Tôi đặt chiều cao cơ thể modal là 80% cơ thể, điều này tất nhiên có thể được tùy chỉnh.

Hy vọng nó giúp.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.