Ale nan kontni prensipal la Ale nan navigasyon dokiman yo
Check
in English

Popovers

Dokimantasyon ak egzanp pou ajoute Bootstrap popovers, tankou sa yo jwenn nan iOS, nan nenpòt eleman sou sit ou a.

Apèsi sou lekòl la

Bagay ou dwe konnen lè w ap itilize plugin popover la:

  • Popovers konte sou twazyèm pati bibliyotèk Popper pou pwezante. Ou dwe mete popper.min.js anvan bootstrap.js, oswa itilize youn bootstrap.bundle.min.jski gen Popper.
  • Popovers mande pou plugin popover a kòm yon depandans.
  • Popovers yo patisipe pou rezon pèfòmans, kidonk ou dwe inisyalize yo tèt ou .
  • Zewo-longè titleak contentvalè pa janm ap montre yon popover.
  • Espesifye container: 'body'pou evite rann pwoblèm nan eleman ki pi konplèks (tankou gwoup opinyon nou yo, gwoup bouton, elatriye).
  • Deklanche popovers sou eleman kache pa pral travay.
  • Popovers pou .disabledoswa disabledeleman yo dwe deklanche sou yon eleman wrapper.
  • Lè yo deklanche soti nan lank ki vlope sou plizyè liy, popovers yo pral santre ant lajè an jeneral lank yo. Sèvi ak .text-nowrapsou ou <a>pou evite konpòtman sa a.
  • Popovers yo dwe kache anvan eleman korespondan yo te retire nan DOM la.
  • Popovers ka deklanche gras a yon eleman andedan yon DOM lonbraj.
Pa default, eleman sa a sèvi ak dezenfektan kontni entegre, ki retire nenpòt eleman HTML ki pa klèman pèmèt. Gade seksyon dezenfektan nan dokiman JavaScript nou an pou plis detay.
Efè animasyon eleman sa a depann de prefers-reduced-motionrechèch medya yo. Gade seksyon mouvman redui nan dokiman aksè nou an .

Kontinye lekti pou wè ki jan popovers travay ak kèk egzanp.

Egzanp yo

Pèmèt popovers

Kòm mansyone pi wo a, ou dwe inisyalize popovers anvan yo ka itilize yo. Youn nan fason yo inisyalize tout popovers sou yon paj ta dwe chwazi yo pa data-bs-toggleatribi yo, tankou sa a:

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

Live Demo

Nou itilize JavaScript menm jan ak snippet ki anwo a pou rann popover ap viv sa a. Tit yo mete atravè data-bs-titleepi kontni kò yo mete atravè data-bs-content.

Ou lib pou itilize swa titleoswa data-bs-titlenan HTML ou. Lè titleyo itilize, Popper pral ranplase li otomatikman ak data-bs-titlelè eleman an rann.
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>

Kat direksyon

Gen kat opsyon ki disponib: anwo, adwat, anba, ak agoch. Enstriksyon yo reflete lè w ap itilize Bootstrap nan RTL. Mete data-bs-placementpou chanje direksyon an.

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

Lè ou gen kèk estil sou yon eleman paran ki entèfere ak yon popover, ou pral vle presize yon koutim containerpou HTML popover a parèt nan eleman sa a pito. Sa a se komen nan tab reponn, gwoup opinyon, ak renmen an.

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

Yon lòt sitiyasyon kote ou pral vle mete yon koutim eksplisit containeryo se popovers andedan yon dyalòg modal , pou asire w ke popover nan tèt li mete nan modal la. Sa a se patikilyèman enpòtan pou popovers ki genyen eleman entèaktif - dyalòg modal pral pyèj konsantre, kidonk sof si popover a se yon eleman timoun nan modal la, itilizatè yo pa pral kapab konsantre oswa aktive eleman entèaktif sa yo.

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

Popovers personnalisé

Te ajoute nan v5.2.0

Ou ka personnaliser aparans popovers lè l sèvi avèk varyab CSS . Nou mete yon klas koutim ak data-bs-custom-class="custom-popover"dimansyon aparans koutim nou an epi sèvi ak li pou pase sou plas kèk nan varyab CSS lokal yo.

.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>

Rejte sou pwochen klike sou

Sèvi ak focusdeklanche a pou ranvwaye popovers sou pwochen klik itilizatè a sou yon eleman diferan pase eleman baskil la.

Mak espesifik obligatwa pou ranvwaye-sou-pwochen-klike

Pou bon konpòtman kwa-navigatè ak kwa-platfòm, ou dwe itilize <a>tag la, pa tag la <button>, epi ou dwe gen ladan tou yon tabindexatribi.

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'
})

