Поповерс
Документација и примери за додавање искачућих приказа за Боотстрап, попут оних у иОС-у, било ком елементу на вашој веб локацији.
Преглед
Ствари које треба знати када користите додатак за попове:
- Поповерс се ослањају на Поппер библиотеку треће стране за позиционирање. Морате укључити поппер.мин.јс пре
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...
})