Пређи на главни садржај Прескочи на навигацију докумената
Check
in English

Поповерс

Документација и примери за додавање искачућих приказа за Боотстрап, попут оних у иОС-у, било ком елементу на вашој веб локацији.

Преглед

Ствари које треба знати када користите додатак за попове:

  • Поповерс се ослањају на Поппер библиотеку треће стране за позиционирање. Морате укључити поппер.мин.јс пре bootstrap.jsили користити онај bootstrap.bundle.min.jsкоји садржи Поппер.
  • Поповерс захтевају искачући додатак као зависност.
  • Искачући бројеви су укључени из разлога перформанси, тако да их морате сами иницијализирати .
  • Нулта дужина titleи contentвредности никада неће приказати искакање.
  • Наведите container: 'body'да бисте избегли проблеме са приказивањем у сложенијим компонентама (као што су наше групе за унос, групе дугмади, итд.).
  • Покретање искачућих приказа на скривеним елементима неће радити.
  • Искачући прозори за .disabledили disabledелементе морају бити покренути на елементу омотача.
  • Када се активирају из сидра која се премотају преко више линија, искачући прикази ће бити центрирани између укупне ширине сидра. Користите .text-nowrapна свом <a>с да бисте избегли ово понашање.
  • Поповерс морају бити сакривени пре него што се њихови одговарајући елементи уклоне из ДОМ-а.
  • Поповерс се могу покренути захваљујући елементу унутар ДОМ-а у сенци.
Ова компонента подразумевано користи уграђену дезинфекцију садржаја, која уклања све ХТМЛ елементе који нису експлицитно дозвољени. За више детаља погледајте одељак са средством за дезинфекцију у нашој ЈаваСцрипт документацији .
Ефекат анимације ове компоненте зависи од prefers-reduced-motionмедијског упита. Погледајте одељак о смањеном покрету наше документације о приступачности .

Наставите да читате да бисте видели како искачући подаци раде са неким примерима.

Примери

Омогући искачуће прозоре

Као што је горе поменуто, морате да иницијализујете искачуће елементе пре него што се могу користити. Један од начина да иницијализујете све искачуће прозоре на страници био би да их изаберете према њиховом data-bs-toggleатрибуту, на пример:

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

Демо уживо

Користимо ЈаваСцрипт сличан горенаведеном фрагменту за приказивање следећег искачућег приказа уживо. Наслови се постављају преко data-bs-title, а садржај тела се подешава преко data-bs-content.

Слободно користите било који titleили data-bs-titleу свом ХТМЛ-у. Када titleсе користи, Поппер ће га аутоматски заменити data-bs-titleкада се елемент прикаже.
хтмл
<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>

Четири правца

Доступне су четири опције: горе, десно, доле и лево. Упутства се пресликавају када користите Боотстрап у РТЛ-у. Подесите data-bs-placementда промените смер.

хтмл
<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>

Обичајcontainer

Када имате неке стилове на родитељском елементу који ометају искачући приказ, желећете да наведете прилагођени containerтако да се ХТМЛ искачућег елемента уместо тога појављује унутар тог елемента. Ово је уобичајено у прилагодљивим табелама, улазним групама и слично.

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

Друга ситуација у којој ћете желети да поставите експлицитно прилагођено containerјесу искачући прозори унутар модалног дијалога , да бисте били сигурни да је сам искачући прозор додат модалном. Ово је посебно важно за искачуће елементе који садрже интерактивне елементе – модални дијалози ће ухватити фокус, тако да осим ако искачући елемент није подређени елемент модала, корисници неће моћи да фокусирају или активирају ове интерактивне елементе.

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

Прилагођени поповерс

Додато у в5.2.0

Можете да прилагодите изглед искачућих прозора користећи ЦСС променљиве . Поставили смо прилагођену класу са data-bs-custom-class="custom-popover"за опсег нашег прилагођеног изгледа и користимо је да заобиђемо неке од локалних ЦСС променљивих.

.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;
}
хтмл
<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атрибут.

хтмл
<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"да се искачући прозор прикаже као непосредна визуелна повратна информација вашим корисницима јер можда не очекују да ће кликнути на онемогућени елемент.

