Làm cách nào để thay đổi độ rộng mặc định của hộp phương thức Twitter Bootstrap?


373

Tôi đã thử như sau:

   <div class="modal hide fade modal-admin" id="testModal" style="display: none;">
        <div class="modal-header">
          <a data-dismiss="modal" class="close">×</a>
          <h3 id='dialog-heading'></h3>
        </div>
        <div class="modal-body">
            <div id="dialog-data"></div>
        </div>
        <div class="modal-footer">
          <a data-dismiss="modal" class="btn" >Close</a>
          <a class="btn btn-primary" id="btnSaveChanges">Save changes</a>
        </div>
    </div>

Và Javascript này:

    $('.modal-admin').css('width', '750px');
    $('.modal-admin').css('margin', '100px auto 100px auto');
    $('.modal-admin').modal('show')

Kết quả không như tôi mong đợi. Phía trên cùng bên trái được đặt ở giữa màn hình.

Ai giúp tôi với. Đã có ai thử chưa. Tôi cho rằng đó không phải là một điều bất thường muốn làm.


Bootstrap plugin không thấy có nhiều tùy chọn. hãy thử định vị lớp trong tệp CSS bootstrap và xem nếu nó được đặt qua CSS, thì bạn sẽ có thể ghi đè lên hoặc ít nhất sẽ có manh mối tốt hơn về yếu tố nào.
GillesC

3
Nhìn vào câu trả lời từ Nick N để có câu trả lời phản hồi rất hay! stackoverflow.com/a/16090509/539484
OnTheFly

Câu trả lời:


373

CẬP NHẬT:

Trong bootstrap 3bạn cần thay đổi hộp thoại phương thức. Vì vậy, trong trường hợp này, bạn có thể thêm lớp modal-adminở vị trí modal-dialogđứng.

Câu trả lời gốc (Bootstrap <3)

Có một lý do nhất định nào đó mà bạn đang cố gắng thay đổi nó với JS / jQuery không?

Bạn có thể dễ dàng làm điều đó chỉ với CSS, điều đó có nghĩa là bạn không cần phải tạo kiểu trong tài liệu. Trong tệp CSS tùy chỉnh của riêng bạn, bạn thêm:

body .modal {
    /* new custom width */
    width: 560px;
    /* must be half of the width, minus scrollbar on the left (30px) */
    margin-left: -280px;
}

Trong trường hợp của bạn:

body .modal-admin {
    /* new custom width */
    width: 750px;
    /* must be half of the width, minus scrollbar on the left (30px) */
    margin-left: -375px;
}

Lý do tôi đặt cơ thể trước bộ chọn là để nó có mức độ ưu tiên cao hơn mặc định. Bằng cách này, bạn có thể thêm nó vào tệp CSS tùy chỉnh và không phải lo lắng cập nhật Bootstrap.


2
Cuộn bên dưới để có câu trả lời (phản hồi) tốt hơn nhờ @NickN!
OnTheFly

1
@FloatingRock bạn có thể làm cho nó phản hồi, hãy xem câu trả lời của tôi
Nick N.

1
@NickN. Sát thủ! Cảm ơn Nick
FloatingRock

47
Bootstrap 3 làm cho điều này dễ dàng hơn. .modal .modal-dialog { width: 800px; }Vị trí bên trái được tự động tính toán.
Gavin

1
Trên thực tế, điều này không làm việc cho tôi. Giải pháp được đưa ra trong nhận xét của @ZimSystem đã thực hiện thủ thuật này.
tonjo

270

Nếu bạn muốn làm cho nó phản hồi chỉ bằng CSS, hãy sử dụng:

.modal.large {
    width: 80%; /* respsonsive width */
    margin-left:-40%; /* width/2) */ 
}

Lưu ý 1: Tôi đã sử dụng một .largelớp, bạn cũng có thể làm điều này trên bình thường.modal

Lưu ý 2: Trong Bootstrap 3, phần lề trái có thể không còn cần thiết nữa (không được xác nhận cá nhân)

/*Bootstrap 3*/
.modal.large {
     width: 80%;
}

Lưu ý 3: Trong Bootstrap 3 và 4, có một modal-lglớp. Vì vậy, điều này có thể là đủ, nhưng nếu bạn muốn làm cho nó phản hồi, bạn vẫn cần bản sửa lỗi tôi đã cung cấp cho Bootstrap 3.

