Slaan oor na hoofinhoud Slaan oor na dokumentnavigasie
Check
in English

Popovers

Dokumentasie en voorbeelde vir die byvoeging van Bootstrap-opspringers, soos dié wat in iOS gevind word, by enige element op jou werf.

Oorsig

Dinge om te weet wanneer jy die popover-inprop gebruik:

  • Popovers maak staat op die derdeparty-biblioteek Popper vir posisionering. Jy moet popper.min.js voor insluit bootstrap.js, of een gebruik bootstrap.bundle.min.jswat Popper bevat.
  • Popovers vereis die popover-inprop as 'n afhanklikheid.
  • Popovers is intekening vir prestasieredes, so jy moet dit self inisialiseer .
  • Zero-lengte titleen contentwaardes sal nooit 'n popover wys nie.
  • Spesifiseer container: 'body'om te verhoed dat probleme in meer komplekse komponente weergegee word (soos ons invoergroepe, knoppiegroepe, ens.).
  • Om popovers op versteekte elemente te aktiveer sal nie werk nie.
  • Popovers vir .disabledof disabledelemente moet op 'n omhulelement geaktiveer word.
  • Wanneer dit geaktiveer word vanaf ankers wat oor veelvuldige lyne draai, sal popovers gesentreer word tussen die ankers se algehele breedte. Gebruik .text-nowrapop jou <a>s om hierdie gedrag te vermy.
  • Popovers moet versteek word voordat hul ooreenstemmende elemente uit die DOM verwyder is.
  • Popovers kan geaktiveer word danksy 'n element binne 'n skadu-DOM.
By verstek gebruik hierdie komponent die ingeboude inhoudreiniger, wat enige HTML-elemente wat nie eksplisiet toegelaat word nie, verwyder. Sien die ontsmettingsmiddel-afdeling in ons JavaScript-dokumentasie vir meer besonderhede.
Die animasie-effek van hierdie komponent is afhanklik van die prefers-reduced-motionmedianavraag. Sien die verminderde beweging-afdeling van ons toeganklikheidsdokumentasie .

Hou aan om te lees om te sien hoe popovers werk met 'n paar voorbeelde.

Voorbeelde

Aktiveer popovers

Soos hierbo genoem, moet jy popovers inisialiseer voordat hulle gebruik kan word. Een manier om alle opspringers op 'n bladsy te inisialiseer, is om hulle volgens hul data-bs-togglekenmerk te kies, soos so:

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

Regstreekse demo

Ons gebruik JavaScript soortgelyk aan die brokkie hierbo om die volgende lewendige popover weer te gee. Titels word gestel via data-bs-titleen liggaamsinhoud word gestel via data-bs-content.

Gebruik gerus óf titleóf data-bs-titlein jou HTML. Wanneer titledit gebruik word, sal Popper dit outomaties vervang met data-bs-titlewanneer die element weergegee word.
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>

Vier rigtings

Vier opsies is beskikbaar: bo, regs, onder en links. Aanwysings word weerspieël wanneer Bootstrap in RTL gebruik word. Stel data-bs-placementom die rigting te verander.

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>

Pasgemaakcontainer

Wanneer jy 'n paar style op 'n ouer-element het wat inmeng met 'n pop-over, sal jy 'n pasgemaakte wil spesifiseer containersodat die opspring se HTML eerder binne daardie element verskyn. Dit is algemeen in responsiewe tabelle, invoergroepe en dies meer.

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

Nog 'n situasie waar jy 'n eksplisiete pasgemaakte sal wil stel, containeris popovers binne 'n modale dialoog , om seker te maak dat die popover self aan die modaal gevoeg is. Dit is veral belangrik vir opspringers wat interaktiewe elemente bevat – modale dialoë sal fokus vasvang, so tensy die opspringer 'n kinderelement van die modale is, sal gebruikers nie hierdie interaktiewe elemente kan fokus of aktiveer nie.

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

Pasgemaakte popovers

Bygevoeg in v5.2.0

U kan die voorkoms van popovers aanpas deur CSS-veranderlikes te gebruik . Ons stel 'n pasgemaakte klas met data-bs-custom-class="custom-popover"om ons pasgemaakte voorkoms te omvang en gebruik dit om sommige van die plaaslike CSS-veranderlikes te ignoreer.

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

Maak toe met die volgende klik

Gebruik die focussneller om opspringers op die gebruiker se volgende klik van 'n ander element as die wissel-element af te maak.

Spesifieke opmaak word vereis vir wegmaak-met-volgende-klik

Vir behoorlike kruisblaaier- en kruisplatformgedrag, moet jy die <a>merker gebruik, nie die <button>merker nie, en jy moet ook 'n tabindexkenmerk insluit.

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

Gedeaktiveerde elemente