хтмл
<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>

ЦСС

Променљиве

Додато у в5.2.0

Као део Боотстрап-овог еволуирајућег приступа ЦСС варијабли, поповерс сада користе локалне ЦСС променљиве укључене .popoverза побољшано прилагођавање у реалном времену. Вредности за ЦСС променљиве се постављају преко Сасс-а, тако да је и Сасс прилагођавање и даље подржано.

  --#{$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);
  

Сасс варијабле

$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;

Употреба

Омогућите искачуће прозоре преко ЈаваСцрипт-а:

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

Омогућите да искачући бројеви раде за кориснике тастатуре и помоћне технологије

Да бисте омогућили корисницима тастатуре да активирају искачуће елементе, требало би да их додате само у ХТМЛ елементе који су традиционално фокусирани на тастатуру и интерактивни (као што су везе или контроле обрасца). Иако произвољни ХТМЛ елементи (као што је <span>с) могу да се фокусирају додавањем tabindex="0"атрибута, ово ће додати потенцијално досадне и збуњујуће тачке табулатора на неинтерактивним елементима за кориснике тастатуре, а већина помоћних технологија тренутно не најављује садржај искачућег екрана у овој ситуацији . Поред тога, немојте се ослањати само на hoverокидач за ваше искачуће поруке, јер ће то онемогућити њихово покретање за кориснике тастатуре.

Иако можете да убаците богат, структуриран ХТМЛ у искачуће странице помоћу htmlопције, топло препоручујемо да избегавате додавање превелике количине садржаја. Начин на који искачући огласи тренутно функционишу је да је, када се једном прикажу, њихов садржај везан за елемент окидача са aria-describedbyатрибутом. Као резултат тога, цео садржај поповера биће објављен корисницима помоћне технологије као један дугачак, непрекидан ток.

Поред тога, иако је могуће укључити интерактивне контроле (као што су елементи обрасца или везе) у ваш искачући прозор (додавањем ових елемената у allowListдозвољене атрибуте и ознаке), имајте на уму да тренутно скочни прозор не управља редоследом фокуса тастатуре. Када корисник тастатуре отвори искачући елемент, фокус остаје на елементу за окидање, а пошто искачући део обично не следи одмах иза окидача у структури документа, нема гаранције да ће померање унапред/притиснутиTABће померити корисника тастатуре у сам искачући прозор. Укратко, једноставно додавање интерактивних контрола у искачући прозор ће вероватно учинити ове контроле недостижним/неупотребљивим за кориснике тастатуре и помоћне технологије, или ће у најмању руку створити нелогичан општи редослед фокуса. У овим случајевима, размислите о коришћењу модалног дијалога.

Опције

Пошто опције могу да се прослеђују преко атрибута података или ЈаваСцрипт-а, можете додати име опције у data-bs-, као у data-bs-animation="{value}". Обавезно промените тип случаја назива опције из „ цамелЦасе ” у „ кебаб-цасе ” када преносите опције преко атрибута података. На пример, користите data-bs-custom-class="beautifier"уместо data-bs-customClass="beautifier".

Од Боотстрап 5.2.0, све компоненте подржавају експериментални резервисани атрибут података data-bs-configкоји може да садржи једноставну конфигурацију компоненте као ЈСОН стринг. Када елемент има атрибуте data-bs-config='{"delay":0, "title":123}'и data-bs-title="456", коначна titleвредност ће бити 456и одвојени атрибути података ће заменити вредности дате на data-bs-config. Поред тога, постојећи атрибути података могу да садрже ЈСОН вредности попут data-bs-delay='{"show":0,"hide":150}'.

