Перейти до основного вмісту Перейти до навігації документами
Check
in English

Поповери

Документація та приклади додавання спливаючих вікон Bootstrap, подібних до тих, що є в iOS, до будь-якого елемента на вашому сайті.

Огляд

Що потрібно знати під час використання плагіна Popover:

  • Popovers покладаються на сторонню бібліотеку Popper для позиціонування. Ви повинні включити popper.min.js перед bootstrap.jsабо використовувати той, bootstrap.bundle.min.jsякий містить Popper.
  • Поповерам потрібен плагін popover як залежність.
  • Поповерси можна використовувати з міркувань продуктивності, тому ви повинні ініціалізувати їх самостійно .
  • Нульова довжина titleта contentзначення ніколи не показуватимуть спливаюче зображення.
  • Укажіть container: 'body', щоб уникнути проблем із відтворенням у більш складних компонентах (як-от наші групи вводу, групи кнопок тощо).
  • Запуск спливаючих вікон на прихованих елементах не працюватиме.
  • Поповер для елементів .disabledабо має запускатися на елементі-оболонці.disabled
  • Коли запускаються з прив’язок, які перетинають кілька ліній, спливаючі елементи будуть зосереджені між загальною шириною прив’язок. Використовуйте .text-nowrapна вашому <a>s, щоб уникнути такої поведінки.
  • Поповери мають бути приховані до того, як їхні відповідні елементи будуть видалені з DOM.
  • Поповер можна активувати завдяки елементу в тіньовому DOM.
За замовчуванням цей компонент використовує вбудований засіб очищення вмісту, який видаляє будь-які елементи HTML, які явно не дозволені. Щоб отримати докладніші відомості , перегляньте розділ дезінфікуючого засобу в нашій документації JavaScript .
Ефект анімації цього компонента залежить від prefers-reduced-motionмедіа-запиту. Перегляньте розділ про обмежений рух нашої документації щодо спеціальних можливостей .

Продовжуйте читати, щоб побачити, як працюють спливаючі кнопки з деякими прикладами.

Приклади

Увімкнути спливаючі вікна

Як згадувалося вище, ви повинні ініціалізувати спливаючі кнопки, перш ніж їх можна буде використовувати. Одним зі способів ініціалізації всіх спливаючих вікон на сторінці було б вибрати їх за їхнім data-bs-toggleатрибутом, наприклад:

const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))

Жива демонстрація

Ми використовуємо JavaScript, подібний до наведеного вище фрагмента, для відтворення наступного живого спливаючого зображення. Заголовки встановлюються за допомогою , data-bs-titleа основний вміст – за допомогою data-bs-content.

Не соромтеся використовувати або titleабо data-bs-titleу своєму HTML. Коли titleвикористовується, Поппер автоматично замінить його на data-bs-titleпід час візуалізації елемента.
html
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" data-bs-title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>

Чотири напрямки

Доступні чотири варіанти: зверху, справа, знизу та зліва. Напрямки віддзеркалюються під час використання Bootstrap у RTL. Встановити data-bs-placementзміну напрямку.

html
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
  Popover on top
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
  Popover on right
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
  Popover on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
  Popover on left
</button>

Customcontainer

Якщо у вашому батьківському елементі є деякі стилі, які заважають спливаючому вікну, ви захочете вказати настроюваний container, щоб HTML-код спливаючого елемента з’являвся в цьому елементі. Це часто зустрічається в адаптивних таблицях, групах введення тощо.

const popover = new bootstrap.Popover('.example-popover', {
  container: 'body'
})

Іншою ситуацією, коли ви захочете встановити явні налаштування, containerє спливні вікна всередині модального діалогового вікна , щоб переконатися, що сам спливний повер додається до модального. Це особливо важливо для спливаючих вікон, які містять інтерактивні елементи – модальні діалогові вікна блокуватимуть фокус, тому, якщо спливне вікно не є дочірнім елементом модального, користувачі не зможуть сфокусуватися або активувати ці інтерактивні елементи.

const popover = new bootstrap.Popover('.example-popover', {
  container: '.modal-body'
})

Спеціальні поповери

Додано у v5.2.0