Trong một số phương thức ứng dụng fixedđược sử dụng, trong trường hợp đó bạn có thể thử width:80%; left:10%;(công thức: left = 100 - width / 2)


Điều này dường như làm cho phương thức tắt một nửa màn hình trên màn hình rất hẹp.
cofiem

5
Cofiem, sử dụng truy vấn phương tiện để khắc phục điều này
Nick N.

1
@NickN. truy vấn phương tiện truyền thông của tôi đã không sửa nó. Bạn có thể thêm một ví dụ? Bỏ qua, tôi đã nhận nó. Tôi đã có chiều rộng tối đa thay vì chiều rộng tối thiểu. @media (min-width: 400px) { body .modal-lrg{ width: 80%; /* respsonsive width */ margin-left:-40%; /* width/2) */ } }
HPWD

Tôi thấy chỉ cần sử dụng% không cung cấp đủ quyền kiểm soát như sử dụng các cột đã được tích hợp sẵn trong bootstrap.
Alex

@Alex Tôi nghĩ rằng nó mang lại cho bạn nhiều quyền kiểm soát hơn, bạn sẽ làm thế nào với các cột hiện có?
Nick N.

107

Nếu bạn đang sử dụng Bootstrap 3, bạn cần thay đổi div hộp thoại modal chứ không phải div modal như nó được hiển thị trong câu trả lời được chấp nhận. Ngoài ra, để giữ bản chất phản hồi của Bootstrap 3, điều quan trọng là phải viết CSS ghi đè bằng truy vấn phương tiện để phương thức sẽ có chiều rộng đầy đủ trên các thiết bị nhỏ hơn.

Xem JSFiddle này để thử nghiệm với các độ rộng khác nhau.

HTML

<div class="modal fade">
    <div class="modal-dialog custom-class">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h3 class="modal-header-text">Text</h3>
            </div>
            <div class="modal-body">
                This is some text.
            </div>
            <div class="modal-footer">
                This is some text.
            </div>
        </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

CSS

@media screen and (min-width: 768px) {
    .custom-class {
        width: 70%; /* either % (e.g. 60%) or px (400px) */
    }
}

3
đúng một cho bootstrap3. hoạt động mà không thích ứng lề! thx
SQueek

1
Tôi đã xóa thuộc tính id trong câu trả lời vì nó không cần thiết.
arcdegree

nó hoạt động, nhưng nó không đáp ứng như câu trả lời mlunoe hoặc Dave.
ksiomelo

80

Nếu bạn muốn một cái gì đó không phá vỡ thiết kế tương đối, hãy thử điều này:

body .modal {
  width: 90%; /* desired relative width */
  left: 5%; /* (100%-width)/2 */
  /* place center */
  margin-left:auto;
  margin-right:auto; 
}

Như, @Marco Johannesen nói, "cơ thể" trước bộ chọn là để nó có mức độ ưu tiên cao hơn mặc định.


4
tôi khuyên bạn chỉ nên sử dụng margin-left:auto; margin-right:auto;thay vì autotất cả các cách xung quanh
cwd

trong một số trường hợp người ta có thể cần top: 30%, tỷ lệ phần trăm tùy thuộc vào nội dung bên trong.
bool.dev

6
Điều này hoạt động tốt với tôi khi tôi bỏ qua quy tắc .modal.fade.in, công cụ này sẽ di chuyển phương thức xuống tận cùng trong Bootstrap V2.2.2.
ramiro

1
Điều này hoạt động với ví dụ phương thức ANGULAR-UI ... Chỉ cần thả mã vào tệp css và tải vào trang ... angular-ui.github.io/bootstrap/#/modal ... Chạy ví dụ tại plnkr.co / chỉnh sửa / GYmc9s? p = xem trước
Marcello de Sales

1
tuyệt vời giải pháp này hoạt động tốt trên 2.3.2 bootstrap và MAIN trong trình duyệt internet 8,9,10 !!!! giải pháp với lề trái: -40% là không chính xác trong trình duyệt internet !!!
Cioxideru

41

Trong Bootstrap 3+, cách thích hợp nhất để thay đổi kích thước của hộp thoại phương thức là sử dụng thuộc tính kích thước. Dưới đây là một ví dụ, chú ý modal-smdọc theo modal-dialoglớp, chỉ ra một phương thức nhỏ. Nó có thể chứa các giá trị smcho nhỏ, mdtrung bình và lglớn.

