Source

Мадальны

Выкарыстоўвайце мадальны плагін JavaScript ад Bootstrap, каб дадаць на ваш сайт дыялогавыя вокны для лайтбоксаў, апавяшчэнняў карыстальнікаў або цалкам карыстацкага кантэнту.

Як гэта працуе

Перш чым пачаць працу з мадальным кампанентам Bootstrap, не забудзьцеся прачытаць наступнае, паколькі нашы параметры меню нядаўна змяніліся.

  • Мадальныя пабудовы створаны з дапамогай HTML, CSS і JavaScript. Яны размешчаны над усім астатнім у дакуменце і выдаляюць пракрутку, <body>каб замест яе пракручваўся мадальны змест.
  • Пры націсканні на мадальны «заднік» мадальнае аўтаматычна зачыніцца.
  • Bootstrap падтрымлівае толькі адно мадальнае акно адначасова. Укладзеныя мадалы не падтрымліваюцца, бо мы лічым, што яны не спрыяюць карыстанню.
  • Мадальнае выкарыстанне position: fixed, што часам можа быць трохі асабліва ў яго візуалізацыі. Па магчымасці размяшчайце свой мадальны HTML на верхнім узроўні, каб пазбегнуць магчымых перашкод з боку іншых элементаў. Верагодна, вы сутыкнецеся з праблемамі пры ўкладанні ў .modalіншы фіксаваны элемент.
  • Яшчэ раз, з-за position: fixed, ёсць некаторыя засцярогі з выкарыстаннем мадалаў на мабільных прыладах. Падрабязнасці глядзіце ў дакументах падтрымкі браўзераў .
  • З-за таго, як HTML5 вызначае сваю семантыку, атрыбут autofocusHTML не мае ніякага эфекту ў мадальных варыянтах Bootstrap. Каб дасягнуць таго ж эфекту, выкарыстоўвайце карыстацкі JavaScript:
$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').trigger('focus')
})

Анімацыйны эфект гэтага кампанента залежыць ад prefers-reduced-motionмедыя-запыту. Глядзіце раздзел аб паменшаным руху нашай дакументацыі па спецыяльных магчымасцях .

Працягвайце чытаць дэманстрацыі і рэкамендацыі па выкарыстанні.

Прыклады

Ніжэй прыведзены статычны мадальны прыклад (гэта значыць, што positionі displayбылі перавызначаны). Уключаны мадальны загаловак, мадальны тэкст (неабходны для padding) і мадальны ніжні калонтытул (неабавязковы). Мы просім вас уключаць мадальныя загалоўкі з дзеяннямі адхілення кожны раз, калі гэта магчыма, або прадставіць іншае відавочнае дзеянне адхілення.

<div class="modal" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <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">&times;</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" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <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">&times;</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" tabindex="-1" role="dialog" aria-labelledby="staticBackdropLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <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">&times;</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>

Пракрутка доўгага кантэнту

Калі мадалы становяцца занадта доўгімі для вобласці прагляду або прылады карыстальніка, яны пракручваюцца незалежна ад самой старонкі. Паспрабуйце дэманстрацыю ніжэй, каб зразумець, што мы маем на ўвазе.

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalLong">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModalLong" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</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>

Вы таксама можаце стварыць пракручвальны мадальны, які дазваляе пракручваць мадальнае цела, дадаючы .modal-dialog-scrollableда .modal-dialog.

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalScrollable">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModalScrollable" tabindex="-1" role="dialog" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalScrollableTitle">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</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>

Вертыкальна па цэнтры

Дадайце .modal-dialog-centeredда, .modal-dialogкаб вертыкальна адцэнтраваць мадальны.

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalCenterTitle">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</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>

Падказкі і ўсплывальныя падказкі

Усплывальныя падказкі і ўсплывальныя вобразы можна размясціць у межах мадалаў пры неабходнасці. Пры закрыцці мадалаў любыя ўсплывальныя падказкі і ўсплывальныя вокны таксама аўтаматычна адхіляюцца.

<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" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <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">&times;</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" role="dialog" aria-labelledby="..." aria-hidden="true">
  ...
</div>

Дынамічныя вышыні

Калі вышыня мадалю змяняецца, пакуль ён адкрыты, вы павінны выклікаць $('#myModal').modal('handleUpdate'), каб адрэгуляваць пазіцыю мадала ў выпадку з'яўлення паласы пракруткі.

Даступнасць

Не забудзьцеся дадаць role="dialog"і aria-labelledby="...", спасылаючыся на мадальны загаловак, да .modalі role="document"да самога .modal-dialogсябе. Акрамя таго, вы можаце даць апісанне вашага мадальнага дыялогу з aria-describedbyon .modal.

Ўбудаванне відэа YouTube

Убудаванне відэа YouTube у мадальныя формы патрабуе дадатковага JavaScript не ў Bootstrap для аўтаматычнай прыпынку прайгравання і шмат іншага. Глядзіце гэты карысны пост Stack Overflow для атрымання дадатковай інфармацыі.

Дадатковыя памеры

У мадалаў ёсць тры неабавязковыя памеры, даступныя праз класы-мадыфікатары для размяшчэння на .modal-dialog. Гэтыя памеры ўзнікаюць у пэўных кропках разрыву, каб пазбегнуць гарызантальных палос пракруткі ў вузкіх акнах прагляду.

Памер Клас Мадальная максімальная шырыня
Маленькі .modal-sm 300px
Па змаўчанні Няма 500px
Вялікі .modal-lg 800px
Вельмі вялікі .modal-xl 1140px

Наш стандартны мадальны клас без мадыфікатара ўяўляе сабой мадальны "сярэдняга" памеру.

<!-- Extra large modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-xl">Extra large modal</button>

<div class="modal fade bd-example-modal-xl" tabindex="-1" role="dialog" aria-labelledby="myExtraLargeModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-xl" role="document">
    <div class="modal-content">
      ...
    </div>
  </div>
</div>

<!-- Large modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-lg">Large modal</button>

<div class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-lg" role="document">
    <div class="modal-content">
      ...
    </div>
  </div>
</div>

<!-- Small modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-sm">Small modal</button>

<div class="modal fade bd-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-sm" role="document">
    <div class="modal-content">
      ...
    </div>
  </div>
</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і пстрычка па-за мадальным або націсканне клавішы выхаду.
$('#myModal').on('hidden.bs.modal', function (e) {
  // do something...
})