Ви можете налаштувати вигляд спливаючих вікон за допомогою змінних CSS . Ми встановлюємо спеціальний клас, data-bs-custom-class="custom-popover"щоб охопити наш зовнішній вигляд і використовувати його для заміни деяких локальних змінних CSS.

.custom-popover {
  --bs-popover-max-width: 200px;
  --bs-popover-border-color: var(--bs-primary);
  --bs-popover-header-bg: var(--bs-primary);
  --bs-popover-header-color: var(--bs-white);
  --bs-popover-body-padding-x: 1rem;
  --bs-popover-body-padding-y: .5rem;
}
html
<button type="button" class="btn btn-secondary"
        data-bs-toggle="popover" data-bs-placement="right"
        data-bs-custom-class="custom-popover"
        data-bs-title="Custom popover"
        data-bs-content="This popover is themed via CSS variables.">
  Custom popover
</button>

Відхилити після наступного натискання

Використовуйте focusтригер, щоб закрити спливаючі вікна під час наступного натискання користувачем іншого елемента, ніж елемент перемикання.

Спеціальна розмітка потрібна для відхилення при наступному клацанні

Для належної поведінки між браузерами та платформами ви повинні використовувати <a>тег, а не<button> тег, і ви також повинні включити tabindexатрибут.

html
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
const popover = new bootstrap.Popover('.popover-dismiss', {
  trigger: 'focus'
})

Відключені елементи

Елементи з disabledатрибутом не є інтерактивними, тобто користувачі не можуть наводити курсор або клацати на них, щоб викликати спливаюче вікно (або спливаючу підказку). Як обхідний шлях, ви захочете запустити спливаюче вікно з обгортки <div>або <span>, в ідеалі, з можливістю фокусування клавіатури за допомогою tabindex="0".

Для вимкнених тригерів спливаючого вікна ви також можете віддати перевагу data-bs-trigger="hover focus"тому, щоб спливаюче вікно з’являлося як негайний візуальний зворотний зв’язок для ваших користувачів, оскільки вони можуть не очікувати клацання вимкненого елемента.

html
<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
  <button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>

CSS

Змінні

Додано у v5.2.0

Як частина змінного підходу Bootstrap до змінних CSS, у спливаючих вікнах тепер використовуються локальні змінні CSS .popoverдля покращеного налаштування в реальному часі. Значення для змінних CSS встановлюються через Sass, тому налаштування Sass все ще підтримується.

  --#{$prefix}popover-zindex: #{$zindex-popover};
  --#{$prefix}popover-max-width: #{$popover-max-width};
  @include rfs($popover-font-size, --#{$prefix}popover-font-size);
  --#{$prefix}popover-bg: #{$popover-bg};
  --#{$prefix}popover-border-width: #{$popover-border-width};
  --#{$prefix}popover-border-color: #{$popover-border-color};
  --#{$prefix}popover-border-radius: #{$popover-border-radius};
  --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};
  --#{$prefix}popover-box-shadow: #{$popover-box-shadow};
  --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};
  --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};
  @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);
  --#{$prefix}popover-header-color: #{$popover-header-color};
  --#{$prefix}popover-header-bg: #{$popover-header-bg};
  --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};
  --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};
  --#{$prefix}popover-body-color: #{$popover-body-color};
  --#{$prefix}popover-arrow-width: #{$popover-arrow-width};
  --#{$prefix}popover-arrow-height: #{$popover-arrow-height};
  --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);
  

Змінні Sass

$popover-font-size:                 $font-size-sm;
$popover-bg:                        $white;
$popover-max-width:                 276px;
$popover-border-width:              $border-width;
$popover-border-color:              var(--#{$prefix}border-color-translucent);
$popover-border-radius:             $border-radius-lg;
$popover-inner-border-radius:       subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow:                $box-shadow;

$popover-header-font-size:          $font-size-base;
$popover-header-bg:                 shade-color($popover-bg, 6%);
$popover-header-color:              $headings-color;
$popover-header-padding-y:          .5rem;
$popover-header-padding-x:          $spacer;

$popover-body-color:                $body-color;
$popover-body-padding-y:            $spacer;
$popover-body-padding-x:            $spacer;

$popover-arrow-width:               1rem;
$popover-arrow-height:              .5rem;

Використання

Увімкнути спливаючі вікна через JavaScript:

const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)

