Treci la conținutul principal Treceți la navigarea documentelor

Utilizați pluginul modal JavaScript al Bootstrap pentru a adăuga casete de dialog pe site-ul dvs. pentru casete luminoase, notificări de utilizator sau conținut complet personalizat.

Cum functioneaza

Înainte de a începe cu componenta modală a Bootstrap, asigurați-vă că citiți următoarele, deoarece opțiunile noastre de meniu s-au schimbat recent.

  • Modalurile sunt construite cu HTML, CSS și JavaScript. Ele sunt poziționate peste orice altceva din document și elimină derularea din, <body>astfel încât conținutul modal să defileze în schimb.
  • Făcând clic pe „fondul” modal, se va închide automat modalul.
  • Bootstrap acceptă doar o fereastră modală la un moment dat. Modalurile imbricate nu sunt acceptate, deoarece considerăm că sunt experiențe slabe pentru utilizator.
  • Modalii folosesc position: fixed, care uneori poate fi puțin specific în ceea ce privește redarea sa. Ori de câte ori este posibil, plasați codul HTML modal într-o poziție de nivel superior pentru a evita potențiala interferență din partea altor elemente. Probabil că veți întâmpina probleme atunci când imbricați un .modalalt element fix.
  • Încă o dată, din cauza position: fixed, există câteva avertismente cu utilizarea modalelor pe dispozitivele mobile. Consultați documentele noastre de asistență pentru browser pentru detalii.
  • Datorită modului în care HTML5 își definește semantica, atributul autofocusHTML nu are niciun efect în modalele Bootstrap. Pentru a obține același efect, utilizați JavaScript personalizat:
var myModal = document.getElementById('myModal')
var myInput = document.getElementById('myInput')

myModal.addEventListener('shown.bs.modal', function () {
  myInput.focus()
})
Efectul de animație al acestei componente depinde de prefers-reduced-motioninterogarea media. Consultați secțiunea cu mișcare redusă a documentației noastre de accesibilitate .

Continuați să citiți pentru demonstrații și instrucțiuni de utilizare.

Exemple

Mai jos este un exemplu modal static (adică positionși displayau fost suprascrise). Sunt incluse antetul modal, corpul modal (necesar pentru padding) și subsolul modal (opțional). Vă rugăm să includeți antete modale cu acțiuni de respingere ori de câte ori este posibil sau să furnizați o altă acțiune explicită de respingere.

<div class="modal" tabindex="-1">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Modal title</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        <p>Modal body text goes here.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Demo live

Comutați o demonstrație modală funcțională făcând clic pe butonul de mai jos. Acesta va aluneca în jos și va dispărea din partea de sus a paginii.

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Fundal static

Când fundalul este setat la static, modalul nu se va închide când faceți clic în afara acestuia. Faceți clic pe butonul de mai jos pentru a-l încerca.

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
  Launch static backdrop modal
</button>

<!-- Modal -->
<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="staticBackdropLabel">Modal title</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Understood</button>
      </div>
    </div>
  </div>
</div>

Derularea conținutului lung

Când modalele devin prea lungi pentru vizualizarea sau dispozitivul utilizatorului, ele derulează independent de pagina în sine. Încercați demonstrația de mai jos pentru a vedea la ce ne referim.

De asemenea, puteți crea un modal derulabil care permite derularea corpului modal prin adăugarea .modal-dialog-scrollablela .modal-dialog.

<!-- Scrollable modal -->
<div class="modal-dialog modal-dialog-scrollable">
  ...
</div>

Centrat pe verticală

Adăugați .modal-dialog-centeredla .modal-dialogpentru a centra vertical modalul.

<!-- Vertically centered modal -->
<div class="modal-dialog modal-dialog-centered">
  ...
</div>

<!-- Vertically centered scrollable modal -->
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
  ...
</div>

Sfaturi de instrumente și popovers

Sfaturile cu instrumente și popover -urile pot fi plasate în modal după cum este necesar. Când modalele sunt închise, toate sfaturile instrumente și popover-urile din interior sunt, de asemenea, respinse automat.

<div class="modal-body">
  <h5>Popover in a modal</h5>
  <p>This <a href="#" role="button" class="btn btn-secondary popover-test" title="Popover title" data-bs-content="Popover body content is set in this attribute.">button</a> triggers a popover on click.</p>
  <hr>
  <h5>Tooltips in a modal</h5>
  <p><a href="#" class="tooltip-test" title="Tooltip">This link</a> and <a href="#" class="tooltip-test" title="Tooltip">that link</a> have tooltips on hover.</p>
</div>

Folosind grila

Utilizați sistemul de grilă Bootstrap într-un modal prin imbricarea .container-fluidîn .modal-body. Apoi, utilizați clasele normale ale sistemului de grilă așa cum ați face oriunde altundeva.

