Jak mogę zmienić domyślną szerokość pola modalnego Twitter Bootstrap?

373

Próbowałem następujące:

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

I ten Javascript:

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

Wynik nie jest tym, czego się spodziewałem. Modalny górny lewy jest umieszczony na środku ekranu.

Czy ktoś może mi pomóc. Czy ktoś jeszcze tego próbował? Zakładam, że nie jest niczym niezwykłym chcieć.

Nullpo
źródło
Wtyczka bootstrap nie widzi tak wielu opcji. spróbuj zlokalizować klasę w pliku CSS bootstrap i sprawdź, czy jest ustawiona za pomocą CSS, powinieneś być w stanie nadpisać lub przynajmniej mieć lepszą wskazówkę, który to element.
GillesC
3
Spójrz na odpowiedź Nicka N, aby uzyskać bardzo miłą odpowiedź! stackoverflow.com/a/16090509/539484
OnTheFly,

Odpowiedzi:

373

AKTUALIZACJA:

W bootstrap 3musisz zmienić modalne okno dialogowe. W takim przypadku możesz dodać klasę modal-adminw miejscu, w którym modal-dialogstoi.

Oryginalna odpowiedź (Bootstrap <3)

Czy istnieje jakiś powód, dla którego próbujesz to zmienić za pomocą JS / jQuery?

Możesz to łatwo zrobić za pomocą CSS, co oznacza, że ​​nie musisz stylizować dokumentu. We własnym niestandardowym pliku CSS dodajesz:

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

W Twoim przypadku:

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

Powodem, dla którego umieściłem body przed selektorem jest to, że ma on wyższy priorytet niż domyślny. W ten sposób możesz dodać go do niestandardowego pliku CSS i bez obaw aktualizować Bootstrap.

Marco Johannesen
źródło
2
Przewiń poniżej, aby uzyskać lepszą (responsywną) odpowiedź dzięki @NickN!
OnTheFly,
1
@ FloatingRock możesz sprawić, że będzie responsywny, spójrz na moją odpowiedź
Nick N.
1
@NickN. Zabójca! Dzięki Nick
FloatingRock
47
Bootstrap 3 ułatwia to. .modal .modal-dialog { width: 800px; }Lewa pozycja jest obliczana automatycznie.
Gavin
1
W rzeczywistości to nie działa dla mnie. Rozwiązanie podane w komentarzu @ZimSystem załatwiło sprawę.
tonjo
270

Jeśli chcesz sprawić, by był responsywny za pomocą CSS, użyj tego:

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

Uwaga 1: Użyłem .largeklasy, możesz to zrobić normalnie.modal

Uwaga 2: W Bootstrap 3 ujemny lewy margines może nie być już potrzebny (niepotwierdzony osobiście)

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

Uwaga 3: W Bootstrap 3 i 4 istnieje modal-lgklasa. Może to być wystarczające, ale jeśli chcesz sprawić, by było responsywne, nadal potrzebujesz poprawki, którą dostarczyłem dla Bootstrap 3.

W niektórych zastosowanych fixedmodach aplikacji możesz spróbować width:80%; left:10%;(formuła: left = 100 - width / 2)

Nick N.
źródło
Wydaje się, że powoduje to, że modal znajduje się w połowie ekranu na bardzo wąskich ekranach.
cofiem
5
Cofiem, użyj zapytania medialnego, aby to naprawić
Nick N.
1
@NickN. moje zapytanie o media nie naprawiło tego. Czy możesz dodać przykład? Zignoruj, rozumiem. Miałem maksymalną szerokość zamiast minimalnej szerokości. @media (min-width: 400px) { body .modal-lrg{ width: 80%; /* respsonsive width */ margin-left:-40%; /* width/2) */ } }
HPWD
Uważam, że użycie% nie daje wystarczającej kontroli, tak jak użycie kolumn już wbudowanych w bootstrap.
Alex
@Alex Myślę, że daje ci to większą kontrolę, jak zrobiłbyś to z istniejącymi kolumnami?
Nick N.
107

Jeśli używasz Bootstrap 3, musisz zmienić div modal-dialog, a nie div modal, tak jak pokazano w zaakceptowanej odpowiedzi. Ponadto, aby zachować responsywną naturę Bootstrap 3, ważne jest, aby napisać zastąpienie CSS za pomocą zapytania o media, aby modal był pełnej szerokości na mniejszych urządzeniach.

Zobacz ten JSFiddle, aby eksperymentować z różnymi szerokościami.

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) */
    }
}
arcdegree
źródło
3
popraw jeden dla bootstrap3. działa bez dostosowywania marginesu! dzięki
SQueek,
1
W odpowiedzi usunąłem atrybut id, ponieważ nie jest to konieczne.
arcdegree
działa, ale nie reaguje tak, jak odpowiada mlunoe lub Dave.
ksiomelo
80