Elemente met die disabledkenmerk is nie interaktief nie, wat beteken dat gebruikers nie kan beweeg of daarop klik om 'n popover (of nutswenk) te aktiveer nie. As 'n oplossing, sal jy die popover wil aktiveer vanaf 'n omhulsel <div>of <span>, ideaal gemaak sleutelbord-fokusbaar met tabindex="0".

Vir gedeaktiveerde popover-snellers, kan jy ook verkies data-bs-trigger="hover focus"dat die popover as onmiddellike visuele terugvoer aan jou gebruikers verskyn, aangesien hulle dalk nie verwag om op 'n gedeaktiveerde element te klik nie.

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

Veranderlikes

Bygevoeg in v5.2.0

As deel van Bootstrap se ontwikkelende CSS-veranderlikebenadering, gebruik popovers nou plaaslike CSS-veranderlikes aan .popovervir verbeterde intydse aanpassing. Waardes vir die CSS-veranderlikes word via Sass ingestel, so Sass-aanpassing word ook steeds ondersteun.

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

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

Gebruik

Aktiveer popovers via JavaScript:

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

Om popovers te laat werk vir sleutelbord- en hulptegnologiegebruikers

Om sleutelbordgebruikers toe te laat om jou popovers te aktiveer, moet jy dit net by HTML-elemente voeg wat tradisioneel sleutelbordfokusbaar en interaktief is (soos skakels of vormkontroles). Alhoewel arbitrêre HTML-elemente (soos <span>s) fokusbaar gemaak kan word deur die tabindex="0"kenmerk by te voeg, sal dit potensieel irriterende en verwarrende tabstops op nie-interaktiewe elemente vir sleutelbordgebruikers byvoeg, en die meeste ondersteunende tegnologieë kondig tans nie die popover se inhoud aan in hierdie situasie . Moet ook nie net staatmaak hoveras die sneller vir jou popovers nie, want dit sal dit onmoontlik maak om dit vir sleutelbordgebruikers te aktiveer.

Alhoewel jy ryk, gestruktureerde HTML in popovers kan invoeg met die htmlopsie, beveel ons sterk aan dat jy vermy om 'n oormatige hoeveelheid inhoud by te voeg. Die manier waarop popovers tans werk, is dat, sodra dit vertoon is, hul inhoud gekoppel is aan die sneller-element met die aria-describedbykenmerk. Gevolglik sal die hele inhoud van die popover aan ondersteunende tegnologiegebruikers aangekondig word as een lang, ononderbroke stroom.

Daarbenewens, alhoewel dit moontlik is om ook interaktiewe kontroles (soos vormelemente of skakels) in jou popover in te sluit (deur hierdie elemente by die allowListtoegelate kenmerke en etikette te voeg), moet jy bewus wees dat tans die popover nie sleutelbordfokusvolgorde bestuur nie. Wanneer 'n sleutelbordgebruiker 'n popover oopmaak, bly fokus op die snellerelement, en aangesien die popover gewoonlik nie onmiddellik die sneller in die dokument se struktuur volg nie, is daar geen waarborg dat vorentoe beweeg/druk nie.TABsal 'n sleutelbordgebruiker na die popover self skuif. Kortom, die toevoeging van interaktiewe kontroles by 'n popover sal waarskynlik hierdie kontroles onbereikbaar/onbruikbaar maak vir sleutelbordgebruikers en gebruikers van ondersteunende tegnologieë, of ten minste 'n onlogiese algehele fokusvolgorde maak. In hierdie gevalle, oorweeg dit om eerder 'n modale dialoog te gebruik.

Opsies

Aangesien opsies deur data-kenmerke of JavaScript deurgegee kan word, kan jy 'n opsienaam byvoeg data-bs-, soos in data-bs-animation="{value}". Maak seker dat jy die kastipe van die opsienaam verander van " camelCase " na " kebab-case " wanneer die opsies deur data-kenmerke deurgegee word. Gebruik byvoorbeeld in data-bs-custom-class="beautifier"plaas van data-bs-customClass="beautifier".

Vanaf Bootstrap 5.2.0 ondersteun alle komponente 'n eksperimentele gereserveerde data-kenmerk data-bs-configwat eenvoudige komponentkonfigurasie as 'n JSON-string kan huisves. Wanneer 'n element data-bs-config='{"delay":0, "title":123}'en data-bs-title="456"kenmerke het, sal die finale titlewaarde wees 456en die afsonderlike data-kenmerke sal waardes wat op gegee word, ignoreer data-bs-config. Daarbenewens kan bestaande data-kenmerke JSON-waardes soos data-bs-delay='{"show":0,"hide":150}'.

