Source

Modal

Bruk Bootstraps JavaScript modal-plugin for å legge til dialogbokser på nettstedet ditt for lysbokser, brukervarsler eller helt tilpasset innhold.

Hvordan det fungerer

Før du begynner med Bootstraps modale komponent, sørg for å lese følgende siden menyalternativene våre nylig har endret seg.

  • Modaler er bygget med HTML, CSS og JavaScript. De er plassert over alt annet i dokumentet og fjerner rulling fra <body>slik at modalt innhold ruller i stedet.
  • Ved å klikke på det modale "bakteppet" lukkes modalen automatisk.
  • Bootstrap støtter bare ett modalt vindu om gangen. Nestede modaler støttes ikke da vi mener de er dårlige brukeropplevelser.
  • Modaler bruker position: fixed, som noen ganger kan være litt spesielt med tanke på gjengivelsen. Når det er mulig, plasser din modale HTML på toppnivå for å unngå potensiell interferens fra andre elementer. Du vil sannsynligvis støte på problemer når du legger et .modali et annet fast element.
  • Nok en gang, på grunn av position: fixed, er det noen forbehold med bruk av modaler på mobile enheter. Se våre nettleserstøttedokumenter for detaljer.
  • På grunn av hvordan HTML5 definerer sin semantikk, har autofocusHTML-attributtet ingen effekt i Bootstrap-modaler. For å oppnå samme effekt, bruk litt tilpasset JavaScript:
$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').trigger('focus')
})

Animasjonseffekten til denne komponenten er avhengig av prefers-reduced-motionmediesøket. Se delen for redusert bevegelse i tilgjengelighetsdokumentasjonen vår .

Fortsett å lese for demoer og retningslinjer for bruk.

Eksempler

Nedenfor er et statisk modalt eksempel (som betyr at det er positionog displayhar blitt overstyrt). Inkludert er modal topptekst, modal hovedtekst (påkrevd for padding) og modal bunntekst (valgfritt). Vi ber om at du inkluderer modale overskrifter med avvisningshandlinger når det er mulig, eller oppgir en annen eksplisitt avvisningshandling.

<div class="modal" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </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-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Live demo

Bytt en fungerende modal demo ved å klikke på knappen nedenfor. Den vil gli ned og tone inn fra toppen av siden.

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

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

Statisk bakteppe

Når bakteppet er satt til statisk, lukkes ikke modalen når du klikker utenfor den. Klikk på knappen nedenfor for å prøve det.

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

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

Ruller langt innhold

Når modaler blir for lange for brukerens visningsport eller enhet, ruller de uavhengig av selve siden. Prøv demoen nedenfor for å se hva vi mener.

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

<!-- Modal -->
<div class="modal fade" id="exampleModalLong" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Du kan også lage en rullbar modal som gjør det mulig å rulle den modale kroppen ved å legge .modal-dialog-scrollabletil .modal-dialog.

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

<!-- Modal -->
<div class="modal fade" id="exampleModalScrollable" tabindex="-1" role="dialog" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalScrollableTitle">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Vertikalt sentrert

Legg .modal-dialog-centeredtil .modal-dialogfor å sentrere modalen vertikalt.

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

<!-- Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalCenterTitle">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Verktøytips og popovers

Verktøytips og popovers kan plasseres i modaler etter behov. Når modaler er lukket, blir alle verktøytips og popovers innenfor også automatisk avvist.

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

Bruke rutenettet

Bruk Bootstrap-rutenettsystemet i en modal ved å hekke .container-fluidi .modal-body. Bruk deretter de vanlige rutenettsystemklassene som du ville andre steder.

<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 ml-auto">.col-md-4 .ml-auto</div>
    </div>
    <div class="row">
      <div class="col-md-3 ml-auto">.col-md-3 .ml-auto</div>
      <div class="col-md-2 ml-auto">.col-md-2 .ml-auto</div>
    </div>
    <div class="row">
      <div class="col-md-6 ml-auto">.col-md-6 .ml-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>

Varierende modalt innhold

Har du en haug med knapper som alle utløser samme modal med litt forskjellig innhold? Bruk event.relatedTargetog HTML - data-*attributter (eventuelt via jQuery ) for å variere innholdet i modalen avhengig av hvilken knapp som ble klikket på.

Nedenfor er en live demo etterfulgt av eksempel HTML og JavaScript. For mer informasjon, les dokumentene for modale hendelser for detaljer om relatedTarget.

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

<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">New message</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <form>
          <div class="form-group">
            <label for="recipient-name" class="col-form-label">Recipient:</label>
            <input type="text" class="form-control" id="recipient-name">
          </div>
          <div class="form-group">
            <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-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Send message</button>
      </div>
    </div>
  </div>
</div>
$('#exampleModal').on('show.bs.modal', function (event) {
  var button = $(event.relatedTarget) // Button that triggered the modal
  var recipient = button.data('whatever') // Extract info from data-* attributes
  // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).
  // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.
  var modal = $(this)
  modal.find('.modal-title').text('New message to ' + recipient)
  modal.find('.modal-body input').val(recipient)
})

Endre animasjon

$modal-fade-transformVariabelen bestemmer transformasjonstilstanden før den .modal-dialogmodale inntoningsanimasjonen, $modal-show-transformvariabelen bestemmer transformasjonen av .modal-dialogpå slutten av den modale inntoningsanimasjonen.

Ønsker du for eksempel en zoom-inn-animasjon, kan du stille inn $modal-fade-transform: scale(.8).

Fjern animasjon

For modaler som ganske enkelt vises i stedet for å fortone seg, fjern .fadeklassen fra din modale markering.

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

Dynamiske høyder

Hvis høyden på en modal endres mens den er åpen, bør du ringe $('#myModal').modal('handleUpdate')for å justere modalens posisjon i tilfelle en rullefelt vises.