Имајте на уму да се из безбедносних разлога опције sanitize, sanitizeFnи allowListне могу доставити коришћењем атрибута података.
Име Тип Уобичајено Опис
allowList објекат Задана вриједност Објекат који садржи дозвољене атрибуте и ознаке.
animation боолеан true Примените прелаз ЦСС фаде на искачући прозор.
boundary стринг, елемент 'clippingParents' Граница ограничења прекорачења искачућег елемента (односи се само на Попперов модификатор превентОверфлов). Подразумевано је 'clippingParents'и може да прихвати референцу ХТМЛЕлемента (само преко ЈаваСцрипт-а). За више информација погледајте Поппер'с детецтОверфлов документе .
container стринг, елемент, нетачно 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 Дозволите ХТМЛ у искачућем прозору. Ако је тачно, ХТМЛ ознаке у искачућем прозору titleбиће приказане у искачућем прозору. Ако је нетачно, innerTextсвојство ће се користити за уметање садржаја у ДОМ. Користите текст ако сте забринути због КССС напада.
offset број, низ, функција [0, 0] Померање искачућег приказа у односу на циљ. Можете проследити стринг у атрибутима података са вредностима одвојеним зарезима као што су: data-bs-offset="10,20". Када се функција користи за одређивање офсета, она се позива са објектом који садржи поппер пласман, референцу и поппер рецтс као први аргумент. ДОМ чвор покретачког елемента се прослеђује као други аргумент. Функција мора да врати низ са два броја: клизање , растојање . За више информација погледајте Попперове офсет документе .
placement стринг, функција 'top' Како поставити искачући повер: аутоматски, горе, доле, лево, десно. Када autoје наведено, динамички ће преусмерити искачући прозор. Када се функција користи за одређивање положаја, она се позива са искачућим ДОМ чвором као првим аргументом и покретачким елементом ДОМ чвором као другим. Контекст thisје постављен на инстанцу искачућег приказа.
popperConfig нулл, објекат, функција null Да бисте променили Боотстрап-ову подразумевану Поппер конфигурацију, погледајте Поппер-ову конфигурацију . Када се функција користи за креирање Поппер конфигурације, она се позива са објектом који садржи Боотстрап-ову подразумевану Поппер конфигурацију. Помаже вам да користите и спојите подразумевану са сопственом конфигурацијом. Функција мора да врати конфигурациони објекат за Поппер.
sanitize боолеан true Омогућите или онемогућите дезинфекцију. Ако је активирано 'template', 'content'и 'title'опције ће бити саниране.
sanitizeFn нулл, функција null Овде можете обезбедити сопствену функцију дезинфекције. Ово може бити корисно ако више волите да користите наменску библиотеку за дезинфекцију.
selector стринг, лажно false Ако је обезбеђен селектор, искачући објекти ће бити делегирани наведеним циљевима. У пракси, ово се такође користи за примену искакања на динамички додане ДОМ елементе ( jQuery.onподршка). Погледајте ово издање и информативни пример .
template низ '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Основни ХТМЛ за коришћење при креирању искачућег прозора. Поповер'с 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
  }
})

Методе

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

Све АПИ методе су асинхроне и покрећу транзицију . Они се враћају позиваоцу чим се транзиција започне, али пре него што се заврши . Поред тога, позив методе за прелазну компоненту биће занемарен .

Погледајте нашу ЈаваСцрипт документацију за више информација .

Метод Опис
disable Уклања могућност да се искачући прозор елемента прикаже. Поповер ће моћи да се прикаже само ако је поново омогућен.
dispose Сакрива и уништава искачући прозор елемента (Уклања сачуване податке на ДОМ елементу). Скочни прозори који користе делегирање (који се креирају помоћу опције selector) не могу се појединачно уништити на елементима окидача потомака.
enable Даје могућност да се искачући део елемента прикаже. Поповерс су подразумевано омогућени.
getInstance Статичка метода која вам омогућава да добијете искачућу инстанцу повезану са ДОМ елементом.
getOrCreateInstance Статичка метода која вам омогућава да добијете искачућу инстанцу повезану са ДОМ елементом или креирате нову у случају да није иницијализована.
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 Овај догађај се покреће када се искачући прозор заврши са сакривањем од корисника (сачекаће да се ЦСС транзиције доврше).
inserted.bs.popover Овај догађај се покреће након show.bs.popoverдогађаја када је шаблон за искакање додат у ДОМ.
show.bs.popover Овај догађај се покреће одмах када showсе позове метод инстанце.
shown.bs.popover Овај догађај се покреће када искачући прозор постане видљив кориснику (сачекаће да се ЦСС транзиције доврше).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})