<div class="modal-body">
  <div class="container-fluid">
    <div class="row">
      <div class="col-md-4">.col-md-4</div>
      <div class="col-md-4 ms-auto">.col-md-4 .ms-auto</div>
    </div>
    <div class="row">
      <div class="col-md-3 ms-auto">.col-md-3 .ms-auto</div>
      <div class="col-md-2 ms-auto">.col-md-2 .ms-auto</div>
    </div>
    <div class="row">
      <div class="col-md-6 ms-auto">.col-md-6 .ms-auto</div>
    </div>
    <div class="row">
      <div class="col-sm-9">
        Level 1: .col-sm-9
        <div class="row">
          <div class="col-8 col-sm-6">
            Level 2: .col-8 .col-sm-6
          </div>
          <div class="col-4 col-sm-6">
            Level 2: .col-4 .col-sm-6
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

Conținut modal variat

Aveți o grămadă de butoane care declanșează același modal cu conținut ușor diferit? Utilizați event.relatedTargetși atributele HTMLdata-bs-* pentru a varia conținutul modalului în funcție de ce buton a fost făcut clic.

Mai jos este o demonstrație live urmată de exemplu HTML și JavaScript. Pentru mai multe informații, citiți documentele despre evenimente modale pentru detalii despre relatedTarget.

<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@mdo">Open modal for @mdo</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@fat">Open modal for @fat</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@getbootstrap">Open modal for @getbootstrap</button>

<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">New message</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        <form>
          <div class="mb-3">
            <label for="recipient-name" class="col-form-label">Recipient:</label>
            <input type="text" class="form-control" id="recipient-name">
          </div>
          <div class="mb-3">
            <label for="message-text" class="col-form-label">Message:</label>
            <textarea class="form-control" id="message-text"></textarea>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Send message</button>
      </div>
    </div>
  </div>
</div>
var exampleModal = document.getElementById('exampleModal')
exampleModal.addEventListener('show.bs.modal', function (event) {
  // Button that triggered the modal
  var button = event.relatedTarget
  // Extract info from data-bs-* attributes
  var recipient = button.getAttribute('data-bs-whatever')
  // If necessary, you could initiate an AJAX request here
  // and then do the updating in a callback.
  //
  // Update the modal's content.
  var modalTitle = exampleModal.querySelector('.modal-title')
  var modalBodyInput = exampleModal.querySelector('.modal-body input')

  modalTitle.textContent = 'New message to ' + recipient
  modalBodyInput.value = recipient
})

Comutați între modalități

Comutați între mai multe modale cu o plasare inteligentă a atributelor data-bs-targetși . data-bs-toggleDe exemplu, puteți comuta un mod de resetare a parolei dintr-un mod de conectare deja deschis. Vă rugăm să rețineți că mai multe modale nu pot fi deschise în același timp - această metodă pur și simplu comută între două modale separate.

Deschide primul mod
<div class="modal fade" id="exampleModalToggle" aria-hidden="true" aria-labelledby="exampleModalToggleLabel" tabindex="-1">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalToggleLabel">Modal 1</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        Show a second modal and hide this one with the button below.
      </div>
      <div class="modal-footer">
        <button class="btn btn-primary" data-bs-target="#exampleModalToggle2" data-bs-toggle="modal">Open second modal</button>
      </div>
    </div>
  </div>
</div>
<div class="modal fade" id="exampleModalToggle2" aria-hidden="true" aria-labelledby="exampleModalToggleLabel2" tabindex="-1">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalToggleLabel2">Modal 2</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        Hide this modal and show the first with the button below.
      </div>
      <div class="modal-footer">
        <button class="btn btn-primary" data-bs-target="#exampleModalToggle" data-bs-toggle="modal">Back to first</button>
      </div>
    </div>
  </div>
</div>
<a class="btn btn-primary" data-bs-toggle="modal" href="#exampleModalToggle" role="button">Open first modal</a>

Schimbați animația

Variabila $modal-fade-transformdetermină starea de transformare a .modal-dialogînainte de animația de fade-in modală, $modal-show-transformvariabila determină transformarea de .modal-dialogla sfârșitul animației de fade-in modal.

Dacă doriți, de exemplu, o animație de mărire, puteți seta $modal-fade-transform: scale(.8).

Eliminați animația

Pentru modalele care apar pur și simplu în loc să se estompeze pentru a le vizualiza, eliminați .fadeclasa din marcajul modal.

<div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
  ...
</div>

Înălțimi dinamice

Dacă înălțimea unui modal se modifică în timp ce este deschis, ar trebui să sunați myModal.handleUpdate()pentru a reajusta poziția modalului în cazul în care apare o bară de defilare.

Accesibilitate

Asigurați-vă că adăugați aria-labelledby="...", făcând referire la titlul modal, la .modal. În plus, puteți oferi o descriere a dialogului dvs. modal cu aria-describedbyon .modal. Rețineți că nu trebuie să adăugați role="dialog", deoarece îl adăugăm deja prin JavaScript.