Jeśli chcesz czegoś, co nie psuje względnego projektu, spróbuj tego:

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

Jak mówi @Marco Johannesen, „ciało” przed selektorem ma wyższy priorytet niż domyślny.

mlunoe
źródło
4
Polecam po prostu używać margin-left:auto; margin-right:auto;zamiast autona odwrót
cwd
w niektórych przypadkach może być potrzebny top: 30%procent w zależności od zawartości w środku.
bool.dev,
6
Działa to dla mnie dobrze, gdy pomijam zasadę .modal.fade.in, która przenosi modal do samego końca w Bootstrap V2.2.2.
ramiro
1
Działa to z przykładem modalnym ANGULAR -UI ... Po prostu upuść kod w pliku css i załaduj na stronę ... angular-ui.github.io/bootstrap/#/modal ... Przykład uruchomienia
Marcello de Sales
1
świetnie, to rozwiązanie działa dobrze na 2.3.2 bootstrap i MAIN w Internet Explorerze 8,9,10 !!!! rozwiązanie z marginesem po lewej: -40% jest nieprawidłowe w przeglądarce internetowej !!!
Cioxideru
41

W Bootstrap 3+ najbardziej odpowiednim sposobem zmiany rozmiaru modalnego okna dialogowego jest użycie właściwości size. Poniżej znajduje się przykład, zwróć uwagę modal-smna modal-dialogklasę, wskazując na mały modal. Może zawierać wartości smdla małych, mdśrednich i lgdużych.

<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>
Tum
źródło
Dodałem go do mojej odpowiedzi :)
Tum
3
Czy nie powinna to być najlepsza odpowiedź? Przypuszczam, że najlepsza odpowiedź może pomóc ci ją dostosować, ale większość przypadków użycia powinna być zaspokojona przez wbudowane klasy Bootstrap.
WebSpanner
Korzystam z Bootstrap 3.x i wydaje mi się, że nie mam modal-mdklasy.
James Poulose
34

Dla Bootstrap 3oto jak to zrobić.

Dodaj modal-widestyl do znaczników HTML (dostosowany z przykładu w dokumentacji 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 -->

i dodaj następujący CSS

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

Nie ma potrzeby, aby zastąpić margin-leftw Bootstrap 3celu uzyskania tego, aby być teraz wyśrodkowany.

Dave Sag
źródło
3
Aby uniknąć nieporozumień, nie ma technicznego powodu, aby dodać modal-wideklasę, co oznacza, że ​​nie jest to klasa „wewnętrzna” Bootstrap. Możesz po prostu to zrobić#myModal .modal-dialog { width: 80%; }
Gavin
1
Tak. Ale robienie tego jako stylu czyni go bardziej użytecznym.
Dave Sag
2
Tak, rozumiem. Po prostu wiele razy trudno odróżnić klasę bootstrap od klasy niestandardowej, więc chciałem to zanotować.
Gavin
20

W Bootstrap 3 wszystko czego potrzebujesz to

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

Większość powyższych odpowiedzi nie zadziałała dla mnie !!!

Alupotha
źródło
Czy wiesz jak zmienić wysokość modalną? Dzięki za odpowiedź, działa jak urok :)
FrenkyB
17

Rozwiązanie zostało pobrane z tej strony

$('#feedback-modal').modal({
    backdrop: true,
    keyboard: true
}).css({
    width: 'auto',
    'margin-left': function () {
        return -($(this).width() / 2);
    }
});
rzymski
źródło
15

W v3 Bootstrap istnieje prosta metoda na powiększenie modalu. Po prostu dodaj klasę modal-lg obok modal-dialog.

<!-- 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">
Dave
źródło
Dlaczego głosowanie w dół ?! To absolutnie i czysto, dało mi ładne szerokie okno dialogowe! I używa tylko „odpowiednich” klas bootstrap!
Dave
Spróbuj cofnąć niektóre elementy HTML - użyj najprostszej struktury, aby przetestować.
Dave
13

Bootstrap 3: Aby zachować responsywne funkcje dla małych i bardzo małych urządzeń, wykonałem następujące czynności:

@media (min-width: 768px) {
.modal-dialog-wide
{ width: 750px;/* your width */ }
}
użytkownik 2823201
źródło
prawda. to działa dla mnie. nie zapomnij zmienić właściwości width na XX% dla responsywnego układu. Btw, wersja w moim przypadku to 3.0.3
Jerry Chen
7

Tak właśnie zrobiłem w moim custom.css dodałem te linie i to wszystko.

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

Oczywiście możesz zmienić rozmiar szerokości.

clarenswd
źródło
7

Jeśli Bootstrap> 3, po prostu dodaj styl do swojego modalu.

<div class="modal-dialog" style="width:80%;">
  <div class="modal-content">
  </div>
</div>
Sreekanth Karini
źródło
6

Znalazłem to rozwiązanie, które działa dla mnie lepiej. Możesz użyć tego:

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