Зробіть так, щоб спливаючі кнопки працювали для користувачів клавіатури та допоміжних технологій

Щоб дозволити користувачам клавіатури активувати ваші спливаючі елементи, ви повинні додавати їх лише до елементів HTML, які традиційно фокусуються клавіатурою та є інтерактивними (наприклад, посилання або елементи керування формою). Хоча довільні HTML-елементи (такі як <span>s) можна зробити доступними для фокусування, додавши tabindex="0"атрибут, це додасть потенційно дратівливі та заплутані позиції табуляції на неінтерактивних елементах для користувачів клавіатури, і більшість допоміжних технологій наразі не повідомляють вміст спливаючого вікна в цій ситуації . Крім того, не покладайтеся лише на hoverтригер для ваших спливаючих повернень, оскільки це унеможливить їх ініціювання для користувачів клавіатури.

Хоча ви можете вставляти насичений, структурований HTML у спливаючих вікнах за допомогою цієї htmlопції, ми наполегливо рекомендуємо вам уникати додавання надмірної кількості вмісту. Те, як спливаючі елементи зараз працюють, полягає в тому, що після відображення їхній вміст прив’язується до тригерного елемента за допомогою aria-describedbyатрибута. У результаті весь вміст popover буде оголошено користувачам допоміжних технологій як один довгий безперервний потік.

Крім того, хоча можна також включити інтерактивні елементи керування (такі як елементи форми чи посилання) до вашого спливаючого вікна (шляхом додавання цих елементів до allowListдозволених атрибутів і тегів), майте на увазі, що наразі спливне вікно не керує порядком фокусування клавіатури. Коли користувач клавіатури відкриває спливаюче вікно, фокус залишається на елементі запуску, і оскільки спливаюче вікно зазвичай не слідує відразу за тригером у структурі документа, немає гарантії, що переміщення вперед/натисканняTABперемістить користувача клавіатури до самого спливаючого вікна. Коротше кажучи, просте додавання інтерактивних елементів керування до спливаючого вікна, ймовірно, зробить ці елементи керування недоступними/непридатними для користувачів клавіатури та допоміжних технологій або, принаймні, призведе до нелогічного загального порядку фокусування. У таких випадках краще використовувати модальне діалогове вікно.

Опції

Оскільки параметри можна передати через атрибути даних або JavaScript, ви можете додати назву параметра до data-bs-, як у data-bs-animation="{value}". Обов’язково змініть тип регістру назви параметра з « camelCase » на « kebab-case » під час передачі параметрів через атрибути даних. Наприклад, використовуйте data-bs-custom-class="beautifier"замість data-bs-customClass="beautifier".

Починаючи з Bootstrap 5.2.0, усі компоненти підтримують експериментальний зарезервований атрибут даних data-bs-config, який може зберігати просту конфігурацію компонента як рядок JSON. Якщо елемент має атрибути data-bs-config='{"delay":0, "title":123}'і data-bs-title="456", остаточне titleзначення буде таким, 456а окремі атрибути даних замінять значення, надані в data-bs-config. Крім того, наявні атрибути даних можуть містити такі значення JSON, як data-bs-delay='{"show":0,"hide":150}'.

Зауважте, що з міркувань безпеки параметри sanitize, sanitizeFn, і allowListне можуть бути надані за допомогою атрибутів даних.
Ім'я Тип За замовчуванням опис
allowList об'єкт Значення за замовчуванням Об'єкт, який містить дозволені атрибути та теги.
animation логічний true Застосуйте CSS-зникнення переходу до спливаючого вікна.
boundary рядок, елемент 'clippingParents' Межа обмеження переповнення спливного вікна (застосовується лише до модифікатора preventOverflow Попера). За замовчуванням він 'clippingParents'приймає і може приймати посилання HTMLElement (тільки через JavaScript). Для отримання додаткової інформації зверніться до документів Popper's detectOverflow .
container рядок, елемент, false false Додає спливаюче вікно до певного елемента. Приклад: container: 'body'. Ця опція особливо корисна тим, що дозволяє розташувати спливне вікно в потоці документа поруч із ініціюючим елементом, що запобігатиме відпливу спливного вікна від ініціального елемента під час зміни розміру вікна.
content рядок, елемент, функція '' Значення вмісту за умовчанням, якщо data-bs-contentатрибут відсутній. Якщо задано функцію, її буде викликано з thisпосиланням на елемент, до якого приєднано спливаюче зображення.
customClass рядок, функція '' Додайте класи до спливаючого вікна, коли воно відображається. Зауважте, що ці класи буде додано на додаток до будь-яких класів, указаних у шаблоні. Щоб додати кілька класів, розділіть їх пробілами: 'class-1 class-2'. Ви також можете передати функцію, яка повинна повертати один рядок, що містить імена додаткових класів.
delay число, предмет 0 Затримка показу та приховування спливаючого вікна (мс) — не застосовується до типу тригера вручну. Якщо вказано число, затримка застосовується як для приховування, так і для показу. Структура об'єкта: delay: { "show": 500, "hide": 100 }.
fallbackPlacements рядок, масив ['top', 'right', 'bottom', 'left'] Визначте резервні місця розташування, надавши список місць розташування в масиві (у порядку переваги). Для отримання додаткової інформації зверніться до документів про поведінку Поппера .
html логічний false Дозволити HTML у спливаючому вікні. Якщо значення true, теги HTML у спливаючих вікнах titleвідображатимуться у спливаючих вікнах. Якщо значення false, innerTextвластивість використовуватиметься для вставки вмісту в DOM. Використовуйте текст, якщо вас турбують атаки XSS.
offset число, рядок, функція [0, 0] Зміщення спливного вікна відносно його цілі. Ви можете передати рядок в атрибутах даних зі значеннями, розділеними комами, наприклад: data-bs-offset="10,20". Коли функція використовується для визначення зміщення, вона викликається з об’єктом, що містить розміщення поппера, посилання та прямокутники поппера як перший аргумент. Вузол DOM тригерного елемента передається як другий аргумент. Функція має повертати масив із двома числами: занос , відстань . Для отримання додаткової інформації зверніться до офсетної документації Поппера .
placement рядок, функція 'top' Як розташувати спливаюче вікно: автоматично, зверху, знизу, зліва, справа. Якщо autoвказано, він динамічно переорієнтує спливне вікно. Коли функція використовується для визначення розміщення, вона викликається зі спливаючим вузлом DOM як першим аргументом і ініціюючим елементом DOM вузлом як другим. Контекст thisвстановлено для екземпляра спливаючого вікна.
popperConfig null, об'єкт, функція null Щоб змінити конфігурацію Popper Bootstrap за замовчуванням, перегляньте конфігурацію Popper . Коли функція використовується для створення конфігурації Popper, вона викликається з об’єктом, який містить стандартну конфігурацію Popper Bootstrap. Це допоможе вам використовувати та об’єднати стандартну конфігурацію з вашою власною конфігурацією. Функція має повертати об’єкт конфігурації для Popper.
sanitize логічний true Увімкніть або вимкніть санітарну обробку. Якщо активовано 'template', 'content'і 'title'параметри будуть очищені.
sanitizeFn null, функція null Тут ви можете встановити власну функцію дезінфекції. Це може бути корисним, якщо ви віддаєте перевагу використанню спеціальної бібліотеки для виконання санітарної обробки.
selector рядок, false false Якщо надано селектор, спливаючі об’єкти будуть делеговані вказаним цілям. На практиці це також використовується для застосування поповерів до динамічно доданих елементів DOM ( jQuery.onпідтримка). Перегляньте цю проблему та інформативний приклад .
template рядок '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Базовий HTML для створення спливаючого вікна. Popover's titleбуде введено в .popover-inner. .popover-arrowстане стрілкою поповера. Зовнішній елемент оболонки повинен мати .popoverклас і role="popover".
title рядок, елемент, функція '' Значення назви за умовчанням, якщо titleатрибут відсутній. Якщо задано функцію, її буде викликано з thisпосиланням на елемент, до якого приєднано спливаюче зображення.
trigger рядок 'hover focus' Як запускається спливаюче вікно: клацання, наведення, фокус, вручну. Ви можете передати кілька тригерів; розділіть їх пробілом. 'manual'вказує на те, що спливаюче вікно буде запущено програмно за допомогою методів .popover('show'), .popover('hide')і ; .popover('toggle')це значення не можна комбінувати з будь-яким іншим тригером. 'hover'сам по собі призведе до появи спливаючих повідомлень, які неможливо запустити через клавіатуру, і їх слід використовувати лише за наявності альтернативних методів передачі тієї самої інформації для користувачів клавіатури.

Атрибути даних для окремих поповерів

Параметри для окремих спливаючих вікон можна альтернативно вказати за допомогою використання атрибутів даних, як пояснено вище.

Використання функції зpopperConfig

const popover = new bootstrap.Popover(element, {
  popperConfig(defaultBsPopperConfig) {
    // const newPopperConfig = {...}
    // use defaultBsPopperConfig if needed...
    // return newPopperConfig
  }
})

методи

Асинхронні методи та переходи

Усі методи API є асинхронними та починають перехід . Вони повертаються до абонента, щойно перехід починається, але до його завершення . Крім того, виклик методу компонента, що переходить, ігноруватиметься .

Дивіться нашу документацію JavaScript для отримання додаткової інформації .

метод опис
disable Усуває можливість показу спливаючого вікна елемента. Спливаюче вікно можна буде показати, лише якщо його повторно ввімкнути.
dispose Приховує та знищує спливаюче вікно елемента (видаляє збережені дані в елементі DOM). Поповери, які використовують делегування (які створюються за допомогою параметра selector) , не можуть бути окремо знищені на нащадкових тригерних елементах.
enable Надає можливість показу спливаючого вікна елемента. Поповери ввімкнено за умовчанням.
getInstance Статичний метод, який дозволяє отримати екземпляр спливаючого зображення, пов’язаний з елементом DOM.
getOrCreateInstance Статичний метод, який дозволяє вам отримати екземпляр спливаючого зображення, пов’язаний з елементом DOM, або створити новий, якщо він не був ініціалізований.
hide Приховує спливаюче вікно елемента. Повертається до абонента, перш ніж спливаюче повідомлення було фактично приховано (тобто до того , як відбудеться hidden.bs.popoverподія). Це вважається «ручним» запуском спливаючого повідомлення.
setContent Дає спосіб змінити вміст спливаючого вікна після його ініціалізації.
show Виявляє спливаюче зображення елемента. Повертається до абонента до того, як спливаюче повідомлення буде фактично показано (тобто до того , як відбудеться shown.bs.popoverподія). Це вважається «ручним» запуском спливаючого повідомлення. Поповер, заголовок і вміст яких мають нульову довжину, ніколи не відображаються.
toggle Перемикає спливаюче вікно елемента. Повертається до абонента до того, як спливаюче повідомлення було фактично показано або приховано (тобто до того, як відбудеться подія shown.bs.popoverабо ). hidden.bs.popoverЦе вважається «ручним» запуском спливаючого повідомлення.
toggleEnabled Перемикає можливість показувати або приховувати спливаюче вікно елемента.
update Оновлює позицію спливного вікна елемента.
// getOrCreateInstance example
const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance

// setContent example
myPopover.setContent({
  '.popover-header': 'another title',
  '.popover-body': 'another content'
})
Метод setContentприймає objectаргумент, де кожен ключ властивості є дійсним stringселектором у шаблоні спливаючої панелі, а кожне пов’язане значення властивості може бути string| element| function| null

Події

Подія опис
hide.bs.popover Ця подія запускається негайно після hideвиклику методу екземпляра.
hidden.bs.popover Ця подія запускається, коли спливаюче вікно перестає бути прихованим від користувача (чекатиме, поки завершаться переходи CSS).
inserted.bs.popover Ця подія запускається після show.bs.popoverподії, коли шаблон спливаючого зображення було додано до DOM.
show.bs.popover Ця подія запускається негайно, коли showвикликається метод екземпляра.
shown.bs.popover Ця подія запускається, коли спливаюче вікно стає видимим для користувача (чекатиме, поки завершаться переходи CSS).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})