Мадальны
Выкарыстоўвайце мадальны плагін JavaScript ад Bootstrap, каб дадаць на ваш сайт дыялогавыя вокны для лайтбоксаў, апавяшчэнняў карыстальнікаў або цалкам карыстацкага кантэнту.
Як гэта працуе
Перш чым пачаць працу з мадальным кампанентам Bootstrap, не забудзьцеся прачытаць наступнае, паколькі нашы параметры меню нядаўна змяніліся.
- Мадальныя пабудовы створаны з дапамогай HTML, CSS і JavaScript. Яны размешчаны над усім астатнім у дакуменце і выдаляюць пракрутку,
<body>
каб замест яе пракручваўся мадальны змест. - Пры націсканні на мадальны «заднік» мадальнае аўтаматычна зачыніцца.
- Bootstrap падтрымлівае толькі адно мадальнае акно адначасова. Укладзеныя мадалы не падтрымліваюцца, бо мы лічым, што яны не спрыяюць карыстанню.
- Мадальнае выкарыстанне
position: fixed
, што часам можа быць трохі асабліва ў яго візуалізацыі. Па магчымасці размяшчайце свой мадальны HTML на верхнім узроўні, каб пазбегнуць магчымых перашкод з боку іншых элементаў. Верагодна, вы сутыкнецеся з праблемамі пры ўкладанні ў.modal
іншы фіксаваны элемент. - Яшчэ раз, з-за
position: fixed
, ёсць некаторыя засцярогі з выкарыстаннем мадалаў на мабільных прыладах. Падрабязнасці глядзіце ў дакументах падтрымкі браўзераў . - З-за таго, як HTML5 вызначае сваю семантыку, атрыбут
autofocus
HTML не мае ніякага эфекту ў мадальных варыянтах Bootstrap. Каб дасягнуць таго ж эфекту, выкарыстоўвайце карыстацкі JavaScript:
var myModal = document.getElementById('myModal')
var myInput = document.getElementById('myInput')
myModal.addEventListener('shown.bs.modal', function () {
myInput.focus()
})
prefers-reduced-motion
медыя-запыту. Глядзіце раздзел аб
паменшаным руху нашай дакументацыі па спецыяльных магчымасцях .
Працягвайце чытаць дэманстрацыі і рэкамендацыі па выкарыстанні.
Прыклады
Мадальныя кампаненты
Ніжэй прыведзены статычны мадальны прыклад (гэта значыць, што position
і display
былі перавызначаны). Уключаны мадальны загаловак, мадальны тэкст (неабходны для padding
) і мадальны ніжні калонтытул (неабавязковы). Мы просім вас уключаць мадальныя загалоўкі з дзеяннямі адхілення кожны раз, калі гэта магчыма, або прадставіць іншае відавочнае дзеянне адхілення.
<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>
Жывая дэманстрацыя
Пераключыце працуючую мадальную дэманстрацыю, націснуўшы кнопку ніжэй. Ён будзе слізгаць уніз і знікаць з верхняй часткі старонкі.
<!-- 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>
Статычны фон
Калі фон усталяваны як статычны, мадальнае не будзе закрывацца пры пстрычцы па-за ім. Націсніце кнопку ніжэй, каб паспрабаваць.
<!-- 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>
Пракрутка доўгага кантэнту
Калі мадалы становяцца занадта доўгімі для вобласці прагляду або прылады карыстальніка, яны пракручваюцца незалежна ад самой старонкі. Паспрабуйце дэманстрацыю ніжэй, каб зразумець, што мы маем на ўвазе.
Вы таксама можаце стварыць пракручвальны мадальны, які дазваляе пракручваць мадальнае цела, дадаючы .modal-dialog-scrollable
да .modal-dialog
.
<!-- Scrollable modal -->
<div class="modal-dialog modal-dialog-scrollable">
...
</div>
Вертыкальна па цэнтры
Дадайце .modal-dialog-centered
да, .modal-dialog
каб вертыкальна адцэнтраваць мадальны.
<!-- 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>
Падказкі і ўсплывальныя падказкі
Усплывальныя падказкі і ўсплывальныя вобразы можна размясціць у межах мадалаў пры неабходнасці. Пры закрыцці мадалаў любыя ўсплывальныя падказкі і ўсплывальныя вокны таксама аўтаматычна адхіляюцца.
<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>
Выкарыстанне сеткі
Выкарыстоўвайце сеткавую сістэму Bootstrap у мадальным выглядзе, укладваючы .container-fluid
ў .modal-body
. Затым выкарыстоўвайце нармальныя класы сеткі, як і ў любым іншым месцы.
<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>
Вар'іраванне мадальнага зместу
У вас ёсць куча кнопак, якія запускаюць адзін і той жа рэжым з трохі розным зместам? Выкарыстоўвайце атрыбутыevent.relatedTarget
і HTMLdata-bs-*
, каб змяняць змесціва мадальнага ў залежнасці ад таго, якую кнопку націснулі.
Ніжэй жывая дэманстрацыя з прыкладамі HTML і JavaScript. Для атрымання дадатковай інфармацыі прачытайце дакументы па мадальным падзеям , каб даведацца больш пра 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
})
Пераключэнне паміж мадальнымі
Пераключайцеся паміж некалькімі мадальнымі параметрамі з дапамогай разумнага размяшчэння атрыбутаў data-bs-target
і . data-bs-toggle
Напрыклад, вы можаце пераключыць рэжым скіду пароля з ужо адкрытага рэжыму ўваходу. Звярніце ўвагу, што некалькі мадалаў не могуць быць адкрыты адначасова — гэты метад проста пераключаецца паміж двума асобнымі мадаламі.
<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>
Змяніць анімацыю
Пераменная вызначае стан $modal-fade-transform
трансфармацыі .modal-dialog
перад мадальнай анімацыяй з плынню, $modal-show-transform
зменная вызначае трансфармацыю .modal-dialog
ў канцы мадальнай анімацыі з плынню.
Калі вы хочаце, напрыклад, павялічыць анімацыю, вы можаце ўсталяваць $modal-fade-transform: scale(.8)
.
Выдаліць анімацыю
Для мадалаў, якія проста з'яўляюцца, а не знікаюць для прагляду, выдаліце .fade
клас з вашай мадальнай разметкі.
<div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
...
</div>
Дынамічныя вышыні
Калі вышыня мадалю змяняецца, пакуль ён адкрыты, вы павінны выклікаць myModal.handleUpdate()
, каб адрэгуляваць пазіцыю мадала ў выпадку з'яўлення паласы пракруткі.
Даступнасць
Абавязкова дадайце aria-labelledby="..."
, спасылаючыся на мадальны загаловак, у .modal
. Акрамя таго, вы можаце даць апісанне вашага мадальнага дыялогу з aria-describedby
on .modal
. Звярніце ўвагу, што вам не трэба дадаваць, role="dialog"
бо мы ўжо дадаем гэта праз JavaScript.
Убудаванне відэа з YouTube
Убудаванне відэа YouTube у мадальныя формы патрабуе дадатковага JavaScript не ў Bootstrap для аўтаматычнай прыпынку прайгравання і шмат іншага. Глядзіце гэты карысны пост Stack Overflow для атрымання дадатковай інфармацыі.
Дадатковыя памеры
У мадалаў ёсць тры неабавязковыя памеры, даступныя праз класы-мадыфікатары для размяшчэння на .modal-dialog
. Гэтыя памеры ўзнікаюць у пэўных кропках разрыву, каб пазбегнуць гарызантальных палос пракруткі ў вузкіх акнах прагляду.
Памер | Клас | Мадальная максімальная шырыня |
---|---|---|
Маленькі | .modal-sm |
300px |
Па змаўчанні | Няма | 500px |
Вялікі | .modal-lg |
800px |
Вельмі вялікі | .modal-xl |
1140px |
Наш стандартны мадальны клас без мадыфікатара ўяўляе сабой мадальны "сярэдняга" памеру.
<div class="modal-dialog modal-xl">...</div>
<div class="modal-dialog modal-lg">...</div>
<div class="modal-dialog modal-sm">...</div>
Поўнаэкранны рэжым
Яшчэ адно перавызначэнне - магчымасць выскоквання мадальнага акна, якое ахоплівае акно прагляду карыстальніка, даступнае праз класы-мадыфікатары, размешчаныя на .modal-dialog
.
Клас | Даступнасць |
---|---|
.modal-fullscreen |
Заўсёды |
.modal-fullscreen-sm-down |
Ніжэй576px |
.modal-fullscreen-md-down |
Ніжэй768px |
.modal-fullscreen-lg-down |
Ніжэй992px |
.modal-fullscreen-xl-down |
Ніжэй1200px |
.modal-fullscreen-xxl-down |
Ніжэй1400px |
<!-- Full screen modal -->
<div class="modal-dialog modal-fullscreen-sm-down">
...
</div>
Сас
Пераменныя
$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);
Пятля
Спагадныя поўнаэкранныя рэжымы ствараюцца з дапамогай $breakpoints
карты і цыкла 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);
}
}
}
}
Выкарыстанне
Мадальны плагін пераключае ваш схаваны кантэнт па патрабаванні праз атрыбуты дадзеных або JavaScript. Ён таксама перавызначае паводзіны пракруткі па змаўчанні і стварае , .modal-backdrop
каб забяспечыць вобласць пстрычкі для адхілення паказаных мадалаў пры пстрычцы па-за межамі мадальнасці.
Праз атрыбуты дадзеных
Пераключыць
Актывуйце мадальнае без напісання JavaScript. Усталюйце data-bs-toggle="modal"
элемент кантролера, напрыклад кнопку, разам з data-bs-target="#foo"
або href="#foo"
, каб нацэліць на пэўны мадаль для пераключэння.
<button type="button" data-bs-toggle="modal" data-bs-target="#myModal">Launch modal</button>
Звольніць
Адхіленне можа быць дасягнута з дапамогай data
атрыбута на кнопцы ў мадальным , як паказана ніжэй:
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
або на кнопцы па-за мадальным , выкарыстоўваючы, data-bs-target
як паказана ніжэй:
<button type="button" class="btn-close" data-bs-dismiss="modal" data-bs-target="#my-modal" aria-label="Close"></button>
Праз JavaScript
Стварыце мадальнае з дапамогай аднаго радка JavaScript:
var myModal = new bootstrap.Modal(document.getElementById('myModal'), options)
Параметры
Параметры могуць быць перададзены праз атрыбуты дадзеных або JavaScript. Для атрыбутаў дадзеных дадайце назву опцыі да data-bs-
, як у data-bs-backdrop=""
.
Імя | Тып | Па змаўчанні | Апісанне |
---|---|---|---|
backdrop |
лагічны або радок'static' |
true |
Уключае элемент мадальнага фону. У якасці альтэрнатывы ўкажыце static для фону, які не закрывае мадальнае пры пстрычцы. |
keyboard |
лагічны | true |
Закрывае мадальнае, калі націснута клавіша выхаду |
focus |
лагічны | true |
Пры ініцыялізацыі акцэнтуе ўвагу на мадальным. |
Метады
Асінхронныя метады і пераходы
Усе метады API асінхронныя і пачынаюць пераход . Яны вяртаюцца да абанента, як толькі пачынаецца пераход, але да яго заканчэння . Акрамя таго, выклік метаду пераходнага кампанента будзе ігнаравацца .
Для атрымання дадатковай інфармацыі глядзіце нашу дакументацыю па JavaScript .
Варыянты праходжання
Актывуе ваш кантэнт як мадальны. Прымае дадатковыя параметры object
.
var myModal = new bootstrap.Modal(document.getElementById('myModal'), {
keyboard: false
})
пераключаць
Уручную пераключае мадальнае. Вяртаецца да выклікаючага да таго, як мадальны параметр быў фактычна паказаны або схаваны (г.зн. да таго , як адбудзецца падзея shown.bs.modal
або ).hidden.bs.modal
myModal.toggle()
паказаць
Уручную адкрывае мадальнае. Вяртаецца да абанента да таго, як мадальны параметр быў фактычна паказаны (г.зн. да таго , як shown.bs.modal
адбудзецца падзея).
myModal.show()
Акрамя таго, вы можаце перадаць элемент DOM у якасці аргумента, які можна атрымаць у мадальных падзеях (у якасці relatedTarget
ўласцівасці).
var modalToggle = document.getElementById('toggleMyModal') // relatedTarget
myModal.show(modalToggle)
схаваць
Уручную хавае мадальнае. Вяртаецца да абанента да таго, як мадальны параметр быў фактычна схаваны (г.зн. да таго, як hidden.bs.modal
адбылася падзея).
myModal.hide()
handleUpdate
Уручную адрэгулюйце пазіцыю мадаля, калі вышыня мадала змяняецца, калі ён адкрыты (напрыклад, калі з'яўляецца паласа пракруткі).
myModal.handleUpdate()
распараджацца
Знішчае мадальнасць элемента. (Выдаляе захаваныя даныя ў элеменце DOM)
myModal.dispose()
getInstance
Статычны метад, які дазваляе вам атрымаць мадальны асобнік, звязаны з элементам DOM
var myModalEl = document.getElementById('myModal')
var modal = bootstrap.Modal.getInstance(myModalEl) // Returns a Bootstrap modal instance
getOrCreateInstance
Статычны метад, які дазваляе вам атрымаць мадальны асобнік, звязаны з элементам DOM, або стварыць новы, калі ён не быў ініцыялізаваны
var myModalEl = document.querySelector('#myModal')
var modal = bootstrap.Modal.getOrCreateInstance(myModalEl) // Returns a Bootstrap modal instance
Падзеі
Мадальны клас Bootstrap паказвае некалькі падзей для падключэння да мадальнай функцыянальнасці. Усе мадальныя падзеі запускаюцца ў сам мадальны (г.зн. у <div class="modal">
).
Тып падзеі | Апісанне |
---|---|
show.bs.modal |
Гэта падзея запускаецца неадкладна пры show выкліку метаду асобніка. Калі гэта выклікана пстрычкай, націснуты элемент даступны як relatedTarget уласцівасць падзеі. |
shown.bs.modal |
Гэта падзея запускаецца, калі мадальны элемент становіцца бачным для карыстальніка (будзе чакаць завяршэння пераходаў CSS). Калі гэта выклікана пстрычкай, націснуты элемент даступны як relatedTarget уласцівасць падзеі. |
hide.bs.modal |
Гэта падзея запускаецца неадкладна, калі hide быў выкліканы метад асобніка. |
hidden.bs.modal |
Гэта падзея запускаецца, калі мадальны элемент перастае быць схаваным ад карыстальніка (будзе чакаць завяршэння пераходаў CSS). |
hidePrevented.bs.modal |
Гэта падзея запускаецца, калі паказаны мадальны, яго фон static і пстрычка па-за мадальным або націсканне клавішы выхаду з дапамогай опцыі клавіятуры або data-bs-keyboard ўстаноўлена ў false . |
var myModalEl = document.getElementById('myModal')
myModalEl.addEventListener('hidden.bs.modal', function (event) {
// do something...
})