sanitizeLet daarop dat die , sanitizeFn, en allowListopsies om sekuriteitsredes nie met behulp van data-kenmerke verskaf kan word nie.
Naam Tik Verstek Beskrywing
allowList voorwerp Standaard waarde Voorwerp wat toegelate eienskappe en etikette bevat.
animation boolean true Pas 'n CSS-vervaag-oorgang toe op die popover.
boundary string, element 'clippingParents' Oorloop beperking grens van die oorloop (geld slegs vir Popper se voorkom Oorloop wysiger). By verstek is 'clippingParents'en kan dit 'n HTMLElement-verwysing aanvaar (slegs via JavaScript). Vir meer inligting, verwys na Popper se detectOverflow-dokumente .
container string, element, vals false Voeg die popover by 'n spesifieke element. Voorbeeld: container: 'body'. Hierdie opsie is veral nuttig omdat dit jou in staat stel om die opspringer in die vloei van die dokument naby die snellerelement te plaas - wat sal verhoed dat die opspringer wegdryf van die snellerelement tydens 'n venstergrootteverandering.
content string, element, funksie '' Verstek inhoudwaarde as data-bs-contentkenmerk nie teenwoordig is nie. As 'n funksie gegee word, sal dit opgeroep word met sy thisverwysing gestel na die element waaraan die popover gekoppel is.
customClass string, funksie '' Voeg klasse by die popover wanneer dit gewys word. Let daarop dat hierdie klasse bygevoeg sal word bykomend tot enige klasse wat in die sjabloon gespesifiseer word. Om veelvuldige klasse by te voeg, skei hulle met spasies: 'class-1 class-2'. Jy kan ook 'n funksie deurgee wat 'n enkele string moet terugstuur wat bykomende klasname bevat.
delay nommer, voorwerp 0 Vertraag die wys en verberg van die popover (ms)—is nie van toepassing op handmatige snellertipe nie. As 'n nommer verskaf word, word vertraging toegepas op beide versteek/wys. Voorwerpstruktuur is: delay: { "show": 500, "hide": 100 }.
fallbackPlacements string, skikking ['top', 'right', 'bottom', 'left'] Definieer terugvalplasings deur 'n lys van plasings in 'n skikking te verskaf (in volgorde van voorkeur). Vir meer inligting, verwys na Popper se gedragsdokumente .
html boolean false Laat HTML in die popover toe. As dit waar is, sal HTML-merkers in die popover's titlein die popover weergegee word. Indien onwaar, innerTextsal eiendom gebruik word om inhoud in die DOM in te voeg. Gebruik teks as jy bekommerd is oor XSS-aanvalle.
offset getal, string, funksie [0, 0] Offset van die popover relatief tot sy teiken. Jy kan 'n string in data-kenmerke met kommageskeide waardes soos: data-bs-offset="10,20". Wanneer 'n funksie gebruik word om die offset te bepaal, word dit opgeroep met 'n objek wat die drukkerplasing, die verwysing en drukkerrekse as sy eerste argument bevat. Die snellerelement DOM-nodus word as die tweede argument deurgegee. Die funksie moet 'n skikking met twee getalle terugstuur: gly , afstand . Vir meer inligting, verwys na Popper se offset-dokumente .
placement string, funksie 'top' Hoe om die popover te plaas: outomaties, bo, onder, links, regs. Wanneer autogespesifiseer word, sal dit die popover dinamies heroriënteer. Wanneer 'n funksie gebruik word om die plasing te bepaal, word dit opgeroep met die popover DOM-nodus as sy eerste argument en die snellerelement DOM-nodus as sy tweede. Die thiskonteks is ingestel op die popover-instansie.
popperConfig nul, voorwerp, funksie null Sien Popper se konfigurasie om Bootstrap se verstek Popper-konfigurasie te verander . Wanneer 'n funksie gebruik word om die Popper-konfigurasie te skep, word dit genoem met 'n voorwerp wat die Bootstrap se verstek Popper-konfigurasie bevat. Dit help jou om die verstek met jou eie konfigurasie te gebruik en saam te voeg. Die funksie moet 'n konfigurasie-objek vir Popper terugstuur.
sanitize boolean true Aktiveer of deaktiveer die ontsmetting. Indien geaktiveer 'template', 'content'en 'title'opsies sal ontsmet word.
sanitizeFn nul, funksie null Hier kan jy jou eie ontsmettingsfunksie verskaf. Dit kan nuttig wees as jy verkies om 'n toegewyde biblioteek te gebruik om ontsmetting uit te voer.
selector string, vals false As 'n kieser verskaf word, sal popover-objekte na die gespesifiseerde teikens gedelegeer word. In die praktyk word dit gebruik om ook popovers toe te pas op dinamies bygevoegde DOM-elemente ( jQuery.onondersteuning). Sien hierdie uitgawe en 'n insiggewende voorbeeld .
template string '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Baseer HTML om te gebruik wanneer die popover geskep word. Die popover's titlesal in die .popover-inner. .popover-arrowsal die popover se pyl word. Die buitenste omhulselelement moet die .popoverklas en role="popover".
title string, element, funksie '' Verstek titelwaarde as titlekenmerk nie teenwoordig is nie. As 'n funksie gegee word, sal dit opgeroep word met sy thisverwysing gestel na die element waaraan die popover gekoppel is.
trigger string 'hover focus' Hoe popover geaktiveer word: klik, beweeg, fokus, handmatig. Jy kan verskeie snellers slaag; skei hulle met 'n spasie. 'manual'dui aan dat die popover programmaties geaktiveer sal word via die .popover('show'), .popover('hide')en .popover('toggle')metodes; hierdie waarde kan nie met enige ander sneller gekombineer word nie. 'hover'op sy eie sal lei tot popovers wat nie via die sleutelbord geaktiveer kan word nie, en moet slegs gebruik word indien alternatiewe metodes vir die oordra van dieselfde inligting vir sleutelbordgebruikers teenwoordig is.