Eleman andikape

Eleman ki gen disabledatribi a pa entèaktif, sa vle di itilizatè yo pa ka hover oswa klike sou yo pou deklanche yon popover (oswa konsèy zouti). Kòm yon solisyon, ou pral vle deklanche popover a soti nan yon anbalaj <div>oswa <span>, depreferans te fè klavye-focusable lè l sèvi avèk tabindex="0".

Pou deklannche popover ki andikape, ou ka prefere tou data-bs-trigger="hover focus"pou popover a parèt kòm fidbak vizyèl imedya pou itilizatè ou yo paske yo pa ka espere klike sou yon eleman ki andikape.

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

Varyab

Te ajoute nan v5.2.0

Kòm yon pati nan apwòch Bootstrap a evolye varyab CSS, popovers kounye a itilize varyab CSS lokal yo .popoverpou amelyore personnalisation an tan reyèl. Valè pou varyab CSS yo mete atravè Sass, kidonk personnalisation Sass toujou sipòte tou.

  --#{$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 varyab

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

Itilizasyon

Pèmèt popovers via JavaScript:

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

Fè popovers travay pou itilizatè klavye ak teknoloji asistans

Pou pèmèt itilizatè klavye yo aktive popovers ou yo, ou ta dwe ajoute yo sèlman nan eleman HTML ki tradisyonèlman konsantre sou klavye ak entèaktif (tankou lyen oswa kontwòl fòm). Malgre ke eleman HTML abitrè (tankou <span>s) yo ka fè konsantre lè yo ajoute tabindex="0"atribi a, sa pral ajoute tab stops potansyèlman anmèdan ak konfizyon sou eleman ki pa entèaktif pou itilizatè klavye, ak pifò teknoloji asistans kounye a pa anonse kontni popover a nan sitiyasyon sa a. . Anplis de sa, pa konte sèlman sou hoverkòm deklanche pou popovers ou yo, paske sa ap fè yo enposib deklanche pou itilizatè klavye yo.

Pandan ke ou ka mete HTML rich, estriktire nan popovers ak htmlopsyon a, nou rekòmande pou evite ajoute yon kantite twòp nan kontni. Fason popovers yo travay kounye a se ke, yon fwa yo parèt, kontni yo mare nan eleman deklanche ak aria-describedbyatribi a. Kòm yon rezilta, tout kontni popover a pral anonse bay itilizatè teknoloji asistans kòm yon sèl kouran ki dire lontan, san enteripsyon.

Anplis de sa, byenke li posib pou enkli tou kontwòl entèaktif (tankou eleman fòm oswa lyen) nan popover ou a (pa ajoute eleman sa yo allowListnan atribi ak tags yo pèmèt), ou dwe konnen ke kounye a popover a pa jere lòd konsantre klavye. Lè yon itilizatè klavye ouvri yon popover, konsantre rete sou eleman deklanche a, epi kòm popover a anjeneral pa imedyatman swiv deklanche nan estrikti dokiman an, pa gen okenn garanti ke vanse / peze.TABpral deplase yon itilizatè klavye nan popover nan tèt li. Nan ti bout tan, tou senpleman ajoute kontwòl entèaktif nan yon popover gen chans rive nan fè kontwòl sa yo inaccessible / inutilisables pou itilizatè klavye ak itilizatè teknoloji asistans, oswa omwen fè pou yon lòd konsantre jeneral ki pa lojik. Nan ka sa yo, konsidere itilize yon dyalòg modal pito.

Opsyon

Kòm opsyon yo ka pase atravè atribi done oswa JavaScript, ou ka ajoute yon non opsyon nan data-bs-, tankou nan data-bs-animation="{value}". Asire w ke w chanje kalite ka non opsyon an soti nan " camelCase " a " kebab-case " lè w ap pase opsyon yo atravè atribi done yo. Pa egzanp, sèvi ak data-bs-custom-class="beautifier"olye de data-bs-customClass="beautifier".

Apati Bootstrap 5.2.0, tout konpozan sipòte yon eksperimantal atribi done rezève data-bs-configki ka loje konfigirasyon eleman senp kòm yon kòd JSON. Lè yon eleman gen data-bs-config='{"delay":0, "title":123}'ak data-bs-title="456"atribi, titlevalè final la pral 456ak atribi done separe yo pral pase sou valè yo bay sou data-bs-config. Anplis de sa, atribi done ki egziste deja yo kapab loje valè JSON tankou data-bs-delay='{"show":0,"hide":150}'.