<div class="modal fade" id="ww_vergeten" tabindex="-1" role="dialog" aria-labelledby="modal_title" aria-hidden="true">
  <div class="modal-dialog modal-sm"> <!-- property to determine size -->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h4 class="modal-title" id="modal_title">Some modal</h4>
      </div>
      <div class="modal-body">

        <!-- modal content -->

      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary" id="some_button" data-loading-text="Loading...">Send</button>
      </div>
    </div>
  </div>
</div>

Đã thêm nó vào câu trả lời của tôi :)
Tum

3
Đây không phải là câu trả lời hàng đầu? Tôi cho rằng câu trả lời hàng đầu có thể giúp bạn tùy chỉnh nó, nhưng hầu hết các trường hợp sử dụng nên được thỏa mãn bởi các lớp sẵn có của Bootstrap.
WebSpanner

Tôi đang sử dụng Bootstrap 3.x và dường như tôi không có modal-mdlớp.
James Poulose

34

Đối với Bootstrap 3đây là làm thế nào để làm điều đó.

Thêm một modal-widekiểu vào đánh dấu HTML của bạn (như được điều chỉnh từ ví dụ trong tài liệu Bootstrap 3 )

<div class="modal fade modal-wide" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h4 id="myModalLabel" class="modal-title">Modal title</h4>
      </div>
      <div class="modal-body">
        <p>One fine body&hellip;</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div><!-- /.modal-content -->
  </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

và thêm CSS sau

.modal-wide .modal-dialog {
  width: 80%; /* or whatever you wish */
}

Không cần phải ghi đè lên margin-lefttrong Bootstrap 3để có được này để được làm trung tâm bây giờ.


3
Chỉ để tránh bất kỳ sự nhầm lẫn nào, không có lý do kỹ thuật để thêm modal-widelớp, có nghĩa đó không phải là lớp "nội bộ" của Bootstrap. Bạn có thể làm một cách đơn giản#myModal .modal-dialog { width: 80%; }
Gavin

1
Vâng. Nhưng làm nó như một phong cách làm cho nó có thể sử dụng lại nhiều hơn.
Dave Sag

2
Yep tôi hiểu. Thật khó để phân biệt giữa lớp bootstrap và lớp tùy chỉnh, vì vậy tôi muốn ghi chú về nó.
Gavin

20

Trong Bootstrap 3, tất cả những gì bạn cần là

<style>
    .modal .modal-dialog { width: 80%; }
</style>

Hầu hết các câu trả lời trên không có tác dụng với tôi !!!


Bạn có biết làm thế nào để thay đổi chiều cao phương thức? Cảm ơn câu trả lời của bạn, nó hoạt động như một bùa mê :)
FrenkyB

17

Giải pháp được đưa từ này trang

$('#feedback-modal').modal({
    backdrop: true,
    keyboard: true
}).css({
    width: 'auto',
    'margin-left': function () {
        return -($(this).width() / 2);
    }
});

15

Trong v3 của Bootstrap có một phương pháp đơn giản để làm cho một phương thức lớn hơn. Chỉ cần thêm lớp modal-lg bên cạnh hộp thoại modal.

<!-- My Modal Popup -->
<div id="MyWidePopup" class="modal fade" role="dialog">
    <div class="modal-dialog modal-lg"> <---------------------RIGHT HERE!!
        <!-- Modal content-->
        <div class="modal-content">

Tại sao bỏ phiếu?! Nó hoàn toàn, và sạch sẽ, đã cho tôi một hộp thoại rộng đẹp! Và chỉ sử dụng các lớp bootstrap "thích hợp"!
Dave

Hãy thử quay lại một số yếu tố HTML của bạn - sử dụng cấu trúc đơn giản nhất bạn có thể để kiểm tra nó.
Dave

13

Bootstrap 3: Để duy trì các tính năng đáp ứng cho các thiết bị nhỏ và cực nhỏ, tôi đã làm như sau:

@media (min-width: 768px) {
.modal-dialog-wide
{ width: 750px;/* your width */ }
}

Đúng rồi. cái này hiệu quả với tôi đừng quên thay đổi thuộc tính chiều rộng thành XX% để bố trí đáp ứng. Btw, phiên bản trong trường hợp của tôi là 3.0.3
Jerry Chen