Data-kenmerke vir individuele popovers

Opsies vir individuele popovers kan alternatiewelik gespesifiseer word deur die gebruik van data-kenmerke, soos hierbo verduidelik.

Die gebruik van funksie metpopperConfig

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

Metodes

Asinchroniese metodes en oorgange

Alle API-metodes is asynchronies en begin 'n oorgang . Hulle keer terug na die oproeper sodra die oorgang begin is, maar voordat dit eindig . Daarbenewens sal 'n metode-oproep op 'n oorgangskomponent geïgnoreer word .

Sien ons JavaScript-dokumentasie vir meer inligting .

Metode Beskrywing
disable Verwyder die vermoë vir 'n element se popover om gewys te word. Die opspringer sal slegs gewys kan word as dit weer geaktiveer is.
dispose Versteek en vernietig 'n element se popover (Verwyder gestoorde data op die DOM-element). Popovers wat delegering gebruik (wat met die selectoropsie geskep word ) kan nie individueel op afstammelinge-snellerelemente vernietig word nie.
enable Gee 'n element se popover die vermoë om gewys te word. Popovers is by verstek geaktiveer.
getInstance Statiese metode waarmee u die popover-instansie kan kry wat met 'n DOM-element geassosieer word.
getOrCreateInstance Statiese metode wat jou toelaat om die popover-instansie te kry wat met 'n DOM-element geassosieer word, of 'n nuwe een te skep ingeval dit nie geïnisialiseer is nie.
hide Versteek 'n element se popover. Keer terug na die beller voordat die popover eintlik versteek is (dws voor die hidden.bs.popovergebeurtenis plaasvind). Dit word beskou as 'n "handmatige" sneller van die popover.
setContent Gee 'n manier om die popover se inhoud te verander na sy inisialisering.
show Onthul 'n element se popover. Keer terug na die oproeper voordat die popover werklik gewys is (dws voor die shown.bs.popovergebeurtenis plaasvind). Dit word beskou as 'n "handmatige" sneller van die popover. Popovers waarvan die titel en inhoud beide nul-lengte is, word nooit vertoon nie.
toggle Wissel 'n element se popover. Keer terug na die beller voordat die popover werklik gewys of versteek is (dws voordat die shown.bs.popoverof hidden.bs.popovergebeurtenis plaasvind). Dit word beskou as 'n "handmatige" sneller van die popover.
toggleEnabled Wissel die vermoë vir 'n element se popover om gewys of versteek te word.
update Dateer die posisie van 'n element se popover op.
// 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'
})
Die setContentmetode aanvaar 'n objectargument, waar elke eiendom-sleutel 'n geldige stringkeurder binne die popover-sjabloon is, en elke verwante eienskap-waarde kan wees string| element| function| null

Gebeurtenisse

Gebeurtenis Beskrywing
hide.bs.popover Hierdie gebeurtenis word onmiddellik afgevuur wanneer die hideinstansiemetode geroep is.
hidden.bs.popover Hierdie gebeurtenis word afgevuur wanneer die popover klaar vir die gebruiker versteek is (sal wag vir CSS-oorgange om te voltooi).
inserted.bs.popover Hierdie gebeurtenis word afgevuur na die show.bs.popovergebeurtenis wanneer die popover-sjabloon by die DOM gevoeg is.
show.bs.popover Hierdie gebeurtenis begin onmiddellik wanneer die showinstansiemetode geroep word.
shown.bs.popover Hierdie gebeurtenis word afgevuur wanneer die opspringer sigbaar gemaak is vir die gebruiker (sal wag vir CSS-oorgange om te voltooi).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})