Încorporarea videoclipurilor YouTube

Încorporarea videoclipurilor YouTube în modal necesită JavaScript suplimentar care nu este în Bootstrap pentru a opri automat redarea și multe altele. Consultați această postare utilă Stack Overflow pentru mai multe informații.

Dimensiuni optionale

Modalurile au trei dimensiuni opționale, disponibile prin clase de modificatori pentru a fi plasate pe un .modal-dialog. Aceste dimensiuni intervin la anumite puncte de întrerupere pentru a evita barele de defilare orizontale pe ferestrele de vizualizare mai înguste.

mărimea Clasă Lățimea maximă modală
Mic .modal-sm 300px
Mod implicit Nici unul 500px
Mare .modal-lg 800px
Foarte mare .modal-xl 1140px

Modal nostru implicit fără clasa modificatoare constituie modal de dimensiune „medie”.

<div class="modal-dialog modal-xl">...</div>
<div class="modal-dialog modal-lg">...</div>
<div class="modal-dialog modal-sm">...</div>

Modal ecran complet

O altă modificare este opțiunea de a afișa un modal care acoperă fereastra utilizatorului, disponibilă prin clasele modificatoare care sunt plasate pe un .modal-dialog.

Clasă Disponibilitate
.modal-fullscreen Mereu
.modal-fullscreen-sm-down De mai jos576px
.modal-fullscreen-md-down De mai jos768px
.modal-fullscreen-lg-down De mai jos992px
.modal-fullscreen-xl-down De mai jos1200px
.modal-fullscreen-xxl-down De mai jos1400px
<!-- Full screen modal -->
<div class="modal-dialog modal-fullscreen-sm-down">
  ...
</div>

Sass

Variabile

$modal-inner-padding:               $spacer;

$modal-footer-margin-between:       .5rem;

$modal-dialog-margin:               .5rem;
$modal-dialog-margin-y-sm-up:       1.75rem;

$modal-title-line-height:           $line-height-base;

$modal-content-color:               null;
$modal-content-bg:                  $white;
$modal-content-border-color:        rgba($black, .2);
$modal-content-border-width:        $border-width;
$modal-content-border-radius:       $border-radius-lg;
$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width);
$modal-content-box-shadow-xs:       $box-shadow-sm;
$modal-content-box-shadow-sm-up:    $box-shadow;

$modal-backdrop-bg:                 $black;
$modal-backdrop-opacity:            .5;
$modal-header-border-color:         $border-color;
$modal-footer-border-color:         $modal-header-border-color;
$modal-header-border-width:         $modal-content-border-width;
$modal-footer-border-width:         $modal-header-border-width;
$modal-header-padding-y:            $modal-inner-padding;
$modal-header-padding-x:            $modal-inner-padding;
$modal-header-padding:              $modal-header-padding-y $modal-header-padding-x; // Keep this for backwards compatibility

$modal-sm:                          300px;
$modal-md:                          500px;
$modal-lg:                          800px;
$modal-xl:                          1140px;

$modal-fade-transform:              translate(0, -50px);
$modal-show-transform:              none;
$modal-transition:                  transform .3s ease-out;
$modal-scale-transform:             scale(1.02);

Buclă

Modalurile responsive pe ecran complet sunt generate prin intermediul $breakpointshărții și printr-o buclă în scss/_modal.scss.

@each $breakpoint in map-keys($grid-breakpoints) {
  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
  $postfix: if($infix != "", $infix + "-down", "");

  @include media-breakpoint-down($breakpoint) {
    .modal-fullscreen#{$postfix} {
      width: 100vw;
      max-width: none;
      height: 100%;
      margin: 0;

      .modal-content {
        height: 100%;
        border: 0;
        @include border-radius(0);
      }

      .modal-header {
        @include border-radius(0);
      }

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

      .modal-footer {
        @include border-radius(0);
      }
    }
  }
}

Utilizare

Pluginul modal schimbă conținutul ascuns la cerere, prin atribute de date sau JavaScript. De asemenea, suprascrie comportamentul implicit de defilare și generează un .modal-backdroppentru a oferi o zonă de clic pentru închiderea modalelor afișate atunci când faceți clic în afara modalului.

Prin atribute de date

Comutare

Activați un mod fără a scrie JavaScript. Setați data-bs-toggle="modal"pe un element de controler, cum ar fi un buton, împreună cu data-bs-target="#foo"sau href="#foo"pentru a viza un anumit mod de comutare.

<button type="button" data-bs-toggle="modal" data-bs-target="#myModal">Launch modal</button>

Respingeți

Demiterea poate fi realizată cu dataatributul de pe un buton din modal , așa cum se arată mai jos:

<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>

