Как я могу изменить ширину по умолчанию модального окна Twitter Bootstrap?

375

Я попробовал следующее:

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

И этот Javascript:

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

Результат не тот, который я ожидал. Модальный верхний левый расположен в центре экрана.

Может кто-нибудь мне помочь. Кто-нибудь еще это пробовал. Я предполагаю, что это не необычная вещь, которую нужно делать.

  • 0
    Плагин Bootstrap не видит столько вариантов. попробуйте найти класс в файле начальной загрузки CSS и посмотреть, установлен ли он с помощью CSS, тогда вы сможете перезаписать или, по крайней мере, будете лучше понимать, какой это элемент.
  • 3
    Посмотрите на ответ Ника N для очень хорошего адаптивного ответа! stackoverflow.com/a/16090509/539484
Теги:
twitter-bootstrap-2

30 ответов

380
Лучший ответ

UPDATE:

В bootstrap 3 вам необходимо изменить модальный диалог. Поэтому в этом случае вы можете добавить класс modal-admin в место, где стоит modal-dialog.

Оригинальный ответ (Bootstrap < 3)

Есть ли определенная причина, по которой вы пытаетесь изменить ее с помощью JS/jQuery?

Вы можете легко сделать это только с помощью CSS, а это значит, что вам не нужно делать свой стиль в документе. В своем собственном CSS файле вы добавляете:

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

В вашем случае:

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

Я поместил тело перед селектором так, чтобы он занимал более высокий приоритет, чем значение по умолчанию. Таким образом вы можете добавить его в собственный CSS файл и не беспокоиться об обновлении Bootstrap.

  • 0
    Когда я увеличил ширину до 1000 пикселей, я обнаружил, что мне нужно установить атрибут стиля модала «left» на 33%.
  • 0
    Вы уверены, что исправили маржу? Это должно пойти на 50%, а затем минус исправленная маржа ;-)
Показать ещё 13 комментариев
247

Если вы хотите сделать его отзывчивым только с помощью CSS, используйте это:

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

Примечание 1: Я использовал класс .large, вы также можете сделать это в обычном .modal

Примечание 2: В Bootstrap 3 отрицательный левый край может больше не понадобиться (не подтвержден лично)

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

Примечание 3: В Bootstrap 3 и 4 существует класс modal-lg. Так что этого может быть достаточно, но если вы хотите сделать его отзывчивым, вам все равно понадобится исправление, которое я предоставил для Bootstrap 3.

В некотором приложении используются модальные модальности fixed, в этом случае вы можете попробовать width:80%; left:10%; (формула: left = 100 - width/2)

  • 0
    Похоже, это приводит к тому, что на очень узких экранах модальное изображение оказывается наполовину за пределами экрана.
  • 5
    Cofiem, используйте медиа-запрос, чтобы исправить это
Показать ещё 7 комментариев
103

Если вы используете Bootstrap 3, вам нужно изменить модальный диалог div, а не модальный div, как показано в принятом ответе. Кроме того, чтобы сохранить отзывчивый характер Bootstrap 3, важно написать переопределяющий CSS с помощью медиа-запроса, чтобы модальная форма была полной шириной на более мелких устройствах.

Смотрите этот JSFiddle, чтобы экспериментировать с разной шириной.

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
    правильный вариант для bootstrap3. работает без учета маржи! Спасибо
  • 0
    id = "modal-wide" меня немного смутило, но работает
Показать ещё 3 комментария
79

Если вы хотите что-то, что не нарушает относительный дизайн, попробуйте следующее:

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

Как говорит @Marco Johannesen, "тело" перед селектором так, что оно принимает более высокий приоритет, чем значение по умолчанию.

  • 4
    я рекомендую просто использовать margin-left:auto; margin-right:auto; вместо auto все наоборот
  • 0
    в некоторых случаях может понадобиться top: 30% , процент зависит от содержимого внутри.
Показать ещё 4 комментария
39

В Bootstrap 3+ наиболее подходящим способом изменения размера модального диалога является использование свойства size. Ниже приведен пример, обратите внимание на modal-sm по классу modal-dialog, указав небольшой модальный. Он может содержать значения sm для малых, md для среды и lg для больших.

<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>
  • 4
    Или modal-lg для больших, см. Getbootstrap.com/javascript/#modals-sizes
  • 0
    Добавил его в мой ответ :)
Показать ещё 2 комментария
35

Для Bootstrap 3 здесь, как это сделать.

Добавьте стиль modal-wide к вашей разметке HTML (в соответствии с примером в документах 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 -->

и добавьте следующий CSS

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

Нет необходимости переопределять margin-left в Bootstrap 3, чтобы теперь это было центрировано.

  • 3
    Просто чтобы избежать путаницы, нет технической причины добавлять modal-wide класс, то есть это не «внутренний» класс Bootstrap. Вы можете просто сделать #myModal .modal-dialog { width: 80%; }
  • 1
    Ага. Но если делать это как стиль, это делает его более пригодным для повторного использования.
Показать ещё 1 комментарий
21

В Bootstrap 3 все, что вам нужно, это

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

Большинство вышеперечисленных ответов не сработало для меня!!!

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />

<style>
  #myModal1 .modal-dialog {
    width: 80%;
  }
  #myModal2 .modal-dialog {
    width: 50%;
  }
