Gean nei haadynhâld Gean nei dokumintnavigaasje
Check
in English

Popovers

Dokumintaasje en foarbylden foar it tafoegjen fan Bootstrap-popovers, lykas dy fûn yn iOS, oan elk elemint op jo side.

Oersicht

Dingen om te witten by it brûken fan de popover-plugin:

  • Popovers fertrouwe op de tredde partij bibleteek Popper foar posisjonearring. Jo moatte popper.min.js foar opnimme bootstrap.js, of ien brûke bootstrap.bundle.min.jsdy't Popper befettet.
  • Popovers fereaskje de popover-plugin as ôfhinklikens.
  • Popovers binne opt-in foar prestaasjesredenen, dus jo moatte se sels inisjalisearje .
  • Nullengte titleen contentwearden sille nea in popover sjen litte.
  • Spesifisearje container: 'body'om it werjaan fan problemen yn kompleksere komponinten te foarkommen (lykas ús ynfiergroepen, knopgroepen, ensfh.).
  • It triggerjen fan popovers op ferburgen eleminten sil net wurkje.
  • Popovers foar .disabledof disabledeleminten moatte wurde aktivearre op in wrapper elemint.
  • Wannear't aktivearre fan ankers dy't wrap oer meardere rigels, popovers wurde sintraal tusken de ankers 'algemiene breedte. Brûk .text-nowrapop jo <a>s om dit gedrach te foarkommen.
  • Popovers moatte ferburgen wurde foardat har oerienkommende eleminten binne fuortsmiten fan 'e DOM.
  • Popovers kinne wurde oanlutsen troch in elemint binnen in skaad DOM.
Standert brûkt dizze komponint de ynboude ynhâldsanitizer, dy't alle HTML-eleminten útstript dy't net eksplisyt tastien binne. Sjoch de seksje sanitizer yn ús JavaScript-dokumintaasje foar mear details.
It animaasje-effekt fan dizze komponint is ôfhinklik fan 'e prefers-reduced-motionmediafraach. Sjoch de seksje mei fermindere beweging fan ús dokumintaasje foar tagonklikens .

Bliuw lêze om te sjen hoe't popovers wurkje mei guon foarbylden.

Foarbylden

Popovers ynskeakelje

Lykas hjirboppe neamd, moatte jo popovers inisjalisearje foardat se kinne wurde brûkt. Ien manier om alle popovers op in side te initialisearjen soe wêze om se te selektearjen troch har data-bs-toggleattribút, lykas sa:

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

Live demo

Wy brûke JavaScript fergelykber mei it snippet hjirboppe om de folgjende live popover wer te jaan. Titels wurde ynsteld fia data-bs-titleen lichem ynhâld wurdt ynsteld fia data-bs-content.

Fiel jo frij om ien titleof data-bs-titleyn jo HTML te brûken. Wannear't titlebrûkt wurdt, sil Popper it automatysk ferfange mei data-bs-titleas it elemint wurdt werjûn.
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>

Fjouwer rjochtingen

Fjouwer opsjes binne beskikber: boppe, rjochts, ûnder en lofts. Rjochtingen wurde spegele by it brûken fan Bootstrap yn RTL. Ynstelle data-bs-placementom de rjochting te feroarjen.

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>

Oanpastcontainer

As jo ​​​​in pear stilen hawwe op in âlderelemint dy't ynterferearje mei in popover, wolle jo in oanpaste spesifisearje containersadat de HTML fan 'e popover yn dat elemint ferskynt. Dit is gewoan yn responsive tabellen, ynfiergroepen, en sa.

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

In oare situaasje wêryn jo in eksplisite oanpaste ynstelle wolle containerbinne popovers yn in modaal dialoochfinster , om der wis fan te wêzen dat de popover sels is taheakke oan de modal. Dit is benammen wichtich foar popovers dy't ynteraktive eleminten befetsje - modale dialoochfinsters sille fokus trape, dus as it popover in bernelemint fan 'e modal is, kinne brûkers dizze ynteraktive eleminten net fokusje of aktivearje.

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