tilgjengelighet

Sørg for å legge til role="dialog"og aria-labelledby="...", med referanse til den modale tittelen, til .modal, og role="document"til seg .modal-dialogselv. I tillegg kan du gi en beskrivelse av din modale dialog med aria-describedby.modal.

Innbygging av YouTube-videoer

Innbygging av YouTube-videoer i modaler krever ekstra JavaScript som ikke er i Bootstrap for automatisk å stoppe avspillingen og mer. Se dette nyttige Stack Overflow-innlegget for mer informasjon.

Valgfrie størrelser

Modaler har tre valgfrie størrelser, tilgjengelige via modifikasjonsklasser for å plasseres på en .modal-dialog. Disse størrelsene slår inn ved visse bruddpunkter for å unngå horisontale rullefelt på smalere visningsporter.

Størrelse Klasse Modal maks-bredde
Liten .modal-sm 300px
Misligholde Ingen 500px
Stor .modal-lg 800px
Ekstra stor .modal-xl 1140px

Vår standard modal uten modifiseringsklasse utgjør "middels" størrelse modal.

<!-- Extra large modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-xl">Extra large modal</button>

<div class="modal fade bd-example-modal-xl" tabindex="-1" role="dialog" aria-labelledby="myExtraLargeModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-xl" role="document">
    <div class="modal-content">
      ...
    </div>
  </div>
</div>

<!-- Large modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-lg">Large modal</button>

<div class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-lg" role="document">
    <div class="modal-content">
      ...
    </div>
  </div>
</div>

<!-- Small modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-sm">Small modal</button>

<div class="modal fade bd-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-sm" role="document">
    <div class="modal-content">
      ...
    </div>
  </div>
</div>

Bruk

Modal-pluginen veksler mellom det skjulte innholdet ditt på forespørsel, via dataattributter eller JavaScript. Den legger også .modal-opentil for <body>å overstyre standard rulleadferd og genererer et .modal-backdropklikkområde for å avvise viste modaler når du klikker utenfor modalen.

Via dataattributter

Aktiver en modal uten å skrive JavaScript. Sett data-toggle="modal"på et kontrollerelement, som en knapp, sammen med en data-target="#foo"eller href="#foo"for å målrette en bestemt modal for å veksle.

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

Via JavaScript

Ring en modal med id myModalmed en enkelt linje med JavaScript:

$('#myModal').modal(options)

Alternativer

Alternativer kan sendes via dataattributter eller JavaScript. For dataattributter, legg til alternativnavnet til data-, som i data-backdrop="".

Navn Type Misligholde Beskrivelse
bakteppe boolsk eller strengen'static' ekte Inkluderer et modalt bakteppeelement. Alternativt, spesifiser staticfor et bakteppe som ikke lukker modalen ved klikk eller ved escape-tastetrykk.
tastatur boolsk ekte Lukker modalen når escape-tasten trykkes
fokus boolsk ekte Setter fokus på modalen når den initialiseres.
forestilling boolsk ekte Viser modalen når initialisert.

Metoder

Asynkrone metoder og overganger

Alle API-metoder er asynkrone og starter en overgang . De går tilbake til den som ringer så snart overgangen er startet, men før den avsluttes . I tillegg vil et metodekall på en overgangskomponent bli ignorert .

Se vår JavaScript-dokumentasjon for mer informasjon .

.modal(options)

Aktiverer innholdet ditt som en modal. Godtar et valgfritt alternativ object.

$('#myModal').modal({
  keyboard: false
})

.modal('toggle')

Bytter en modal manuelt. Går tilbake til den som ringer før modalen faktisk har blitt vist eller skjult (dvs. før hendelsen shown.bs.modaleller hidden.bs.modalinntreffer).

$('#myModal').modal('toggle')

.modal('show')

Åpner en modal manuelt. Går tilbake til den som ringer før modalen faktisk har blitt vist (dvs. før shown.bs.modalhendelsen inntreffer).

$('#myModal').modal('show')

.modal('hide')

Skjuler en modal manuelt. Går tilbake til den som ringer før modalen faktisk har blitt skjult (dvs. før hidden.bs.modalhendelsen inntreffer).

$('#myModal').modal('hide')

.modal('handleUpdate')

Juster modalens posisjon manuelt hvis høyden på en modal endres mens den er åpen (dvs. i tilfelle en rullefelt vises).

$('#myModal').modal('handleUpdate')

.modal('dispose')

Ødelegger et elements modal.

arrangementer

Bootstraps modalklasse avslører noen få hendelser for å koble til modal funksjonalitet. Alle modale hendelser skytes mot selve modalen (dvs. på <div class="modal">).

Hendelsestype Beskrivelse
show.bs.modal Denne hendelsen utløses umiddelbart når showinstansmetoden kalles. Hvis det er forårsaket av et klikk, er det klikkede elementet tilgjengelig som relatedTargetegenskapen til hendelsen.
vist.bs.modal Denne hendelsen utløses når modalen er gjort synlig for brukeren (vil vente til CSS-overganger er fullført). Hvis det er forårsaket av et klikk, er det klikkede elementet tilgjengelig som relatedTargetegenskapen til hendelsen.
hide.bs.modal Denne hendelsen utløses umiddelbart når hideinstansmetoden er kalt.
skjult.bs.modal Denne hendelsen utløses når modalen er ferdig skjult for brukeren (vil vente på at CSS-overganger er fullført).
hidePrevented.bs.modal Denne hendelsen utløses når modalen vises, dens bakteppe er staticog et klikk utenfor modalen eller et escape-tasttrykk utføres.
$('#myModal').on('hidden.bs.modal', function (e) {
  // do something...
})