Мадальны
Выкарыстоўвайце мадальны плагін JavaScript ад Bootstrap, каб дадаць на ваш сайт дыялогавыя вокны для лайтбоксаў, апавяшчэнняў карыстальнікаў або цалкам карыстацкага кантэнту.
Як гэта працуе
Перш чым пачаць працу з мадальным кампанентам Bootstrap, не забудзьцеся прачытаць наступнае, паколькі нашы параметры меню нядаўна змяніліся.
- Мадальныя пабудовы створаны з дапамогай HTML, CSS і JavaScript. Яны размешчаны над усім астатнім у дакуменце і выдаляюць пракрутку,
<body>
каб замест яе пракручваўся мадальны змест. - Пры націсканні на мадальны «заднік» мадальнае аўтаматычна зачыніцца.
- Bootstrap падтрымлівае толькі адно мадальнае акно адначасова. Укладзеныя мадалы не падтрымліваюцца, бо мы лічым, што яны не спрыяюць карыстанню.
- Мадальнае выкарыстанне
position: fixed
, што часам можа быць трохі асабліва ў яго візуалізацыі. Па магчымасці размяшчайце свой мадальны HTML на верхнім узроўні, каб пазбегнуць магчымых перашкод з боку іншых элементаў. Верагодна, вы сутыкнецеся з праблемамі пры ўкладанні ў.modal
іншы фіксаваны элемент. - Яшчэ раз, з-за
position: fixed
, ёсць некаторыя засцярогі з выкарыстаннем мадалаў на мабільных прыладах. Падрабязнасці глядзіце ў дакументах падтрымкі браўзераў . - З-за таго, як HTML5 вызначае сваю семантыку, атрыбут
autofocus
HTML не мае ніякага эфекту ў мадальных варыянтах Bootstrap. Каб дасягнуць таго ж эфекту, выкарыстоўвайце карыстацкі JavaScript:
$('#myModal').on('shown.bs.modal', function () {
$('#myInput').trigger('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="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>
Жывая дэманстрацыя
Пераключыце працуючую мадальную дэманстрацыю, націснуўшы кнопку ніжэй. Ён будзе слізгаць уніз і знікаць з верхняй часткі старонкі.
<!-- 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>
Статычны фон
Калі фон усталяваны як статычны, мадальнае не будзе закрывацца пры пстрычцы па-за ім. Націсніце кнопку ніжэй, каб паспрабаваць.
<!-- 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>
Пракрутка доўгага кантэнту
Калі мадалы становяцца занадта доўгімі для вобласці прагляду або прылады карыстальніка, яны пракручваюцца незалежна ад самой старонкі. Паспрабуйце дэманстрацыю ніжэй, каб зразумець, што мы маем на ўвазе.
Вы таксама можаце стварыць пракручвальны мадальны, які дазваляе пракручваць мадальнае цела, дадаючы .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-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 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>
Вар'іраванне мадальнага зместу
У вас ёсць куча кнопак, якія запускаюць адзін і той жа рэжым з трохі розным зместам? Выкарыстоўвайце атрыбуты HTML (магчыма, event.relatedTarget
праз jQuery ), каб змяняць змесціва мадальнага элемента ў залежнасці ад таго, якая кнопка была націснута.data-*
Ніжэй жывая дэманстрацыя з прыкладамі HTML і JavaScript. Для атрымання дадатковай інфармацыі прачытайце дакументы па мадальным падзеям , каб даведацца больш пра 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)
})
Змяніць анімацыю
Пераменная вызначае стан $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').modal('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>
Выкарыстанне
Мадальны плагін пераключае ваш схаваны кантэнт па патрабаванні праз атрыбуты дадзеных або JavaScript. Гэта таксама дадае .modal-open
да <body>
перавызначэння паводзін пракруткі па змаўчанні і стварае .modal-backdrop
вобласць пстрычкі для адхілення паказаных мадалаў пры пстрычцы па-за межамі мадальнасці.
Праз атрыбуты дадзеных
Актывуйце мадальны без напісання JavaScript. Усталюйце data-toggle="modal"
элемент кантролера, напрыклад кнопку, разам з data-target="#foo"
або href="#foo"
, каб нацэліць на пэўны мадаль для пераключэння.
<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>
Праз JavaScript
Выклік мадальнага з ідэнтыфікатарам myModal
з дапамогай аднаго радка JavaScript:
$('#myModal').modal(options)
Параметры
Параметры могуць быць перададзены праз атрыбуты дадзеных або JavaScript. Для атрыбутаў дадзеных дадайце назву опцыі да data-
, як у data-backdrop=""
.
Імя | Тып | Па змаўчанні | Апісанне |
---|---|---|---|
заднік | лагічны або радок'static' |
праўда | Уключае элемент мадальнага фону. У якасці альтэрнатывы ўкажыце static для фону, які не закрывае мадальнае пры пстрычцы. |
клавіятура | лагічны | праўда | Закрывае мадальнае, калі націснута клавіша выхаду |
фокус | лагічны | праўда | Пры ініцыялізацыі акцэнтуе ўвагу на мадальным. |
паказаць | лагічны | праўда | Паказвае мадальнае пры ініцыялізацыі. |
Метады
Асінхронныя метады і пераходы
Усе метады API асінхронныя і пачынаюць пераход . Яны вяртаюцца да абанента, як толькі пачынаецца пераход, але да яго заканчэння . Акрамя таго, выклік метаду пераходнага кампанента будзе ігнаравацца .
Для атрымання дадатковай інфармацыі глядзіце нашу дакументацыю па JavaScript .
.modal(options)
Актывуе ваш кантэнт як мадальны. Прымае дадатковыя параметры object
.
$('#myModal').modal({
keyboard: false
})
.modal('toggle')
Уручную пераключае мадальнае. Вяртаецца да абанента да таго, як мадальны параметр будзе паказаны або схаваны (г.зн. да таго , як адбудзецца падзея shown.bs.modal
або ).hidden.bs.modal
$('#myModal').modal('toggle')
.modal('show')
Уручную адкрывае мадальнае. Вяртаецца да абанента да таго, як мадальны параметр быў фактычна паказаны (г.зн. да таго , як shown.bs.modal
адбудзецца падзея).
$('#myModal').modal('show')
.modal('hide')
Уручную хавае мадальнае. Вяртаецца да абанента да таго, як мадальны параметр быў фактычна схаваны (г.зн. да таго, як hidden.bs.modal
адбылася падзея).
$('#myModal').modal('hide')
.modal('handleUpdate')
Уручную адрэгулюйце пазіцыю мадаля, калі вышыня мадала змяняецца, калі ён адкрыты (напрыклад, калі з'яўляецца паласа пракруткі).
$('#myModal').modal('handleUpdate')
.modal('dispose')
Знішчае мадальнасць элемента.
Падзеі
Мадальны клас Bootstrap паказвае некалькі падзей для падключэння да мадальнай функцыянальнасці. Усе мадальныя падзеі запускаюцца ў сам мадальны (г.зн. у <div class="modal">
).
Тып падзеі | Апісанне |
---|---|
show.bs.modal | Гэта падзея запускаецца неадкладна пры show выкліку метаду асобніка. Калі гэта выклікана пстрычкай, націснуты элемент даступны як relatedTarget уласцівасць падзеі. |
паказаны.bs.modal | Гэта падзея запускаецца, калі мадальны элемент становіцца бачным для карыстальніка (будзе чакаць завяршэння пераходаў CSS). Калі гэта выклікана пстрычкай, націснуты элемент даступны як relatedTarget уласцівасць падзеі. |
hide.bs.modal | Гэта падзея запускаецца адразу пасля hide выкліку метаду асобніка. |
схаваны.bs.мадальны | Гэта падзея запускаецца, калі мадальны элемент перастае быць схаваным ад карыстальніка (будзе чакаць завяршэння пераходаў CSS). |
hidePrevented.bs.modal | Гэта падзея запускаецца, калі паказаны мадальны, яго фон static і пстрычка па-за мадальным або націсканне клавішы выхаду з дапамогай опцыі клавіятуры або data-keyboard ўстаноўлена ў false . |
$('#myModal').on('hidden.bs.modal', function (event) {
// do something...
})