sau pe un buton din afara modului, folosind data-bs-targetașa cum se arată mai jos:

<button type="button" class="btn-close" data-bs-dismiss="modal" data-bs-target="#my-modal" aria-label="Close"></button>
Deși sunt acceptate ambele moduri de a respinge un mod, rețineți că închiderea din afara unui mod nu se potrivește cu modelul de proiectare a dialogului modal WAI-ARIA . Fă asta pe propriul tău risc.

Prin JavaScript

Creați un modal cu o singură linie de JavaScript:

var myModal = new bootstrap.Modal(document.getElementById('myModal'), options)

Opțiuni

Opțiunile pot fi transmise prin atribute de date sau JavaScript. Pentru atributele datelor, adăugați numele opțiunii la data-bs-, ca în data-bs-backdrop="".

Nume Tip Mod implicit Descriere
backdrop boolean sau șirul'static' true Include un element modal de fundal. Alternativ, specificați staticpentru un fundal care nu închide modal la clic.
keyboard boolean true Închide modulul când este apăsată tasta Escape
focus boolean true Pune accentul pe modal atunci când este inițializat.

Metode

Metode și tranziții asincrone

Toate metodele API sunt asincrone și încep o tranziție . Ei revin la apelant imediat ce tranziția este începută, dar înainte ca aceasta să se încheie . În plus, un apel de metodă pentru o componentă de tranziție va fi ignorat .

Consultați documentația noastră JavaScript pentru mai multe informații .

Opțiuni de trecere

Activează conținutul dvs. ca modal. Acceptă opțiuni opționale object.

var myModal = new bootstrap.Modal(document.getElementById('myModal'), {
  keyboard: false
})

comutare

Comută manual un modal. Se întoarce la apelant înainte ca modalul să fie afișat sau ascuns (adică înainte ca evenimentul shown.bs.modalsau să hidden.bs.modalapară).

myModal.toggle()

spectacol

Deschide manual un modal. Se întoarce la apelant înainte ca modalul să fie afișat efectiv (adică înainte de apariția shown.bs.modalevenimentului).

myModal.show()

De asemenea, puteți trece un element DOM ca argument care poate fi primit în evenimentele modale (ca relatedTargetproprietate).

var modalToggle = document.getElementById('toggleMyModal') // relatedTarget
myModal.show(modalToggle)

ascunde

Ascunde manual un modal. Se întoarce la apelant înainte ca modalul să fi fost efectiv ascuns (adică înainte de apariția hidden.bs.modalevenimentului).

myModal.hide()

handleUpdate

Reajustați manual poziția modalului dacă înălțimea unui modal se modifică în timp ce acesta este deschis (adică în cazul în care apare o bară de defilare).

myModal.handleUpdate()

dispune

Distruge modalul unui element. (Elimină datele stocate pe elementul DOM)

myModal.dispose()

getInstance

Metodă statică care vă permite să obțineți instanța modală asociată cu un element DOM

var myModalEl = document.getElementById('myModal')
var modal = bootstrap.Modal.getInstance(myModalEl) // Returns a Bootstrap modal instance

getOrCreateInstance

Metodă statică care vă permite să obțineți instanța modală asociată cu un element DOM sau să creați una nouă în cazul în care nu a fost inițializată

var myModalEl = document.querySelector('#myModal')
var modal = bootstrap.Modal.getOrCreateInstance(myModalEl) // Returns a Bootstrap modal instance

Evenimente

Clasa modală a Bootstrap expune câteva evenimente pentru conectarea la funcționalitatea modală. Toate evenimentele modale sunt declanșate la modal în sine (adică la <div class="modal">).

Tip de eveniment Descriere
show.bs.modal Acest eveniment se declanșează imediat când showeste apelată metoda instanței. Dacă este cauzat de un clic, elementul pe care s-a făcut clic este disponibil ca relatedTargetproprietate a evenimentului.
shown.bs.modal Acest eveniment este declanșat atunci când modalul a fost făcut vizibil pentru utilizator (va aștepta finalizarea tranzițiilor CSS). Dacă este cauzat de un clic, elementul pe care s-a făcut clic este disponibil ca relatedTargetproprietate a evenimentului.
hide.bs.modal Acest eveniment este declanșat imediat când hidemetoda instanței a fost apelată.
hidden.bs.modal Acest eveniment este declanșat când modalul a terminat de ascuns utilizatorului (va aștepta finalizarea tranzițiilor CSS).
hidePrevented.bs.modal Acest eveniment este declanșat când modalul este afișat, fundalul său este staticși un clic în afara modalului sau o apăsare a tastei de evacuare este efectuată cu opțiunea de la tastatură sau data-bs-keyboardsetată la false.
var myModalEl = document.getElementById('myModal')
myModalEl.addEventListener('hidden.bs.modal', function (event) {
  // do something...
})