</style>

<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal1">
  80%
</button>

<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal2">
  50%
</button>
<center>
  <!-- Modal -->
  <div class="modal fade" id="myModal1" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
      <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">
          custom width : 80%
        </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>
    </div>
  </div>


  <!-- Modal -->
  <div class="modal fade" id="myModal2" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
      <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">
          custom width : 50%
        </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>
    </div>
  </div>

</center>
  • 0
    Вы знаете, как изменить модальную высоту? Спасибо за ваш ответ, это работает как шарм :)
17

Решение было взято из этой страницы

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

Bootstrap 3: чтобы поддерживать гибкие функции для небольших и дополнительных небольших устройств, я сделал следующее:

@media (min-width: 768px) {
.modal-dialog-wide
{ width: 750px;/* your width */ }
}
  • 0
    это верно. это работает для меня. не забудьте изменить свойство ширины на XX% для адаптивного макета. Кстати, версия в моем случае 3.0.3
12

В v3 из Bootstrap существует простой способ сделать модальный более крупным. Просто добавьте класс modal-lg рядом с модальным диалогом.

<!-- 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">
  • 0
    Почему голосование против? Это абсолютно и чисто, дало мне хорошее широкое диалоговое окно! И использует только "правильные" классы начальной загрузки!
  • 0
    Это не работает
Показать ещё 1 комментарий
7

Если Bootstrap > 3, просто добавьте стиль в ваш модальный.

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

Это то, что я сделал, в моем custom.css я добавил эти строки, и все.

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

Очевидно, вы можете изменить размер ширины.

6

Я нашел это решение, которое работает лучше для меня. Вы можете использовать это:

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

или это зависит от ваших требований:

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

Посмотрите сообщение, где я обнаружил, что: https://github.com/twitter/bootstrap/issues/675

5

FYI Bootstrap 3 автоматически обрабатывает свойство left. Поэтому просто добавление этого CSS изменит ширину и сохранит ее по центру:

.modal .modal-dialog { width: 800px; }
  • 0
    Работал на B3! Большое спасибо!
4

Изменив класс model-dialog, вы сможете достичь ожидаемого результата. Эти небольшие трюки работают для меня. Надеюсь, это поможет вам решить эту проблему.

.modal-dialog {
    width: 70%;
}
4

Сохраните отзывчивый дизайн, установите ширину в соответствии с тем, что вы хотите.

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

Держите его простым.

3

В Bootstrap 3 с помощью CSS вы можете просто использовать:

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

Это гарантирует, что вы не нарушаете дизайн страницы, потому что мы используем .modal-dialog вместо .modal, который будет применяться даже к затенению.

3

С Bootstrap 3 все, что требуется, - это процентное значение, данное модальному диалогу через CSS

CSS

#alertModal .modal-dialog{
     width: 20%;
}
  • 1
    да, бритва Оккама идет к этому. проверено на 3.0 отлично работает
3

Я использовал комбинацию CSS и jQuery вместе с подсказками на этой странице, чтобы создать ширину и высоту жидкости с помощью Bootstrap 3.

Во-первых, некоторые CSS для обработки ширины и дополнительной полосы прокрутки для области содержимого

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

И затем некоторый jQuery, чтобы при необходимости настроить высоту области содержимого

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

Полная запись и код на http://scottpdawson.com/development/creating-a-variable-width-modal-dialog-using-bootstrap-3/

3

Попробуйте что-то вроде следующего (см. пример live jsfiddle здесь: 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

Добавьте в свой файл css следующее:

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

Вместо того, чтобы использовать проценты, чтобы сделать модальный отзывчивый, я нахожу, что может быть больше контроля за использованием столбцов и других чувствительных элементов, уже встроенных в бутстрап.


Чтобы сделать модальный отзывчивый/размер любого количества столбцов:

1) Добавьте дополнительный div вокруг модального диалога div с классом .container -

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


2) Добавьте немного CSS, чтобы сделать модальную полную ширину -

.modal-dialog {
    width: 100% }


3) Альтернативно добавьте дополнительный класс, если у вас есть другие модальности -

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

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


4) Добавьте строку/столбцы, если вы хотите, чтобы различные модальные модели -

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

Достигнутый ожидаемый результат с использованием

.modal-dialog {
    width: 41% !important;
}
0
.Size(ModalSize.Large)

sample:
 using (var modal = Html.Bootstrap().Begin(new Modal().Id("modalProject_" + modelItem.id).Closeable().Size(ModalSize.Large)))
                {
}
  • 1
    Можете ли вы отредактировать объяснение этого кода в вопросе?
0

Bootstrap 3.x.x

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

Заметьте, что добавлен класс .employeeModal во втором div. Затем создайте этот класс.

.employeeModal{
        width: 700px;
    }

Изображение 2262

0

Ниже приведен код для установки модальной ширины всплывающего окна и левой позиции на экране с помощью javascript.

$('# openModalPopupId'). css ({ "width": "80%", "left": "30%" });

0
you can use any prefix or postfix name for modal. but you need to make sure that 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;
    }

или

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

Я использовал SCSS и полностью отзывчивый модальный:

.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

Меньшее решение (без js) для 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; }
    }
}

Затем везде, где вы хотите указать модальную ширину:

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

Я использовал этот способ, и он отлично работает для меня

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню