Modala
Uzu la JavaScript modalan kromprogramon de Bootstrap por aldoni dialogojn al via retejo por lumkestoj, sciigoj de uzantoj aŭ tute laŭmenda enhavo.
Kiel ĝi funkcias
Antaŭ ol komenci kun la modala komponanto de Bootstrap, nepre legu la jenajn, ĉar niaj menuaj opcioj lastatempe ŝanĝiĝis.
- Modaloj estas konstruitaj per HTML, CSS kaj JavaScript. Ili estas poziciigitaj super ĉio alia en la dokumento kaj forigas rullibron de la
<body>
por ke modala enhavo rulu anstataŭe. - Klako sur la modala "fono" aŭtomate fermos la modalon.
- Bootstrap nur subtenas unu modalan fenestron samtempe. Nestitaj modaloj ne estas subtenataj ĉar ni kredas, ke ili estas malbonaj uzantspertoj.
- Modaloj uzas
position: fixed
, kiu foje povas esti iom aparta pri ĝia bildigo. Kiam ajn eblas, metu vian modalan HTML-on en plej altan pozicion por eviti eblan interferon de aliaj elementoj. Vi verŝajne renkontos problemojn kiam vi nestumas.modal
ene de alia fiksita elemento. - Denove, pro
position: fixed
, estas kelkaj avertoj pri uzado de modaloj en porteblaj aparatoj. Vidu niajn retumila subteno dokumentoj por detaloj. - Pro kiel HTML5 difinas sian semantikon, la
autofocus
HTML-atributo ne efikas en Bootstrap-modaloj. Por atingi la saman efikon, uzu iun kutiman JavaScript:
$('#myModal').on('shown.bs.modal', function () {
$('#myInput').trigger('focus')
})
prefers-reduced-motion
amaskomunikila demando. Vidu la
sekcion pri reduktita moviĝo de nia dokumentaro pri alirebleco .
Daŭre legu por pruvoj kaj uzgvidlinioj.
Ekzemploj
Modalaj komponantoj
Malsupre estas senmova modala ekzemplo (signifante ĝiaj position
kaj display
estis anstataŭitaj). Inkluditaj estas la modala kaplinio, modala korpo (bezonata por padding
), kaj modala piedlinio (laŭvola). Ni petas, ke vi enmetu modalajn kapliniojn kun malakceptaj agoj kiam ajn eblas, aŭ disponigi alian eksplicitan forĵetan agon.
<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="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</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>
Viva demonstraĵo
Ŝaltu funkciantan modalan demonstraĵon alklakante la suban butonon. Ĝi glitos malsupren kaj velkos de la supro de la paĝo.
<!-- 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" 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="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</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>
Senmova fono
Kiam fono estas fiksita al senmova, la modalo ne fermiĝos kiam oni klakas ekster ĝi. Alklaku la suban butonon por provi ĝin.
<!-- 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" data-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="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</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>
Movu longan enhavon
Kiam modaloj fariĝas tro longaj por la vidpunkto aŭ aparato de la uzanto, ili ruliĝas sendepende de la paĝo mem. Provu la demon sube por vidi kion ni volas diri.
Vi ankaŭ povas krei rulumeblan modalon kiu permesas rulumi la modalan korpon aldonante .modal-dialog-scrollable
al .modal-dialog
.
<!-- Scrollable modal -->
<div class="modal-dialog modal-dialog-scrollable">
...
</div>
Vertikale centrita
Aldonu .modal-dialog-centered
al .modal-dialog
por vertikale centri la modalon.
<!-- 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>
Konsiletoj kaj popovers
Konsiletoj kaj popovers povas esti metitaj ene de modaloj laŭbezone. Kiam modaloj estas fermitaj, ĉiuj konsiletoj kaj popovers ene ankaŭ estas aŭtomate forĵetitaj.
<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>
Uzante la kradon
Uzu la Bootstrap kradsistemon ene de modalo per nestado .container-fluid
ene de la .modal-body
. Poste, uzu la normalajn kradsistemajn klasojn kiel vi farus aliloke.
<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>
Varianta modala enhavo
Ĉu vi havas amason da butonoj, kiuj ĉiuj ekigas la saman modalon kun iomete malsama enhavo? Uzu event.relatedTarget
kaj HTML- data-*
atributojn (eble per jQuery ) por variigi la enhavon de la modalo depende de kiu butono estis klakita.
Malsupre estas reala demo sekvata de ekzemplo HTML kaj JavaScript. Por pliaj informoj, legu la dokumentojn pri modalaj eventoj por detaloj pri 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" 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="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</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)
})
Ŝanĝi kuraĝigon
La $modal-fade-transform
variablo determinas la transforman staton de .modal-dialog
antaŭ la modala faden-en-animacio, la $modal-show-transform
variablo determinas la transformon de .modal-dialog
ĉe la fino de la modala faden-en-animacio.
Se vi volas ekzemple zooman animacion, vi povas agordi $modal-fade-transform: scale(.8)
.
Forigi animacion
Por modaloj kiuj simple aperas prefere ol fadi por vidi, forigu la .fade
klason de via modala markado.
<div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
...
</div>
Dinamikaj altecoj
Se la alteco de modalo ŝanĝiĝas dum ĝi estas malfermita, vi devus voki $('#myModal').modal('handleUpdate')
por reĝustigi la pozicion de la modalo, se aperos rulumbreto.
Alirebleco
Nepre aldonu aria-labelledby="..."
, referencante la modalan titolon, al .modal
. Aldone, vi povas doni priskribon de via modala dialogo per aria-describedby
sur .modal
. Notu, ke vi ne bezonas aldoni role="dialog"
ĉar ni jam aldonas ĝin per JavaScript.
Enkonstruado de YouTube-videoj
Enmeti YouTube-filmetojn en modaloj postulas plian JavaScript ne en Bootstrap por aŭtomate ĉesigi la reproduktadon kaj pli. Vidu ĉi tiun helpeman afiŝon de Stack Overflow por pliaj informoj.
Laŭvolaj grandecoj
Modaloj havas tri laŭvolajn grandecojn, haveblajn per modifiklasoj por esti metitaj sur .modal-dialog
. Ĉi tiuj grandecoj ekfunkcias ĉe certaj rompopunktoj por eviti horizontalajn rulstangojn sur pli mallarĝaj vidfenestroj.
Grandeco | Klaso | Modala maks-larĝo |
---|---|---|
Malgranda | .modal-sm |
300px |
Defaŭlte | Neniu | 500px |
Granda | .modal-lg |
800px |
Ekstre granda | .modal-xl |
1140px |
Nia defaŭlta modalo sen modifklaso konsistigas la "mezan" grandecan modalon.
<div class="modal-dialog modal-xl">...</div>
<div class="modal-dialog modal-lg">...</div>
<div class="modal-dialog modal-sm">...</div>
Uzado
La modala kromaĵo ŝanĝas vian kaŝitan enhavon laŭpeto, per datumaj atributoj aŭ JavaScript. Ĝi ankaŭ aldonas .modal-open
al la <body>
por superregi defaŭltan movo-konduton kaj generas .modal-backdrop
por disponigi klakan areon por forĵeti montritajn modalojn kiam oni klakas ekster la modalo.
Per datumaj atributoj
Aktivigu modalon sen skribi JavaScript. Agordu data-toggle="modal"
sur regila elemento, kiel butono, kune kun data-target="#foo"
aŭ href="#foo"
por celi specifan modalon por ŝanĝi.
<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>
Per JavaScript
Voku modalon kun id myModal
kun ununura linio de JavaScript:
$('#myModal').modal(options)
Opcioj
Opcioj povas esti pasitaj per datumaj atributoj aŭ JavaScript. Por datumaj atributoj, aldonu la opcionomon al data-
, kiel en data-backdrop=""
.
Nomo | Tajpu | Defaŭlte | Priskribo |
---|---|---|---|
fono | bulea aŭ la ĉeno'static' |
vera | Inkluzivas modalan fonan elementon. Alternative, specifu static por fono, kiu ne fermas la modalon alklakante. |
klavaro | bulea | vera | Fermas la modalon kiam eskapa klavo estas premata |
fokuso | bulea | vera | Metas la fokuson sur la modalon kiam pravaligita. |
montri | bulea | vera | Montras la modalon kiam pravalorigita. |
Metodoj
Nesinkronaj metodoj kaj transiroj
Ĉiuj API-metodoj estas nesinkronaj kaj komencas transiron . Ili revenas al la alvokanto tuj kiam la transiro estas komencita sed antaŭ ol ĝi finiĝas . Krome, metodovoko sur transira komponento estos ignorita .
.modal(options)
Aktivigas vian enhavon kiel modalon. Akceptas laŭvolajn opciojn object
.
$('#myModal').modal({
keyboard: false
})
.modal('toggle')
Mane ŝanĝas modalon. Revenas al la alvokanto antaŭ ol la modalo estas efektive montrita aŭ kaŝita (t.e. antaŭ ol la shown.bs.modal
evento hidden.bs.modal
okazas).
$('#myModal').modal('toggle')
.modal('show')
Mane malfermas modalon. Revenas al la alvokanto antaŭ ol la modalo estas efektive montrita (te antaŭ ol la shown.bs.modal
evento okazas).
$('#myModal').modal('show')
.modal('hide')
Mane kaŝas modalon. Revenas al la alvokanto antaŭ ol la modalo estas fakte kaŝita (te antaŭ ol la hidden.bs.modal
evento okazas).
$('#myModal').modal('hide')
.modal('handleUpdate')
Mane reĝustigu la pozicion de la modalo se la alteco de modalo ŝanĝiĝas dum ĝi estas malfermita (te en la okazo ke aperos rulumbreto).
$('#myModal').modal('handleUpdate')
.modal('dispose')
Detruas la modalon de elemento.
Eventoj
La modala klaso de Bootstrap elmontras kelkajn eventojn por hoki al modala funkcieco. Ĉiuj modalaj eventoj estas pafitaj ĉe la modalo mem (te ĉe la <div class="modal">
).
Eventa Tipo | Priskribo |
---|---|
show.bs.modal | Ĉi tiu evento tuj ekfunkciigas kiam la show ekzempla metodo estas vokita. Se kaŭzite de klako, la klakita elemento disponeblas kiel la relatedTarget posedaĵo de la evento. |
montrata.bs.modala | Ĉi tiu evento estas lanĉita kiam la modalo fariĝis videbla al la uzanto (atendos ke CSS-transiroj finiĝos). Se kaŭzite de klako, la klakita elemento disponeblas kiel la relatedTarget posedaĵo de la evento. |
kaŝi.bs.modal | Ĉi tiu evento estas lanĉita tuj kiam la hide ekzempla metodo estas vokita. |
kaŝita.bs.modala | Ĉi tiu evento estas lanĉita kiam la modalo finiĝis kaŝita de la uzanto (atendos ke CSS-transiroj finiĝos). |
kaŝiPrevented.bs.modal | Ĉi tiu okazaĵo estas lanĉita kiam la modalo estas montrita, ĝia fono estas static kaj klako ekster la modalo aŭ eskapa klavopremo estas farita kun la klavaropcio aŭ data-keyboard agordita al false . |
$('#myModal').on('hidden.bs.modal', function (event) {
// do something...
})