Cách thay đổi kích thước phương thức Twitter Bootstrap động dựa trên nội dung


101

Tôi có nội dung cơ sở dữ liệu có nhiều loại dữ liệu khác nhau, chẳng hạn như video Youtube, video Vimeo, văn bản, ảnh Imgur, v.v. Tất cả chúng đều có chiều cao và chiều rộng khác nhau. Tất cả những gì tôi tìm thấy trong khi tìm kiếm trên Internet là thay đổi kích thước thành chỉ một tham số. Nó phải giống với nội dung trong cửa sổ bật lên.

Đây là mã HTML của tôi. Tôi cũng sử dụng Ajax để gọi nội dung.

<div id="modal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="ModalLabel"></h3>
    </div>
    <div class="modal-body">

    </div>
</div> 

Câu trả lời:


112

Vì nội dung của bạn phải động nên bạn có thể đặt động các thuộc tính css của phương thức showkhi phương thức đó sẽ thay đổi kích thước của phương thức ghi đè thông số kỹ thuật mặc định của nó. Lý do là bootstrap áp dụng chiều cao tối đa cho nội dung phương thức với quy tắc css như sau:

.modal-body {
    position: relative;
    overflow-y: auto;
    max-height: 400px;
    padding: 15px;
}

Vì vậy, bạn có thể thêm các kiểu nội tuyến động bằng cách sử dụng jquery css phương thức :

Đối với các phiên bản mới hơn của việc sử dụng bootstrap show.bs.modal

$('#modal').on('show.bs.modal', function () {
       $(this).find('.modal-body').css({
              width:'auto', //probably not needed
              height:'auto', //probably not needed 
              'max-height':'100%'
       });
});

Đối với các phiên bản cũ hơn của việc sử dụng bootstrap show

$('#modal').on('show', function () {
       $(this).find('.modal-body').css({
              width:'auto', //probably not needed
              height:'auto', //probably not needed 
              'max-height':'100%'
       });
});

hoặc sử dụng quy tắc css để ghi đè:

.autoModal.modal .modal-body{
    max-height: 100%;
}

và thêm lớp này autoModal vào các phương thức mục tiêu của bạn.

Thay đổi nội dung động trong fiddle, bạn sẽ thấy phương thức được thay đổi kích thước cho phù hợp. Demo

Phiên bản bootstrap mới hơn xem có sẵn event names.

  • show.bs.modal Sự kiện này kích hoạt ngay lập tức khi phương thức thể hiện show được gọi. Nếu do một nhấp chuột gây ra, phần tử được nhấp sẽ có sẵn dưới dạng thuộc tính Mục tiêu liên quan của sự kiện.
  • show.bs.modal Sự kiện này được kích hoạt khi phương thức đã được hiển thị cho người dùng (sẽ đợi quá trình chuyển đổi CSS hoàn tất). Nếu do một nhấp chuột gây ra, phần tử được nhấp sẽ có sẵn dưới dạng thuộc tính Mục tiêu liên quan của sự kiện.
  • hide.bs.modal Sự kiện này được kích hoạt ngay lập tức khi phương thức ẩn thể hiện được gọi.
  • hidden.bs.modal Sự kiện này được kích hoạt khi phương thức hoàn tất bị ẩn khỏi người dùng (sẽ đợi quá trình chuyển đổi CSS hoàn tất).
  • load.bs.modal Sự kiện này được kích hoạt khi phương thức đã tải nội dung bằng tùy chọn từ xa.

Hỗ modal events trợ phiên bản bootstrap cũ hơn .

  • Show - Sự kiện này kích hoạt ngay lập tức khi phương thức show instance được gọi.
  • hiển thị - Sự kiện này được kích hoạt khi phương thức được hiển thị cho người dùng (sẽ đợi quá trình chuyển đổi css hoàn tất).
  • hide - Sự kiện này được kích hoạt ngay lập tức khi phương thức hide instance đã được gọi.
  • hidden - Sự kiện này được kích hoạt khi phương thức hoàn tất bị ẩn khỏi người dùng (sẽ đợi quá trình chuyển đổi css hoàn tất).

tôi đã phải thay đổi #modal thành .moda-body bây giờ nó hoạt động hoàn hảo. Cảm ơn rât nhiều!
Erdem Ece

8
@PSL, +1 cho câu trả lời và để giới thiệu tôi về kbd trong SO.
Rolando Isidoro

