moddol
Defnyddiwch ategyn moddol JavaScript Bootstrap i ychwanegu deialogau at eich gwefan ar gyfer blychau golau, hysbysiadau defnyddwyr, neu gynnwys cwbl arferol.
Sut mae'n gweithio
Cyn dechrau ar gydran foddol Bootstrap, gwnewch yn siŵr eich bod chi'n darllen y canlynol gan fod ein hopsiynau bwydlen wedi newid yn ddiweddar.
- Mae modiwlau'n cael eu hadeiladu gyda HTML, CSS, a JavaScript. Maent wedi'u lleoli dros bopeth arall yn y ddogfen ac yn tynnu sgrôl o'r
<body>
fel bod cynnwys moddol yn sgrolio yn lle hynny. - Bydd clicio ar y “cefndir” moddol yn cau'r moddol yn awtomatig.
- Dim ond un ffenestr foddol y mae Bootstrap yn ei chynnal ar y tro. Nid yw moddau nythu yn cael eu cefnogi gan ein bod yn credu eu bod yn brofiadau gwael gan ddefnyddwyr.
- Mae moddau'n defnyddio
position: fixed
, a all weithiau fod ychydig yn benodol am ei rendrad. Lle bynnag y bo modd, rhowch eich HTML moddol mewn safle lefel uchaf er mwyn osgoi ymyrraeth bosibl gan elfennau eraill. Mae'n debyg y byddwch chi'n wynebu problemau wrth nythu o.modal
fewn elfen sefydlog arall. - Unwaith eto, oherwydd
position: fixed
, mae rhai cafeatau gyda defnyddio moddau ar ddyfeisiau symudol. Gweler ein dogfennau cymorth porwr am fanylion. - Oherwydd sut mae HTML5 yn diffinio ei semanteg, nid yw'r
autofocus
priodoledd HTML yn cael unrhyw effaith mewn moddau Bootstrap. I gyflawni'r un effaith, defnyddiwch JavaScript arferol:
var myModal = document.getElementById('myModal')
var myInput = document.getElementById('myInput')
myModal.addEventListener('shown.bs.modal', function () {
myInput.focus()
})
prefers-reduced-motion
ymholiad y cyfryngau. Gweler
adran cynnig gostyngol ein dogfennaeth hygyrchedd .
Daliwch ati i ddarllen am demos a chanllawiau defnydd.
Enghreifftiau
Cydrannau moddol
Isod mae enghraifft moddol statig (sy'n golygu ei position
ac display
wedi cael ei diystyru). Yn gynwysedig mae'r pennawd moddol, y corff moddol (sy'n ofynnol ar gyfer padding
), a'r troedyn moddol (dewisol). Gofynnwn i chi gynnwys penawdau moddol gyda chamau diswyddo pryd bynnag y bo modd, neu ddarparu cam diswyddo penodol arall.
<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 byw
Toggle demo modd gweithio trwy glicio ar y botwm isod. Bydd yn llithro i lawr ac yn pylu i mewn o frig y dudalen.
<!-- 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>
Cefndir statig
Pan fydd y cefndir wedi'i osod yn sefydlog, ni fydd y moddol yn cau wrth glicio y tu allan iddo. Cliciwch ar y botwm isod i roi cynnig arni.
<!-- 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>
Sgrolio cynnwys hir
Pan fydd moddau'n mynd yn rhy hir ar gyfer golygfa neu ddyfais y defnyddiwr, maen nhw'n sgrolio'n annibynnol ar y dudalen ei hun. Rhowch gynnig ar y demo isod i weld beth rydym yn ei olygu.
Gallwch hefyd greu modd y gellir ei sgrolio sy'n caniatáu sgrolio'r corff moddol trwy ychwanegu .modal-dialog-scrollable
at .modal-dialog
.
<!-- Scrollable modal -->
<div class="modal-dialog modal-dialog-scrollable">
...
</div>
Wedi'i ganoli'n fertigol
Ychwanegu .modal-dialog-centered
at .modal-dialog
ganol fertigol y moddol.
<!-- 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>
Awgrymiadau offer a popovers
Gellir gosod awgrymiadau offer a popovers o fewn moddau yn ôl yr angen . Pan fydd moddau ar gau, mae unrhyw awgrymiadau offer a popovers ynddynt hefyd yn cael eu diystyru'n awtomatig.
<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>
Gan ddefnyddio'r grid
Defnyddiwch system grid Bootstrap o fewn moddol trwy nythu .container-fluid
o fewn y .modal-body
. Yna, defnyddiwch y dosbarthiadau system grid arferol fel y byddech yn unrhyw le arall.
<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>
Cynnwys moddol amrywiol
Oes gennych chi griw o fotymau sydd i gyd yn sbarduno'r un modd gyda chynnwys ychydig yn wahanol? Defnyddio event.relatedTarget
a phriodoleddau HTMLdata-bs-*
i amrywio cynnwys y moddol yn dibynnu ar ba fotwm y cliciwyd arno.
Isod mae demo byw ac yna HTML a JavaScript enghreifftiol. I gael rhagor o wybodaeth, darllenwch y dogfennau digwyddiadau moddol am fanylion ar 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
})
Toggle rhwng moddau
Toglo rhwng moddau lluosog gyda rhywfaint o leoliad clyfar o'r data-bs-target
a data-bs-toggle
phriodoleddau. Er enghraifft, fe allech chi toglo modd ailosod cyfrinair o fewn arwydd sydd eisoes ar agor mewn moddol. Sylwch na all moddau lluosog fod ar agor ar yr un pryd - mae'r dull hwn yn toglo rhwng dau foddol ar wahân.
<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" data-bs-dismiss="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" data-bs-dismiss="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>
Newid animeiddiad
Mae'r $modal-fade-transform
newidyn yn pennu cyflwr trawsnewid .modal-dialog
cyn yr animeiddiad pylu moddol, mae'r $modal-show-transform
newidyn yn pennu'r trawsnewidiad .modal-dialog
ar ddiwedd yr animeiddiad pylu moddol.
Os ydych chi eisiau animeiddiad chwyddo i mewn er enghraifft, gallwch chi osod $modal-fade-transform: scale(.8)
.
Dileu animeiddiad
Ar gyfer modiwlau sy'n ymddangos yn syml yn hytrach na diflannu i'r golwg, tynnwch y .fade
dosbarth o'ch marc moddol.
<div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
...
</div>
Uchder deinamig
Os yw uchder modd newid tra ei fod ar agor, dylech ffonio myModal.handleUpdate()
i ail-addasu safle'r modd rhag ofn y bydd bar sgrolio yn ymddangos.
Hygyrchedd
Gwnewch yn siŵr eich bod yn ychwanegu aria-labelledby="..."
, gan gyfeirio at y teitl moddol, at .modal
. Yn ogystal, gallwch roi disgrifiad o'ch deialog moddol gydag aria-describedby
on .modal
. Sylwch nad oes angen i chi ychwanegu role="dialog"
gan ein bod eisoes yn ei ychwanegu trwy JavaScript.
Mewnosod fideos YouTube
Mae gwreiddio fideos YouTube mewn moddau yn gofyn am JavaScript ychwanegol nid yn Bootstrap i atal chwarae a mwy yn awtomatig. Gweler y post defnyddiol Stack Overflow hwn am ragor o wybodaeth.
Meintiau dewisol
Mae gan foddau dri maint dewisol, sydd ar gael trwy ddosbarthiadau addasu i'w gosod ar .modal-dialog
. Mae'r meintiau hyn yn cychwyn ar rai torbwyntiau er mwyn osgoi bariau sgrolio llorweddol ar olygfannau culach.
Maint | Dosbarth | Lled mwyaf moddol |
---|---|---|
Bach | .modal-sm |
300px |
Diofyn | Dim | 500px |
Mawr | .modal-lg |
800px |
Mawr ychwanegol | .modal-xl |
1140px |
Mae ein dosbarth moddol heb addasydd rhagosodedig yn gyfystyr â'r modd maint "canolig".
<div class="modal-dialog modal-xl">...</div>
<div class="modal-dialog modal-lg">...</div>
<div class="modal-dialog modal-sm">...</div>
Modal sgrin lawn
Diystyriad arall yw'r opsiwn i agor moddol sy'n cynnwys y porth golwg defnyddiwr, sydd ar gael trwy ddosbarthiadau addasydd a osodir ar .modal-dialog
.
Dosbarth | Argaeledd |
---|---|
.modal-fullscreen |
Bob amser |
.modal-fullscreen-sm-down |
Isod576px |
.modal-fullscreen-md-down |
Isod768px |
.modal-fullscreen-lg-down |
Isod992px |
.modal-fullscreen-xl-down |
Isod1200px |
.modal-fullscreen-xxl-down |
Isod1400px |
<!-- Full screen modal -->
<div class="modal-dialog modal-fullscreen-sm-down">
...
</div>
Sass
Newidynnau
$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);
Dolen
Mae moddau sgrin lawn ymatebol yn cael eu cynhyrchu trwy'r $breakpoints
map a dolen i mewn 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);
}
}
}
}
Defnydd
Mae'r ategyn moddol yn toglo'ch cynnwys cudd yn ôl y galw, trwy briodoleddau data neu JavaScript. Mae hefyd yn diystyru ymddygiad sgrolio rhagosodedig ac yn cynhyrchu a .modal-backdrop
i ddarparu ardal glicio ar gyfer diystyru moddau a ddangosir wrth glicio y tu allan i'r moddol.
Trwy briodoleddau data
Ysgogi moddol heb ysgrifennu JavaScript. Gosod data-bs-toggle="modal"
ar elfen rheolydd, fel botwm, ynghyd â data-bs-target="#foo"
neu href="#foo"
i dargedu moddol penodol i toglo.
<button type="button" data-bs-toggle="modal" data-bs-target="#myModal">Launch modal</button>
Trwy JavaScript
Creu moddol gydag un llinell o JavaScript:
var myModal = new bootstrap.Modal(document.getElementById('myModal'), options)
Opsiynau
Gellir trosglwyddo opsiynau trwy briodoleddau data neu JavaScript. Ar gyfer priodoleddau data, atodwch enw'r opsiwn i data-bs-
, fel yn data-bs-backdrop=""
.
Enw | Math | Diofyn | Disgrifiad |
---|---|---|---|
backdrop |
boolean neu'r llinyn'static' |
true |
Yn cynnwys elfen foddol-cefndir. Fel arall, nodwch static ar gyfer cefndir nad yw'n cau'r modd wrth glicio. |
keyboard |
boolaidd | true |
Yn cau'r modd pan fydd allwedd dianc yn cael ei wasgu |
focus |
boolaidd | true |
Yn rhoi'r ffocws ar y modd pan gaiff ei gychwyn. |
Dulliau
Dulliau a thrawsnewidiadau anghydamserol
Mae pob dull API yn asyncronaidd ac yn dechrau cyfnod pontio . Maen nhw'n dychwelyd at y galwr cyn gynted ag y bydd y cyfnod pontio wedi dechrau ond cyn iddo ddod i ben . Yn ogystal, bydd galwad dull ar gydran trawsnewid yn cael ei anwybyddu .
Opsiynau pasio
Yn actifadu'ch cynnwys fel moddol. Yn derbyn opsiwn dewisol object
.
var myModal = new bootstrap.Modal(document.getElementById('myModal'), {
keyboard: false
})
togl
Toglo moddol â llaw. Yn dychwelyd i'r galwr cyn i'r moddol gael ei ddangos neu ei guddioshown.bs.modal
( hy cyn i'r hidden.bs.modal
digwyddiad ddigwydd).
myModal.toggle()
dangos
Yn agor moddol â llaw. Yn dychwelyd i'r galwr cyn i'r moddol gael ei ddangos (hy cyn i'r shown.bs.modal
digwyddiad ddigwydd).
myModal.show()
Hefyd, gallwch chi basio elfen DOM fel dadl y gellir ei derbyn yn y digwyddiadau moddol (fel yr relatedTarget
eiddo).
var modalToggle = document.getElementById('toggleMyModal') // relatedTarget
myModal.show(modalToggle)
cuddio
Yn cuddio moddol â llaw. Yn dychwelyd i'r galwr cyn i'r modd fod wedi'i guddio (hy cyn i'r hidden.bs.modal
digwyddiad ddigwydd).
myModal.hide()
trinDiweddariad
Ail-addaswch safle'r moddol â llaw os yw uchder y modd yn newid tra ei fod ar agor (hy rhag ofn y bydd bar sgrolio yn ymddangos).
myModal.handleUpdate()
gwared
Yn dinistrio moddol elfen. (Yn dileu data sydd wedi'i storio ar yr elfen DOM)
myModal.dispose()
caelInstance
Dull statig sy'n eich galluogi i gael yr enghraifft foddol sy'n gysylltiedig ag elfen DOM
var myModalEl = document.getElementById('myModal')
var modal = bootstrap.Modal.getInstance(myModalEl) // Returns a Bootstrap modal instance
getOrCreateInstance
Dull statig sy'n eich galluogi i gael yr enghraifft foddol yn gysylltiedig ag elfen DOM, neu greu un newydd rhag ofn na chafodd ei gychwyn
var myModalEl = document.querySelector('#myModal')
var modal = bootstrap.Modal.getOrCreateInstance(myModalEl) // Returns a Bootstrap modal instance
Digwyddiadau
Mae dosbarth moddol Bootstrap yn datgelu rhai digwyddiadau ar gyfer cysylltu â swyddogaethau moddol. Mae pob digwyddiad moddol yn cael ei danio at y moddol ei hun (hy yn y <div class="modal">
).
Math o ddigwyddiad | Disgrifiad |
---|---|
show.bs.modal |
Mae'r digwyddiad hwn yn tanio ar unwaith pan show elwir y dull enghraifft. Os caiff ei achosi gan glic, mae'r elfen a gliciwyd ar gael fel relatedTarget eiddo'r digwyddiad. |
shown.bs.modal |
Mae'r digwyddiad hwn yn cael ei danio pan fydd y moddol wedi'i wneud yn weladwy i'r defnyddiwr (bydd yn aros i'r trawsnewidiadau CSS gael eu cwblhau). Os caiff ei achosi gan glic, mae'r elfen a gliciwyd ar gael fel relatedTarget eiddo'r digwyddiad. |
hide.bs.modal |
Mae'r digwyddiad hwn yn cael ei danio ar unwaith pan fydd y hide dull enghraifft wedi'i alw. |
hidden.bs.modal |
Mae'r digwyddiad hwn yn cael ei danio pan fydd y moddol wedi gorffen cael ei guddio rhag y defnyddiwr (bydd yn aros i'r trawsnewidiadau CSS gael eu cwblhau). |
hidePrevented.bs.modal |
Mae'r digwyddiad hwn yn cael ei danio pan fydd y moddol yn cael ei ddangos, ei gefndir yw static a chlicio y tu allan i'r moddol neu wasg allwedd dianc yn cael ei berfformio gyda'r opsiwn bysellfwrdd neu data-bs-keyboard wedi'i osod i false . |
var myModalEl = document.getElementById('myModal')
myModalEl.addEventListener('hidden.bs.modal', function (event) {
// do something...
})