Oanpaste popovers

Taheakke yn v5.2.0

Jo kinne it uterlik fan popovers oanpasse mei CSS-fariabelen . Wy sette in oanpaste klasse mei data-bs-custom-class="custom-popover"om ús oanpaste uterlik te berikken en it te brûken om guon fan 'e lokale CSS-fariabelen te oerskriuwen.

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

Ferwiderje by folgjende klik

Brûk de focustrigger om popovers op de folgjende klik fan de brûker fan in oar elemint dan it wikselelemint te ûntslaan.

Spesifike opmaak nedich foar ôfwizen-op-folgjende-klik

Foar goed cross-browser en cross-platform gedrach moatte jo de <a>tag brûke, net de <button>tag, en jo moatte ek in tabindexattribút opnimme.

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

Utskeakele eleminten

Eleminten mei it disabledattribút binne net ynteraktyf, wat betsjuttet dat brûkers net kinne hoverje of klikke om in popover (of tooltip) te triggerjen. As oplossing wolle jo de popover triggerje fanút in wrapper <div>of <span>, ideaal makke toetseboerd-fokusber makke mei tabindex="0".

Foar útskeakele popover-triggers kinne jo ek leaver data-bs-trigger="hover focus"dat de popover ferskynt as direkte fisuele feedback foar jo brûkers, om't se miskien net ferwachtsje te klikken op in útskeakele elemint.

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

Fariabelen

Taheakke yn v5.2.0

As ûnderdiel fan Bootstrap's evoluearjende oanpak fan CSS-fariabelen, brûke popovers no lokale CSS-fariabelen op .popoverfoar ferbettere real-time oanpassing. Wearden foar de CSS-fariabelen wurde ynsteld fia Sass, sadat Sass-oanpassing ek noch stipe wurdt.

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

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

Gebrûk

Popovers ynskeakelje fia JavaScript:

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

Popovers meitsje wurkje foar brûkers fan toetseboerd en assistinte technology

Om toetseboerdbrûkers jo popovers te aktivearjen, moatte jo se allinich tafoegje oan HTML-eleminten dy't tradisjoneel toetseboerdfokusber en ynteraktyf binne (lykas keppelings of formulierkontrôles). Hoewol't willekeurige HTML-eleminten (lykas <span>s) fokusber makke wurde kinne troch it tafoegjen fan it tabindex="0"attribút, sil dit potinsjeel ferfelende en betiizjende ljepperstops tafoegje oan net-ynteraktive eleminten foar toetseboerdbrûkers, en de measte assistive technologyen kundigje op it stuit de ynhâld fan 'e popover yn dizze situaasje net oan. . Fertrouwe ek net allinich op hoveras de trigger foar jo popovers, om't dit sil meitsje dat se ûnmooglik wurde trigger foar toetseboerdbrûkers.

Wylst jo rike, strukturearre HTML kinne ynfoegje yn popovers mei de htmlopsje, riede wy sterk oan dat jo foarkomme dat jo in oerstallige hoemannichte ynhâld tafoegje. De manier wêrop popovers op it stuit wurkje is dat, ienris werjûn, har ynhâld is bûn oan it trigger-elemint mei it aria-describedbyattribút. As resultaat sil de heule ynhâld fan 'e popover wurde oankundige oan brûkers fan assistinte technology as ien lange, ûnûnderbrutsen stream.