Remake byen ke pou rezon sekirite yo pa ka bay opsyon sanitize, sanitizeFn, ak atribi done yo.allowList
Non Kalite Default Deskripsyon
allowList objè Valè default Objè ki gen atribi ak tags pèmèt.
animation booleyen true Aplike yon tranzisyon CSS fennen nan popover la.
boundary fisèl, eleman 'clippingParents' Limit kontrent debòde nan popover a (aplike sèlman nan modifye preventOverflow Popper a). Pa default, li la 'clippingParents'epi li ka aksepte yon referans HTMLElement (via JavaScript sèlman). Pou plis enfòmasyon, gade nan docs detectOverflow Popper a .
container fisèl, eleman, fo false Mete popover a nan yon eleman espesifik. Egzanp: container: 'body'. Opsyon sa a se patikilyèman itil paske li pèmèt ou pozisyon popover a nan koule nan dokiman an tou pre eleman deklanche a - ki pral anpeche popover a flote lwen eleman deklanche a pandan yon redimensionnement fenèt.
content fisèl, eleman, fonksyon '' Valè kontni par défaut si data-bs-contentatribi pa prezan. Si yo bay yon fonksyon, yo pral rele li ak thisreferans li mete nan eleman ki popover a tache ak.
customClass fisèl, fonksyon '' Ajoute klas nan popover a lè yo montre li. Remake byen ke yo pral ajoute klas sa yo anplis de nenpòt klas ki espesifye nan modèl la. Pou ajoute plizyè klas, separe yo ak espas: 'class-1 class-2'. Ou kapab tou pase yon fonksyon ki ta dwe retounen yon sèl fisèl ki gen non klas adisyonèl.
delay nimewo, objè 0 Reta montre ak kache popover a (ms)—pa aplike nan kalite deklanche manyèl. Si yo bay yon nimewo, reta aplike pou tou de kache/montre. Estrikti objè se: delay: { "show": 500, "hide": 100 }.
fallbackPlacements fisèl, etalaj ['top', 'right', 'bottom', 'left'] Defini plasman sere lè w bay yon lis plasman nan etalaj (nan lòd preferans). Pou plis enfòmasyon, al gade nan docs konpòtman Popper .
html booleyen false Pèmèt HTML nan popover la. Si se vre, etikèt HTML nan popover a titlepral rann nan popover a. Si se fo, innerTextyo pral itilize pwopriyete pou mete kontni nan DOM la. Sèvi ak tèks si w enkyete w pou atak XSS.
offset nimewo, fisèl, fonksyon [0, 0] Konsantrasyon popover a parapò ak sib li yo. Ou ka pase yon kòd nan atribi done ak valè separe vigil tankou: data-bs-offset="10,20". Lè yo itilize yon fonksyon pou detèmine konpanse a, yo rele l ak yon objè ki genyen plasman popper a, referans a, ak popper rects kòm premye agiman li. Se eleman deklanche ne DOM la pase kòm dezyèm agiman an. Fonksyon an dwe retounen yon etalaj ki gen de nimewo: skidding , distance . Pou plis enfòmasyon, al gade nan Docs Offset Popper la .
placement fisèl, fonksyon 'top' Ki jan yo pozisyone popover a: oto, tèt, anba, gòch, dwa. Lè autoyo espesifye, li pral dinamikman reoryantasyon popover la. Lè yo itilize yon fonksyon pou detèmine plasman an, yo rele li ak popover DOM kòm premye agiman li epi deklanche eleman DOM kòm dezyèm li. Kontèks thisla mete sou egzanp popover la.
popperConfig nil, objè, fonksyon null Pou chanje konfigirasyon Popper default Bootstrap la, gade konfigirasyon Popper la . Lè yo itilize yon fonksyon pou kreye konfigirasyon Popper la, li rele ak yon objè ki gen konfigirasyon Popper default Bootstrap la. Li ede ou itilize ak rantre default la ak pwòp konfigirasyon ou. Fonksyon an dwe retounen yon objè konfigirasyon pou Popper.
sanitize booleyen true Aktive oswa enfim sanitizasyon an. Si yo aktive 'template', 'content'ak 'title'opsyon yo pral dezenfekte.
sanitizeFn nil, fonksyon null Isit la ou ka bay pwòp fonksyon dezenfekte ou. Sa a ka itil si ou prefere sèvi ak yon bibliyotèk devwe pou fè dezenfekte.
selector fisèl, fo false Si yo bay yon seleksyon, objè popover yo pral delege nan sib yo espesifye. Nan pratik, sa a yo itilize tou pou aplike popovers dinamik ajoute eleman DOM ( jQuery.onsipò). Gade pwoblèm sa a ak yon egzanp enfòmatif .
template fisèl '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Baz HTML pou itilize lè kreye popover a. Popover a titlepral enjekte nan la .popover-inner. .popover-arrowpral tounen flèch popover a. Eleman wrapper ki pi eksteryè a ta dwe gen .popoverklas la ak role="popover".
title fisèl, eleman, fonksyon '' Valè tit default si titleatribi pa prezan. Si yo bay yon fonksyon, yo pral rele li ak thisreferans li mete nan eleman ki popover a tache ak.
trigger fisèl 'hover focus' Ki jan popover deklanche: klike, hover, konsantre, manyèl. Ou ka pase plizyè deklanche; separe yo ak yon espas. 'manual'endike ke popover a pral deklanche pwogramasyon atravè .popover('show'), .popover('hide')ak .popover('toggle')metòd; valè sa a pa ka konbine avèk okenn lòt deklanche. 'hover'sou pwòp li yo pral lakòz popovers ki pa ka deklanche atravè klavye a, epi yo ta dwe itilize sèlman si metòd altènatif pou transmèt menm enfòmasyon an pou itilizatè klavye yo prezan.

