Modal
Gamitin ang JavaScript modal plugin ng Bootstrap upang magdagdag ng mga dialog sa iyong site para sa mga lightbox, notification ng user, o ganap na custom na content.
Paano ito gumagana
Bago magsimula sa modal component ng Bootstrap, siguraduhing basahin ang mga sumusunod dahil ang aming mga opsyon sa menu ay nagbago kamakailan.
- Ang mga modal ay binuo gamit ang HTML, CSS, at JavaScript. Ang mga ito ay nakaposisyon sa lahat ng iba pa sa dokumento at alisin ang scroll mula sa
<body>
upang ang modal na nilalaman ay mag-scroll sa halip. - Ang pag-click sa modal na "backdrop" ay awtomatikong isasara ang modal.
- Sinusuportahan lamang ng Bootstrap ang isang modal window sa isang pagkakataon. Hindi sinusuportahan ang mga nested modal dahil naniniwala kami na ang mga ito ay hindi magandang karanasan ng user.
- Ginagamit ang mga modal
position: fixed
, na kung minsan ay medyo partikular sa pag-render nito. Hangga't maaari, ilagay ang iyong modal HTML sa isang top-level na posisyon upang maiwasan ang potensyal na interference mula sa iba pang mga elemento. Malamang na magkakaroon ka ng mga isyu kapag nag-nest ng isang sa.modal
loob ng isa pang nakapirming elemento. - Muli, dahil sa
position: fixed
, may ilang mga caveat sa paggamit ng mga modal sa mga mobile device. Tingnan ang aming browser support docs para sa mga detalye. - Dahil sa kung paano tinukoy ng HTML5 ang mga semantika nito, ang
autofocus
HTML attribute ay walang epekto sa Bootstrap modals. Upang makamit ang parehong epekto, gumamit ng ilang custom na JavaScript:
var myModal = document.getElementById('myModal')
var myInput = document.getElementById('myInput')
myModal.addEventListener('shown.bs.modal', function () {
myInput.focus()
})
prefers-reduced-motion
query ng media. Tingnan ang
seksyon ng pinababang paggalaw ng aming dokumentasyon ng pagiging naa-access .
Panatilihin ang pagbabasa para sa mga demo at mga alituntunin sa paggamit.
Mga halimbawa
Mga bahagi ng modal
Nasa ibaba ang isang static na halimbawa ng modal (ibig sabihin nito position
at display
na-override na). Kasama ang modal header, modal body (kinakailangan para sa padding
), at modal footer (opsyonal). Hinihiling namin na isama mo ang mga modal header na may mga pagkilos na i-dismiss hangga't maaari, o magbigay ng isa pang tahasang pagkilos sa pag-dismiss.
<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>
Live na demo
I-toggle ang gumaganang modal demo sa pamamagitan ng pag-click sa button sa ibaba. Magda-slide ito pababa at maglalaho mula sa itaas ng page.
<!-- 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>
Static na backdrop
Kapag nakatakda ang backdrop sa static, hindi magsasara ang modal kapag nag-click sa labas nito. I-click ang button sa ibaba upang subukan ito.
<!-- 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>
Pag-scroll ng mahabang nilalaman
Kapag masyadong mahaba ang mga modal para sa viewport o device ng user, nag-i-scroll sila nang hiwalay sa mismong page. Subukan ang demo sa ibaba upang makita kung ano ang ibig naming sabihin.
Maaari ka ring gumawa ng scrollable modal na nagbibigay-daan sa pag-scroll sa modal body sa pamamagitan ng pagdaragdag .modal-dialog-scrollable
sa .modal-dialog
.
<!-- Scrollable modal -->
<div class="modal-dialog modal-dialog-scrollable">
...
</div>
Patayong nakasentro
Idagdag .modal-dialog-centered
sa .modal-dialog
patayo na igitna ang modal.
<!-- 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>
Mga tooltip at popover
Ang mga tooltip at popover ay maaaring ilagay sa loob ng mga modal kung kinakailangan. Kapag isinara ang mga modal, awtomatikong dini-dismiss din ang anumang tooltip at popover sa loob.
<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>
Gamit ang grid
Gamitin ang Bootstrap grid system sa loob ng isang modal sa pamamagitan ng pagpupugad sa .container-fluid
loob ng .modal-body
. Pagkatapos, gamitin ang normal na mga klase ng sistema ng grid gaya ng gagawin mo saanman.
<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>
Pag-iiba-iba ng nilalaman ng modal
May isang grupo ng mga pindutan na lahat ay nagpapalitaw ng parehong modal na may bahagyang magkakaibang mga nilalaman? Gamitin event.relatedTarget
at HTML na mga data-bs-*
katangian upang pag-iba-ibahin ang mga nilalaman ng modal depende sa kung aling button ang na-click.
Nasa ibaba ang isang live na demo na sinusundan ng halimbawang HTML at JavaScript. Para sa higit pang impormasyon, basahin ang mga modal event docs para sa mga detalye sa 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
})
Mag-toggle sa pagitan ng mga modal
Mag-toggle sa pagitan ng maraming modal na may ilang matalinong paglalagay ng data-bs-target
at mga data-bs-toggle
katangian. Halimbawa, maaari mong i-toggle ang isang modal ng pag-reset ng password mula sa loob ng isang bukas na sign in modal. Pakitandaan na ang maraming modal ay hindi maaaring buksan nang sabay —ang pamamaraang ito ay nagpapalipat-lipat lamang sa pagitan ng dalawang magkahiwalay na modal.
<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>
Baguhin ang animation
Tinutukoy $modal-fade-transform
ng variable ang katayuan ng pagbabago .modal-dialog
bago ang animation ng modal fade-in, $modal-show-transform
tinutukoy ng variable ang pagbabago ng .modal-dialog
sa dulo ng animation ng modal fade-in.
Kung gusto mo halimbawa ng zoom-in na animation, maaari mong itakda ang $modal-fade-transform: scale(.8)
.
Alisin ang animation
Para sa mga modal na lilitaw lamang sa halip na mawala upang tingnan, alisin ang .fade
klase sa iyong modal markup.
<div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
...
</div>
Mga dinamikong taas
Kung nagbabago ang taas ng isang modal habang ito ay bukas, dapat kang tumawag myModal.handleUpdate()
upang muling ayusin ang posisyon ng modal kung sakaling lumitaw ang isang scrollbar.
Accessibility
Tiyaking idagdag aria-labelledby="..."
ang , na tumutukoy sa pamagat ng modal, sa .modal
. Bukod pa rito, maaari kang magbigay ng paglalarawan ng iyong modal dialog na may aria-describedby
sa .modal
. Tandaan na hindi mo na kailangang magdagdag role="dialog"
dahil naidagdag na namin ito sa pamamagitan ng JavaScript.
Pag-embed ng mga video sa YouTube
Ang pag-embed ng mga video sa YouTube sa mga modal ay nangangailangan ng karagdagang JavaScript na wala sa Bootstrap upang awtomatikong ihinto ang pag-playback at higit pa. Tingnan ang kapaki-pakinabang na post na ito ng Stack Overflow para sa higit pang impormasyon.
Mga opsyonal na laki
Ang mga modal ay may tatlong opsyonal na laki, na magagamit sa pamamagitan ng mga klase ng modifier na ilalagay sa isang .modal-dialog
. Ang mga laki na ito ay nagsisimula sa ilang mga breakpoint upang maiwasan ang mga pahalang na scrollbar sa mas makitid na viewport.
Sukat | Klase | Modal na max-width |
---|---|---|
Maliit | .modal-sm |
300px |
Default | wala | 500px |
Malaki | .modal-lg |
800px |
Sobrang laki | .modal-xl |
1140px |
Ang aming default na modal na walang modifier class ay bumubuo ng "medium" size modal.
<div class="modal-dialog modal-xl">...</div>
<div class="modal-dialog modal-lg">...</div>
<div class="modal-dialog modal-sm">...</div>
Fullscreen Modal
Ang isa pang override ay ang opsyong mag-pop up ng modal na sumasaklaw sa viewport ng user, na available sa pamamagitan ng mga klase ng modifier na inilalagay sa isang .modal-dialog
.
Klase | Availability |
---|---|
.modal-fullscreen |
Laging |
.modal-fullscreen-sm-down |
sa ibaba576px |
.modal-fullscreen-md-down |
sa ibaba768px |
.modal-fullscreen-lg-down |
sa ibaba992px |
.modal-fullscreen-xl-down |
sa ibaba1200px |
.modal-fullscreen-xxl-down |
sa ibaba1400px |
<!-- Full screen modal -->
<div class="modal-dialog modal-fullscreen-sm-down">
...
</div>
Sass
Mga variable
$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);
Loop
Ang mga tumutugong fullscreen modal ay nabuo sa pamamagitan ng $breakpoints
mapa at isang loop sa 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);
}
}
}
}
Paggamit
I-toggle ng modal plugin ang iyong nakatagong content on demand, sa pamamagitan ng mga attribute ng data o JavaScript. Ino-override din nito ang default na gawi sa pag-scroll at bumubuo ng .modal-backdrop
isang lugar ng pag-click para sa pag-dismiss ng mga ipinapakitang modal kapag nagki-click sa labas ng modal.
Sa pamamagitan ng mga katangian ng data
I-toggle
Mag-activate ng modal nang hindi nagsusulat ng JavaScript. Itakda data-bs-toggle="modal"
sa isang elemento ng controller, tulad ng isang button, kasama ng isang data-bs-target="#foo"
o href="#foo"
upang i-target ang isang partikular na modal upang i-toggle.
<button type="button" data-bs-toggle="modal" data-bs-target="#myModal">Launch modal</button>
I-dismiss
Maaaring makamit ang pagpapaalis gamit ang data
attribute sa isang button sa loob ng modal gaya ng ipinapakita sa ibaba:
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
o sa isang button sa labas ng modal gamit ang data-bs-target
tulad ng ipinapakita sa ibaba:
<button type="button" class="btn-close" data-bs-dismiss="modal" data-bs-target="#my-modal" aria-label="Close"></button>
Sa pamamagitan ng JavaScript
Gumawa ng modal na may isang linya ng JavaScript:
var myModal = new bootstrap.Modal(document.getElementById('myModal'), options)
Mga pagpipilian
Maaaring ipasa ang mga opsyon sa pamamagitan ng mga katangian ng data o JavaScript. Para sa mga katangian ng data, idagdag ang pangalan ng opsyon sa data-bs-
, tulad ng sa data-bs-backdrop=""
.
Pangalan | Uri | Default | Paglalarawan |
---|---|---|---|
backdrop |
boolean o ang string'static' |
true |
May kasamang modal-backdrop na elemento. Bilang kahalili, tumukoy static para sa isang backdrop na hindi nagsasara ng modal sa pag-click. |
keyboard |
boolean | true |
Isinasara ang modal kapag pinindot ang escape key |
focus |
boolean | true |
Inilalagay ang focus sa modal kapag nasimulan. |
Paraan
Mga asynchronous na pamamaraan at paglipat
Ang lahat ng mga pamamaraan ng API ay asynchronous at nagsisimula ng isang paglipat . Bumalik sila sa tumatawag sa sandaling magsimula ang paglipat ngunit bago ito matapos . Bilang karagdagan, babalewalain ang isang method call sa isang transitioning component .
Tingnan ang aming dokumentasyon ng JavaScript para sa higit pang impormasyon .
Mga pagpipilian sa pagpasa
Ina-activate ang iyong content bilang modal. Tumatanggap ng opsyonal na opsyon object
.
var myModal = new bootstrap.Modal(document.getElementById('myModal'), {
keyboard: false
})
magpalipat-lipat
Manu-manong i-toggle ang isang modal. Bumabalik sa tumatawag bago ang modal ay aktwal na naipakita o naitago (ibig sabihin, bago mangyari ang shown.bs.modal
o hidden.bs.modal
kaganapan).
myModal.toggle()
palabas
Manu-manong nagbubukas ng modal. Bumabalik sa tumatawag bago aktwal na naipakita ang modal (ibig sabihin, bago shown.bs.modal
mangyari ang kaganapan).
myModal.show()
Gayundin, maaari kang magpasa ng elemento ng DOM bilang isang argumento na maaaring matanggap sa mga modal event (bilang relatedTarget
property).
var modalToggle = document.getElementById('toggleMyModal') // relatedTarget
myModal.show(modalToggle)
tago
Manu-manong nagtatago ng modal. Bumabalik sa tumatawag bago pa talaga naitago ang modal (ibig sabihin, bago hidden.bs.modal
mangyari ang kaganapan).
myModal.hide()
handleUpdate
Manu-manong muling ayusin ang posisyon ng modal kung ang taas ng isang modal ay nagbabago habang ito ay bukas (ibig sabihin, kung sakaling lumitaw ang isang scrollbar).
myModal.handleUpdate()
itapon
Sinisira ang modal ng isang elemento. (Aalisin ang nakaimbak na data sa elemento ng DOM)
myModal.dispose()
getInstance
Static na pamamaraan na nagbibigay-daan sa iyong makuha ang modal instance na nauugnay sa isang elemento ng DOM
var myModalEl = document.getElementById('myModal')
var modal = bootstrap.Modal.getInstance(myModalEl) // Returns a Bootstrap modal instance
getOrCreateInstance
Static na paraan na nagbibigay-daan sa iyong makuha ang modal instance na nauugnay sa isang elemento ng DOM, o gumawa ng bago kung sakaling hindi ito nasimulan
var myModalEl = document.querySelector('#myModal')
var modal = bootstrap.Modal.getOrCreateInstance(myModalEl) // Returns a Bootstrap modal instance
Mga kaganapan
Ang modal class ng Bootstrap ay naglalantad ng ilang mga kaganapan para sa hooking sa modal functionality. Ang lahat ng modal na kaganapan ay pinapagana sa modal mismo (ibig sabihin, sa <div class="modal">
).
Uri ng kaganapan | Paglalarawan |
---|---|
show.bs.modal |
Agad na gagana ang kaganapang ito kapag show tinawag ang paraan ng instance. Kung sanhi ng isang pag-click, ang na-click na elemento ay magagamit bilang pag- relatedTarget aari ng kaganapan. |
shown.bs.modal |
Ang kaganapang ito ay pinapagana kapag ang modal ay ginawang nakikita ng user (maghihintay na makumpleto ang mga transition ng CSS). Kung sanhi ng isang pag-click, ang na-click na elemento ay magagamit bilang pag- relatedTarget aari ng kaganapan. |
hide.bs.modal |
Agad na pinapagana ang kaganapang ito kapag hide tinawag na ang paraan ng instance. |
hidden.bs.modal |
Ang kaganapang ito ay papaganahin kapag ang modal ay tapos nang itago mula sa user (maghihintay na makumpleto ang mga transition ng CSS). |
hidePrevented.bs.modal |
Ang kaganapang ito ay pinapagana kapag ang modal ay ipinakita, ang backdrop nito static at ang isang pag-click sa labas ng modal o isang pagpindot sa escape key ay isinasagawa gamit ang opsyon sa keyboard o data-bs-keyboard nakatakda sa false . |
var myModalEl = document.getElementById('myModal')
myModalEl.addEventListener('hidden.bs.modal', function (event) {
// do something...
})