lub to w zależności od twoich wymagań:

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

Zobacz post, w którym znalazłem: https://github.com/twitter/bootstrap/issues/675

PedroSaiz
źródło
5

FYI Bootstrap 3 automatycznie obsługuje lewą właściwość. Po prostu dodanie tego CSS zmieni szerokość i utrzyma ją w środku:

.modal .modal-dialog { width: 800px; }
Gavin
źródło
Pracował dla B3! Wielkie dzięki!
Bagata,
4

Zachowaj responsywny design, ustaw szerokość zgodnie z oczekiwaniami.

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

Nie komplikuj.

obfk
źródło
4

Zmieniając klasę model-dialog, możesz osiągnąć oczekiwany wynik. Te małe sztuczki działają dla mnie. Mam nadzieję, że pomoże ci rozwiązać ten problem.

.modal-dialog {
    width: 70%;
}
Faisal
źródło
3

W przypadku Bootstrap 3 wymagana jest jedynie wartość procentowa podawana do modalnego okna dialogowego za pomocą CSS

CSS

#alertModal .modal-dialog{
     width: 20%;
}
Nav
źródło
1
tak, brzytwa Occam trafia do tego. testowany na 3.0 działa świetnie
Gui de Guinetik
3

Użyłem kombinacji CSS i jQuery, wraz ze wskazówkami na tej stronie, aby stworzyć szerokość i wysokość płynu za pomocą Bootstrap 3.

Po pierwsze, niektóre CSS do obsługi szerokości i opcjonalny pasek przewijania dla obszaru zawartości

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

A potem trochę jQuery, aby w razie potrzeby dostosować wysokość obszaru zawartości

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

Pełny zapis i kod na stronie http://scottpdawson.com/development/creating-a-variable-width-modal-dialog-using-bootstrap-3/

Scott Dawson
źródło
3

W Bootstrap 3 z CSS możesz po prostu użyć:

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

Gwarantuje to, że nie zepsujesz projektu strony, ponieważ używamy .modal-dialogzamiast tego, .modalktóry zostanie zastosowany nawet do cieniowania.

saadel
źródło
2

Spróbuj czegoś takiego (patrz przykład jsfiddle na żywo tutaj: 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>​
periklis
źródło
2

Uważam, że zamiast wykorzystywać wartości procentowe do reagowania modalnego, można uzyskać większą kontrolę nad używaniem kolumn i innych responsywnych elementów już wbudowanych w bootstrap.


Aby modal reagował / wielkość dowolnej liczby kolumn:

1) Dodaj dodatkowy div wokół div modal-dialog z klasą .container -

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


2) Dodaj trochę CSS, aby modalna pełna szerokość -

.modal-dialog {
    width: 100% }


3) Ewentualnie dodaj dodatkową klasę, jeśli masz inne moduły -

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

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


4) Dodaj w rzędzie / kolumnach, jeśli chcesz mieć różne rozmiary modów -

<div class="container">
  <div class="row">
    <div class="col-md-4">
      <div class="modal-dialog modal-responsive">
       ...
      </div>
    </div>
  </div>
</div>
Alex
źródło
2

Dodaj następujące elementy do pliku css

.popover{
         width:auto !important; 
         max-width:445px !important; 
         min-width:200px !important;
       }
przeznaczenie
źródło
2

Użyj poniżej skryptu:

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

  overflow-y: scroll;
}

Demo :

Demo na gif

Janusz Ładecki
źródło
2

Rozwiązałem go dla Bootstrap 4.1

Mieszanka wcześniej opublikowanych rozwiązań

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

Patricio Moraga
źródło
1

Osiągnięto oczekiwany wynik za pomocą,

.modal-dialog {
    width: 41% !important;
}
Aamir
źródło
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>

Zauważ, że dodałem klasę .employeeModal w drugim dziale. Następnie styl tej klasy.

.employeeModal{
        width: 700px;
    }

zrzut ekranu fragmentu kodu

Neutralny
źródło
0

Użyłem tego sposobu i jest to dla mnie idealne rozwiązanie

$("#my-modal")
.modal("toggle")
.css({'width': '80%', 'margin-left':'auto', 'margin-right':'auto', 'left':'10%'});
Belal Mazlom
źródło
0

Mniej oparte rozwiązanie (bez js) dla 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; }
    }
}

Następnie, gdziekolwiek chcesz określić szerokość modalną:

#myModal {
    .modal-width(700px);
}
sinelaw
źródło
0

Użyłem SCSS i w pełni responsywnego modalu:

.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; }
} 
Rodolfo Jorge Nemer Nogueira
źródło
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;
    }

lub

body .nk-modal {
            /* new custom width */
            width: 560px;
            /* must be half of the width, minus scrollbar on the left (30px) */
            margin-left: -280px;
        }
NK Chaudhary
źródło