có vẻ như sự kiện chương trình không hoạt động. điều này đã hoạt động: $('#modal').on('show.bs.modal', function () { getbootstrap.com/javascript/#modals-events
joym8 Ngày

+1 để biết chi tiết và phù hợp với cái cũ và cái mới. Bây giờ giá như nó không chỉ lấp đầy toàn bộ chiều rộng của màn hình và thực sự có kích thước động.
Sáng

@PSL trong thời gian chạy làm cách nào có thể thao túng chiều rộng của phương thức? Ý tôi là làm cho nó nhỏ hơn hoặc lớn hơn bằng JavaScript?
Sredny M Casanova

119

Điều này làm việc cho tôi, không có điều nào ở trên hoạt động.

.modal-dialog{
    position: relative;
    display: table; /* This is important */ 
    overflow-y: auto;    
    overflow-x: auto;
    width: auto;
    min-width: 300px;   
}


1
@maheshreddy Chào mừng bạn, đừng quên bỏ phiếu +1 nếu nó hữu ích. để những người khác có thể tin tưởng hơn vào câu trả lời này và thử.
Amit Shah

Nó tự động đặt chiều cao, nhưng hộp thoại phương thức thời gian này được mở ở phía bên trái của màn hình. Làm thế nào để sửa chữa nó?
Jack

1
nhưng điều này không hoạt động ở chế độ xem di động, đáp ứng. Nó hoạt động khá tốt trên màn hình máy tính xách tay.
chetan

4
Điều này đã hiệu quả nhưng nó có tác động không mong muốn là phương thức không còn được căn giữa theo chiều dọc của trang. Không phải là vấn đề lớn nhưng tôi nghĩ tôi sẽ đề cập đến điều gì đó.
John Allard

22

Tôi không thể nhận được câu trả lời của PSL phù hợp với tôi vì vậy tôi thấy tất cả những gì tôi phải làm là đặt div giữ nội dung phương thức style="display: table;". Bản thân nội dung phương thức nói lên nó muốn lớn đến mức nào và phương thức có thể đáp ứng được nó.


5
Tôi cũng không thể nhận được câu trả lời của PSL hoạt động. (Có thể vì tôi đang sử dụng phiên bản Angular của bootstrap) Điều này đã làm việc cho tôi. Chỉ cần lưu ý rằng phong cách này được thêm vào .modal-thoại lớp 1
user227353

Tôi đã áp dụng giải pháp của bạn cho div có dưới dạng lớp "modal-content" ,, Đã làm việc cho tôi.
Mehdi

10

Có nhiều cách để làm điều này nếu bạn muốn viết css thì hãy thêm sau

.modal-dialog{
  display: table
}

Trong trường hợp nếu bạn muốn thêm nội tuyến

<div class="modal-dialog" style="display:table;">
//enter code here
</div>

Không thêm display:table;vào lớp nội dung phương thức. nó đã hoàn thành công việc của bạn nhưng bố trí phương thức của bạn cho kích thước lớn, hãy xem ảnh chụp màn hình sau. hình ảnh đầu tiên là nếu bạn thêm kiểu vào hộp thoại phương thức Trong trường hợp nếu bạn thêm kiểu vào hộp thoại phương thức nếu bạn thêm kiểu vào nội dung phương thức. nó trông có vẻ lệch lạc. nhập mô tả hình ảnh ở đây


7

cho bootstrap 3 sử dụng như

$('#myModal').on('hidden.bs.modal', function () {
// do something…
})

4
Chỉ cần thêm vào hidden.bs.modal này sẽ kích hoạt sau khi phương thức bị đóng. Sử dụng show.bs.modal để kích hoạt trên bootstrap 3 khi phương thức được kích hoạt.
d3c0y

Điều này sẽ thay đổi kích thước hộp thoại theo bất kỳ cách nào hoặc hình thức nào? Nó chỉ đơn giản là một hàm gọi lại được kích hoạt khi hộp thoại phương thức bị ẩn (hoặc hiển thị).
user1438038

4

Công việc Css đơn giản cho tôi

.modal-dialog { 
max-width : 100% ;
}



1

Bạn có thể làm điều đó nếu bạn sử dụng plugin hộp thoại jquery từ gijgo.com và đặt chiều rộng thành tự động.

$("#dialog").dialog({
  uiLibrary: 'bootstrap',
  width: 'auto'
});
<html>
<head>
  <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
  <link href="http://code.gijgo.com/1.0.0/css/gijgo.css" rel="stylesheet" type="text/css">
  <script src="http://code.gijgo.com/1.0.0/js/gijgo.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>
<body>
 <div id="dialog" title="Wikipedia">
   <img src="https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/1122px-Wikipedia-logo-v2.svg.png" width="320"/>
 </div>
</body>
</html>

Bạn cũng có thể cho phép người dùng kiểm soát kích thước nếu bạn đặt có thể thay đổi kích thước thành true. Bạn có thể xem bản demo về điều này tại http://gijgo.com/Dialog/Demos/bootstrap-modal-resizable


1

Một giải pháp CSS đơn giản sẽ căn giữa phương thức theo chiều dọc và chiều ngang:

.modal.show {
  display: flex !important;
  justify-content: center;
}

.modal-dialog {
  align-self: center;
}

0

Đối với Bootstrap 2 Tự động điều chỉnh chiều cao mô hình một cách tự động

  //Auto adjust modal height on open 
  $('#modal').on('shown',function(){
     var offset = 0;
     $(this).find('.modal-body').attr('style','max-height:'+($(window).height()-offset)+'px !important;');
  });

0

Tôi đã gặp vấn đề tương tự với bootstrap 3 và chiều cao của modal-body div không muốn lớn hơn 442px. Đây là tất cả css cần thiết để sửa chữa nó trong trường hợp của tôi:

.modal-body {
    overflow-y: auto;
}

0

Giải pháp của tôi chỉ là để thêm phong cách bên dưới. <div class="modal-body" style="clear: both;overflow: hidden;">


0

Kể từ Bootstrap 4 - nó có phong cách:

@media (min-width: 576px)
.modal-dialog {
    max-width: 500px;
}

vì vậy nếu bạn đang tìm cách thay đổi kích thước chiều rộng phương thức thành chiều rộng lớn hơn, tôi khuyên bạn nên sử dụng điều này trong css của bạn, ví dụ:

.modal-dialog { max-width: 87vw; }

Lưu ý rằng cài đặt width: 87vw;sẽ không ghi đè bootstrap max-width: 500px;.


0

Tìm kiếm của tôi đã dẫn tôi đến đây vì vậy cũng có thể thêm hai xu giá trị ý tưởng của tôi. Nếu bạn đang sử dụng phương thức Twitter Bootstrap thân thiện với khỉ thì bạn có thể làm như sau:

    var dialog = new BootstrapDialog({
        id: 'myDialog',
        title: 'Title',
        closable: false,
        // whatever you like configuration here...
    });

    dialog.realize();
    if (isContentAYoutubeVideo()) {
        dialog.getModalDialog().css('width', '80%'); // set the width to whatever you like
    }
    dialog.open();

Hi vọng điêu nay co ich.

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.