7

Đây là những gì tôi đã làm, trong custom.css của tôi, tôi đã thêm những dòng này và đó là tất cả.

.modal-lg {
    width: 600px!important;
    margin: 0 auto;
}

Rõ ràng, bạn có thể thay đổi kích thước của chiều rộng.


7

Nếu Bootstrap> 3, chỉ cần thêm kiểu vào phương thức của bạn.

<div class="modal-dialog" style="width:80%;">
  <div class="modal-content">
  </div>
</div>

6

Tôi đã tìm thấy giải pháp này phù hợp hơn với tôi. Bạn có thể sử dụng điều này:

$('.modal').css({
  'width': function () { 
    return ($(document).width() * .9) + 'px';  
  },
  'margin-left': function () { 
    return -($(this).width() / 2); 
  }
});

hoặc điều này tùy thuộc vào yêu cầu của bạn:

$('.modal').css({
  width: 'auto',
  'margin-left': function () {
     return -($(this).width() / 2);
  }
});

Xem bài đăng mà tôi tìm thấy: https://github.com/twitter/bootstrap/issues/675


5

FYI Bootstrap 3 tự động xử lý tài sản bên trái. Vì vậy, chỉ cần thêm CSS này sẽ thay đổi độ rộng và giữ nó ở giữa:

.modal .modal-dialog { width: 800px; }

Đã làm việc cho B3! Cảm ơn rất nhiều!
Bagata

4

Bảo toàn thiết kế đáp ứng, đặt chiều rộng cho những gì bạn mong muốn.

.modal-content {
  margin-left: auto;
  margin-right: auto;
  max-width: 360px;
}

Giữ cho nó đơn giản.


4

Thay đổi lớp model-dialogbạn có thể đạt được kết quả mong đợi. Những thủ thuật nhỏ này làm việc cho tôi. Hy vọng nó sẽ giúp bạn giải quyết vấn đề này.

.modal-dialog {
    width: 70%;
}

3

Với Bootstrap 3, tất cả những gì được yêu cầu là giá trị phần trăm được cung cấp cho hộp thoại phương thức thông qua CSS

CSS

#alertModal .modal-dialog{
     width: 20%;
}

1
yeap, dao cạo của đôi khi đi đến cái này. thử nghiệm trên 3.0 hoạt động tuyệt vời
Gui de Guinetik

3

Tôi đã sử dụng kết hợp CSS và jQuery, cùng với các gợi ý trên trang này, để tạo chiều rộng và chiều cao chất lỏng bằng Bootstrap 3.

Đầu tiên, một số CSS để xử lý chiều rộng và thanh cuộn tùy chọn cho khu vực nội dung

.modal.modal-wide .modal-dialog {
  width: 90%;
}
.modal-wide .modal-body {
  overflow-y: auto;
}

Và sau đó một số jQuery để điều chỉnh chiều cao của khu vực nội dung nếu cần

$(".modal-wide").on("show.bs.modal", function() {
  var height = $(window).height() - 200;
  $(this).find(".modal-body").css("max-height", height);
});

Viết và mã đầy đủ tại http://scottpdawson.com/development/creating-a-variable- thong-modal-dialog-USE-ototstrap-3 /


3

Trong Bootstrap 3 với CSS, bạn chỉ cần sử dụng:

body .modal-dialog {
    /* percentage of page width */
    width: 40%;
}

Điều này đảm bảo bạn không phá vỡ thiết kế của trang, bởi vì chúng tôi đang sử dụng .modal-dialogthay vì .modalsẽ được áp dụng ngay cả cho bóng.


2

Hãy thử một cái gì đó như sau (xem ví dụ jsfiddle trực tiếp tại đây: http://jsfiddle.net/periklis/hEThw/1/ )

<a class="btn" onclick = "$('#myModal').modal('show');$('#myModal').css('width', '100px').css('margin-left','auto').css('margin-right','auto');" ref="#myModal" >Launch Modal</a>
<div class="modal" id="myModal" style = "display:none">
  <div class="modal-header">
    <a class="close" data-dismiss="modal">×</a>
    <h3>Modal header</h3>
  </div>
  <div class="modal-body">
    <p>One fine body…</p>
  </div>
  <div class="modal-footer">
    <a href="#" class="btn">Close</a>
    <a href="#" class="btn btn-primary">Save changes</a>
  </div>
</div>​

2

Thay vì sử dụng tỷ lệ phần trăm để làm cho phương thức phản hồi, tôi thấy có thể có nhiều kiểm soát hơn từ việc sử dụng các cột và các yếu tố đáp ứng khác đã được tích hợp vào bootstrap.


Để làm cho phương thức phản hồi / kích thước của bất kỳ số lượng cột nào:

1) Thêm một div phụ xung quanh div hộp thoại phương thức với một lớp .container -