Done atribi pou popovers endividyèl yo

Opsyon pou popovers endividyèl yo ka altènativman espesifye atravè itilizasyon atribi done, jan yo eksplike sa pi wo a.

Sèvi ak fonksyon akpopperConfig

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

Metòd

Metòd asynchrone ak tranzisyon

Tout metòd API yo asenkron epi yo kòmanse yon tranzisyon . Yo retounen kote moun k ap rele a le pli vit ke tranzisyon an kòmanse men anvan li fini . Anplis de sa, yo pral inyore yon apèl metòd sou yon eleman tranzisyon .

Gade dokiman JavaScript nou an pou plis enfòmasyon .

Metòd Deskripsyon
disable Retire abilite pou popover yon eleman pou montre. Popover a pral sèlman kapab montre si li re-aktive.
dispose Kache epi detwi popover yon eleman (Retire done ki estoke sou eleman DOM). Popovers ki itilize delegasyon (ki kreye lè l sèvi avèk opsyon selectoran ) pa ka detwi endividyèlman sou eleman deklanche desandan yo.
enable Bay popover yon eleman kapasite pou yo montre. Popovers yo aktive pa default.
getInstance Metòd estatik ki pèmèt ou jwenn egzanp popover ki asosye ak yon eleman DOM.
getOrCreateInstance Metòd estatik ki pèmèt ou jwenn egzanp popover ki asosye ak yon eleman DOM, oswa kreye yon nouvo nan ka li pa te inisyalize.
hide Kache popover yon eleman. Retounen bay moun kap rele a anvan popover a aktyèlman kache (sa vle di anvan hidden.bs.popoverevènman an rive). Sa a konsidere kòm yon "manyèl" deklanche popover la.
setContent Bay yon fason pou chanje kontni popover a apre inisyalizasyon li.
show Revele popover yon eleman. Retounen bay moun kap rele a anvan popover a aktyèlman te montre (sa vle di anvan shown.bs.popoverevènman an rive). Sa a konsidere kòm yon "manyèl" deklanche popover la. Popovers ki gen tit ak kontni tou de zewo-longè pa janm parèt.
toggle Aktivite popover yon eleman. Retounen bay moun kap rele a anvan popover a aktyèlman te montre oswa kache (sa vle di anvan evènman shown.bs.popoveran hidden.bs.popoverrive). Sa a konsidere kòm yon "manyèl" deklanche popover la.
toggleEnabled Aktivite kapasite pou popover yon eleman yo dwe montre oswa kache.
update Mete ajou pozisyon popover yon eleman.
// 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'
})
Metòd setContentla aksepte yon objectagiman, kote chak pwopriyete-kle se yon stringseleksyon valab nan modèl popover a, epi chak pwopriyete-valè ki gen rapò kapab string| element| function| null

Evènman

Evènman Deskripsyon
hide.bs.popover Evènman sa a te tire imedyatman lè yo hidete rele metòd egzanp lan.
hidden.bs.popover Evènman sa a revoke lè popover a fini kache pou itilizatè a (ap tann pou tranzisyon CSS fini).
inserted.bs.popover Evènman sa a revoke apre show.bs.popoverevènman an lè yo te ajoute modèl popover nan DOM la.
show.bs.popover Evènman sa a dife imedyatman lè yo showrele metòd egzanp lan.
shown.bs.popover Evènman sa a revoke lè popover a vin vizib pou itilizatè a (ap tann pou tranzisyon CSS fini).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})