Derneist, hoewol it mooglik is om ek ynteraktive kontrôles (lykas formuliereleminten of keppelings) yn jo popover op te nimmen (troch dizze eleminten ta te foegjen oan 'e allowListtastiene attributen en tags), wês bewust dat op it stuit de popover gjin toetseboerdfocusfolchoarder beheart. As in toetseboerdbrûker in popover iepenet, bliuwt de fokus op it triggerende elemint, en om't de popover meastentiids de trigger yn 'e struktuer fan it dokumint net direkt folget, is d'r gjin garânsje dat foarút gean / drukkeTABsil in toetseboerdbrûker yn 'e popover sels ferpleatse. Koartsein, it gewoan tafoegjen fan ynteraktive kontrôles oan in popover sil dizze kontrôles wierskynlik ûnberikber / ûnbrûkber meitsje foar toetseboerdbrûkers en brûkers fan assistinte technologyen, of op syn minst in ûnlogyske algemiene fokusfolchoarder meitsje. Yn dizze gefallen, beskôgje it brûken fan in modaal dialooch ynstee.

Opsjes

As opsjes kinne wurde trochjûn fia gegevensattributen of JavaScript, kinne jo in opsjenamme tafoegje oan data-bs-, lykas yn data-bs-animation="{value}". Soargje derfoar dat jo it gefaltype fan 'e opsjenamme feroarje fan " camelCase " nei " kebab-case " as jo de opsjes trochjaan fia gegevensattributen. Brûk bygelyks data-bs-custom-class="beautifier"ynstee fan data-bs-customClass="beautifier".

Fanôf Bootstrap 5.2.0 stypje alle komponinten in eksperiminteel reservearre data-attribút data-bs-configdat ienfâldige komponintkonfiguraasje as in JSON-string kin herbergje. As in elemint hat data-bs-config='{"delay":0, "title":123}'en data-bs-title="456"attributen, de definitive titlewearde sil wêze 456en de aparte gegevens attributen sille oerskriuwe wearden jûn op data-bs-config. Derneist kinne besteande gegevensattributen JSON-wearden lykas data-bs-delay='{"show":0,"hide":150}'.

Tink derom dat om feiligens redenen de sanitize, sanitizeFn, en allowListopsjes net kinne wurde levere mei gegevensattributen.
Namme Type Standert Beskriuwing
allowList objekt Standertwearde Objekt dat tastiene attributen en tags befettet.
animation boolean true Tapasse in CSS-fade-oergong op 'e popover.
boundary string, element 'clippingParents' Overflow beheining grins fan de popover (jildt allinnich foar Popper syn preventOverflow modifier). Standert is 'clippingParents'en kin it in HTMLElement-referinsje akseptearje (allinich fia JavaScript). Foar mear ynformaasje ferwize nei Popper's detectOverflow-dokuminten .
container string, elemint, falsk false Foegje de popover ta oan in spesifyk elemint. Foarbyld container: 'body':. Dizze opsje is benammen nuttich om't it jo de popover yn 'e stream fan it dokumint yn' e buert fan it aktivearjende elemint kinne pleatse - wat foarkomt dat de popover fan it aktivearjende elemint wei sweeft by in finstergrutte feroarje.
content string, elemint, funksje '' Standert ynhâldwearde as data-bs-contentattribút net oanwêzich is. As in funksje wurdt jûn, wurdt it neamd mei syn thisferwizing set nei it elemint dat de popover is hechte oan.
customClass string, funksje '' Foegje klassen ta oan de popover as it wurdt toand. Tink derom dat dizze klassen sille wurde tafoege neist alle klassen oantsjutte yn it sjabloan. Om meardere klassen ta te foegjen, skiede se mei spaasjes: 'class-1 class-2'. Jo kinne ek in funksje trochjaan dy't in inkele tekenrige moat weromjaan mei ekstra klassenammen.
delay nûmer, objekt 0 Fertrage it werjaan en ferbergjen fan de popover (ms) - jildt net foar manuele triggertype. As in nûmer wurdt levere, wurdt fertraging tapast op sawol hide / show. Objektstruktuer is delay: { "show": 500, "hide": 100 }:.
fallbackPlacements string, rige ['top', 'right', 'bottom', 'left'] Definiearje fallback-pleatsingen troch in list fan pleatsingen yn array te jaan (yn folchoarder fan foarkar). Foar mear ynformaasje ferwize nei Popper's gedrachsdokuminten .
html boolean false Tastean HTML yn de popover. As wier, wurde HTML-tags yn 'e popover's titlewerjûn yn' e popover. As falsk, innerTextsil eigendom brûkt wurde om ynhâld yn te foegjen yn 'e DOM. Brûk tekst as jo soargen meitsje oer XSS-oanfallen.
offset getal, string, funksje [0, 0] Offset fan 'e popover relatyf oan syn doel. Jo kinne in tekenrige trochjaan yn gegevensattributen mei komma-skieden wearden lykas: data-bs-offset="10,20". As in funksje brûkt wurdt om de offset te bepalen, wurdt it neamd mei in objekt dat de popper pleatsing, de referinsje en popperrects as syn earste argumint befettet. It triggerelemint DOM-knooppunt wurdt trochjûn as it twadde argumint. De funksje moat in array weromjaan mei twa nûmers: skidding , ôfstân . Foar mear ynformaasje ferwize nei Popper's offset -dokuminten .
placement string, funksje 'top' Hoe kinne jo de popover pleatse: auto, boppe, ûnder, lofts, rjochts. Wannear autois oantsjutte, sil it de popover dynamysk reorientearje. As in funksje brûkt wurdt om de pleatsing te bepalen, wurdt it neamd mei de popover DOM-knooppunt as earste argumint en it triggerelemint DOM-knooppunt as twadde. De thiskontekst is ynsteld op it popover-eksimplaar.
popperConfig null, objekt, funksje null Om de standert Popper-konfiguraasje fan Bootstrap te feroarjen, sjoch Popper's konfiguraasje . As in funksje wurdt brûkt om de Popper-konfiguraasje te meitsjen, wurdt it neamd mei in objekt dat de standert Popper-konfiguraasje fan de Bootstrap befettet. It helpt jo de standert te brûken en te fusearjen mei jo eigen konfiguraasje. De funksje moat werom in konfiguraasje foarwerp foar Popper.
sanitize boolean true De sanearring ynskeakelje of útskeakelje. As aktivearre 'template', 'content'en 'title'opsjes sille wurde sanearre.
sanitizeFn null, funksje null Hjir kinne jo jo eigen sanearringsfunksje leverje. Dit kin handich wêze as jo leaver in tawijd bibleteek brûke om sanitaasje út te fieren.
selector string, falsk false As in selector wurdt foarsjoen, sil popover objekten wurde delegearre oan de oantsjutte doelen. Yn 'e praktyk wurdt dit brûkt om popovers ek oan te passen op dynamysk tafoege DOM-eleminten ( jQuery.onstipe). Sjoch dit probleem en in ynformatyf foarbyld .
template string '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Basis HTML om te brûken by it meitsjen fan de popover. De popover's titlesille yn 'e .popover-inner. .popover-arrowsil de pylk fan 'e popover wurde. De bûtenste wrapper elemint moat hawwe de .popoverklasse en role="popover".
title string, elemint, funksje '' Standert titelwearde as titleattribút net oanwêzich is. As in funksje wurdt jûn, wurdt it neamd mei syn thisferwizing set nei it elemint dat de popover is hechte oan.
trigger string 'hover focus' Hoe popover wurdt aktivearre: klik, hover, fokus, hantlieding. Jo kinne meardere triggers trochjaan; skiede se mei in romte. 'manual'jout oan dat de popover programmatysk aktivearre wurdt fia de .popover('show'), .popover('hide')en .popover('toggle')metoaden; dizze wearde kin net kombinearre wurde mei in oare trigger. 'hover'op syn eigen sil resultearje yn popovers dy't kin net oanlutsen wurde fia it toetseboerd, en moat allinnich brûkt wurde as alternative metoaden foar it oerbringen fan deselde ynformaasje foar toetseboerd brûkers is oanwêzich.

Gegevensattributen foar yndividuele popovers

Opsjes foar yndividuele popovers kinne alternatyf wurde oantsjutte troch it brûken fan gegevensattributen, lykas hjirboppe útlein.

Mei help fan funksje meipopperConfig

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

Metoaden

Asynchrone metoaden en transysjes

Alle API-metoaden binne asynchrone en begjinne in oergong . Se komme werom nei de beller sa gau as de oergong is begon, mar foardat it einiget . Derneist sil in metoadeoprop op in oergongskomponint wurde negearre .

Sjoch ús JavaScript-dokumintaasje foar mear ynformaasje .

Metoade Beskriuwing
disable Ferwidert de mooglikheid om in popover fan in elemint te sjen. De popover sil allinich te sjen wêze kinne as it opnij ynskeakele is.
dispose Ferberget en ferneatiget de popover fan in elemint (Ferwidert bewarre gegevens op it DOM-elemint). Popovers dy't delegaasje brûke (dy't makke binne mei de selectoropsje ) kinne net yndividueel ferneatige wurde op neikommende trigger-eleminten.
enable Jout in popover fan in elemint de mooglikheid om te sjen. Popovers binne standert ynskeakele.
getInstance Statyske metoade wêrmei jo de popover-eksimplaar kinne krije ferbûn mei in DOM-elemint.
getOrCreateInstance Statyske metoade wêrmei jo de popover-eksimplaar kinne krije dy't ferbûn is mei in DOM-elemint, of in nij oanmeitsje foar it gefal dat it net inisjalisearre is.
hide Ferberget de popover fan in elemint. Keart werom nei de beller foardat de popover eins ferburgen is (dus foardat it hidden.bs.popoverbarren plakfynt). Dit wurdt beskôge as in "hânlieding" triggering fan de popover.
setContent Jout in manier om de ynhâld fan 'e popover te feroarjen nei syn inisjalisaasje.
show Bliuwt in popover fan in elemint. Keart werom nei de beller foardat de popover wirklik werjûn is (dus foardat it shown.bs.popoverevenemint bart). Dit wurdt beskôge as in "hânlieding" triggering fan de popover. Popovers wêrfan de titel en ynhâld beide gjin lingte hawwe, wurde nea werjûn.
toggle Skeakelt de popover fan in elemint. Keart werom nei de beller foardat de popover feitlik werjûn of ferburgen is (dus foardat it barren shown.bs.popoverof hidden.bs.popoverbart). Dit wurdt beskôge as in "hânlieding" triggering fan de popover.
toggleEnabled Wizigje de mooglikheid om in popover fan in elemint te sjen of te ferbergjen.
update Updatet de posysje fan in popover fan in elemint.
// 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'
})
De setContentmetoade akseptearret in objectargumint, dêr't eltse eigendom-kaai is in jildich stringselector binnen de popover sjabloan, en elke besibbe eigendom-wearde kin wêze string| element| function| null

Eveneminten

Barren Beskriuwing
hide.bs.popover Dit barren wurdt fuortendaliks ûntslein as de hideeksimplaarmetoade oanroppen is.
hidden.bs.popover Dit evenemint wurdt ûntslein as de popover klear is ferburgen foar de brûker (sil wachtsje op CSS-oergongen om te foltôgjen).
inserted.bs.popover Dit evenemint wurdt ûntslein nei it show.bs.popoverevenemint as it popover-sjabloan is tafoege oan de DOM.
show.bs.popover Dit evenemint fjoer fuortendaliks as de showeksimplaar metoade wurdt oanroppen.
shown.bs.popover Dit evenemint wurdt ûntslein as de popover sichtber makke is foar de brûker (sil wachtsje op CSS-oergongen om te foltôgjen).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})