<div class="container">
    <div class="modal-dialog">
    </div>
</div>


2) Thêm một chút CSS để tạo độ rộng đầy đủ cho phương thức -

.modal-dialog {
    width: 100% }


3) Hoặc thêm vào một lớp học thêm nếu bạn có các phương thức khác -

<div class="container">
    <div class="modal-dialog modal-responsive">
    </div>
</div>

.modal-responsive.modal-dialog {
    width: 100% }


4) Thêm vào một hàng / cột nếu bạn muốn các chế độ có kích thước khác nhau -

<div class="container">
  <div class="row">
    <div class="col-md-4">
      <div class="modal-dialog modal-responsive">
       ...
      </div>
    </div>
  </div>
</div>

2

Thêm vào sau vào tập tin css của bạn

.popover{
         width:auto !important; 
         max-width:445px !important; 
         min-width:200px !important;
       }

2

Sử dụng tập lệnh bên dưới:

.modal {
  --widthOfModal: 98%;
  width: var(--widthOfModal) !important;
  margin-left: calc(calc(var(--widthOfModal) / 2) * (-1)) !important;
  height: 92%;

  overflow-y: scroll;
}

Bản trình diễn :

Demo trên gif


2

Tôi đã giải quyết nó cho Bootstrap 4.1

Kết hợp các giải pháp được đăng trước đó

.modal-lg {
  max-width: 90% !important; /* desired relative width */
  margin-left:auto !important;
  margin-right:auto !important;
}


1

Đạt được kết quả mong đợi bằng cách sử dụng,

.modal-dialog {
    width: 41% !important;
}

1

Bootstrap 3.xx

   <!-- Modal -->
<div class="modal fade" id="employeeBasicDetails" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog modal-sm employeeModal" role="document">

        <form>

        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="myModalLabel">Modal Title</h4>
            </div>

            <div class="modal-body row">
                Modal Body...
            </div>

            <div class="modal-footer"> 
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>

        </form>

    </div>
</div>

Lưu ý rằng tôi đã thêm lớp .employeeModal trong div thứ hai. Rồi phong cách mà đẳng cấp.

.employeeModal{
        width: 700px;
    }

ảnh chụp màn hình của đoạn mã


0

Tôi đã sử dụng theo cách này và nó hoạt động hoàn hảo đối với tôi

$("#my-modal")
.modal("toggle")
.css({'width': '80%', 'margin-left':'auto', 'margin-right':'auto', 'left':'10%'});

0

Giải pháp ít dựa trên (không có js) cho Bootstrap 2:

.modal-width(@modalWidth) {
    width: @modalWidth;
    margin-left: -@modalWidth/2;

    @media (max-width: @modalWidth) {
        position: fixed;
        top:   20px;
        left:  20px;
        right: 20px;
        width: auto;
        margin: 0;
        &.fade  { top: -100px; }
        &.fade.in { top: 20px; }
    }
}

Sau đó, bất cứ nơi nào bạn muốn chỉ định một chiều rộng phương thức:

#myModal {
    .modal-width(700px);
}

0

Tôi đã sử dụng SCSS và phương thức đáp ứng đầy đủ:

.modal-dialog.large {
    @media (min-width: $screen-sm-min) { width:500px; }
    @media (min-width: $screen-md-min) { width:700px; }
    @media (min-width: $screen-lg-min) { width:850px; }
} 

0
you can use any prefix or postfix name for modal. but you need to make sure that's should use everywhere with same prefix/postfix name.    

body .modal-nk {
        /* new custom width */
        width: 560px;
        /* must be half of the width, minus scrollbar on the left (30px) */
        margin-left: -280px;
    }

hoặc là

body .nk-modal {
            /* new custom width */
            width: 560px;
            /* must be half of the width, minus scrollbar on the left (30px) */
            margin-left: -280px;
        }
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.