Popoverji
Dokumentacija in primeri za dodajanje pojavnih oken Bootstrap, kot so tisti v iOS-u, kateremu koli elementu na vašem spletnem mestu.
Pregled
Stvari, ki jih morate vedeti pri uporabi vtičnika Popover:
- Popovers se za pozicioniranje zanašajo na knjižnico tretje osebe Popper . Vključiti morate popper.min.js pred
bootstrap.jsali uporabiti tisto,bootstrap.bundle.min.jski vsebuje Popper. - Popoveri zahtevajo vtičnik popover kot odvisnost.
- Popovers so opt-in zaradi učinkovitosti, zato jih morate inicializirati sami .
- Ničelna dolžina
titleincontentvrednosti ne bodo nikoli prikazale pojavnega pojava. - Določite
container: 'body', da se izognete težavam z upodabljanjem v kompleksnejših komponentah (kot so naše vnosne skupine, skupine gumbov itd.). - Sprožitev popoverjev na skritih elementih ne bo delovala.
- Popover za
.disabledalidisabledelemente je treba sprožiti na ovojnem elementu. - Ko se sprožijo iz sider, ki se prepletajo čez več črt, bodo popoverji centrirani med celotno širino sider. Uporabite
.text-nowrapna svojem<a>s, da se izognete temu vedenju. - Popoverja je treba skriti, preden so njihovi ustrezni elementi odstranjeni iz DOM.
- Popoverje je mogoče sprožiti zahvaljujoč elementu znotraj senčnega DOM.
prefers-reduced-motionmedijske poizvedbe. Oglejte si razdelek o
zmanjšanem gibanju v naši dokumentaciji o dostopnosti .
Nadaljujte z branjem in si oglejte, kako delujejo popoverji z nekaterimi primeri.
Primeri
Omogoči popoverje
Kot je omenjeno zgoraj, morate inicializirati pojavna okna, preden jih lahko uporabite. Eden od načinov inicializacije vseh pojavnih oken na strani bi bil, da jih izberete po njihovem data-bs-toggleatributu, takole:
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
Demo v živo
Uporabljamo JavaScript, podoben zgornjemu izrezku, da upodabljamo naslednji pojavni prikaz v živo. Naslovi so nastavljeni prek data-bs-title, vsebina telesa pa prek data-bs-content.
titleali
. data-bs-titleKo
titleje uporabljen, ga bo Popper samodejno zamenjal z,
data-bs-titleko bo element upodobljen.
<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>
Štiri smeri
Na voljo so štiri možnosti: zgoraj, desno, spodaj in levo. Pri uporabi Bootstrap v RTL so navodila zrcaljena. Nastavite data-bs-placementza spremembo smeri.
<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>
Po mericontainer
Ko imate na nadrejenem elementu nekaj slogov, ki motijo pojavni pojav, boste želeli določiti po meri container, tako da se bo HTML pojavnega elementa namesto tega pojavil znotraj tega elementa. To je pogosto v odzivnih tabelah, vnosnih skupinah ipd.
const popover = new bootstrap.Popover('.example-popover', {
container: 'body'
})
Druga situacija, ko boste želeli nastaviti eksplicitno meritev, so pojavni elementi znotraj modalnega pogovornega okna , da zagotovite, da je sam containerpojavni prikaz pripet modalu . To je še posebej pomembno za pojavna okna, ki vsebujejo interaktivne elemente – modalna pogovorna okna bodo ujela fokus, tako da uporabniki ne bodo mogli fokusirati ali aktivirati teh interaktivnih elementov, razen če je pojavni element podrejeni element modala.
const popover = new bootstrap.Popover('.example-popover', {
container: '.modal-body'
})
Popovi po meri
Dodano v v5.2.0Videz pojavnih oken lahko prilagodite s spremenljivkami CSS . Nastavimo razred po meri data-bs-custom-class="custom-popover"za obseg našega videza po meri in ga uporabimo za preglasitev nekaterih lokalnih spremenljivk CSS.
.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>
Opusti ob naslednjem kliku
Uporabite focussprožilec, da opustite pojavna okna ob naslednjem kliku uporabnika drugega elementa kot preklopni element.
Za opustitev ob naslednjem kliku je potrebna posebna oznaka
Za pravilno delovanje med brskalniki in platformami morate uporabiti <a>oznako, ne oznake <button>, vključiti pa morate tudi tabindexatribut.
<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'
})
Onemogočeni elementi
Elementi z disabledatributom niso interaktivni, kar pomeni, da jih uporabniki ne morejo premakniti ali klikniti, da bi sprožili pojavni prikaz (ali opis orodja). Kot nadomestno rešitev boste želeli sprožiti popover iz ovoja <div>ali <span>, v idealnem primeru narejenega za fokusiranje s tipkovnico, z uporabo tabindex="0".
Pri onemogočenih pojavnih sprožilcih boste morda raje izbrali data-bs-trigger="hover focus", da se pojavni pojav uporabnikom prikaže kot takojšnja vizualna povratna informacija, saj morda ne pričakujejo, da bodo kliknili onemogočen element.
<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
Spremenljivke
Dodano v v5.2.0Kot del Bootstrapovega razvijajočega se pristopa spremenljivk CSS, popoverji zdaj uporabljajo lokalne spremenljivke CSS .popoverza izboljšano prilagajanje v realnem času. Vrednosti za spremenljivke CSS so nastavljene prek Sass, tako da je še vedno podprto tudi prilagajanje Sass.
--#{$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 spremenljivke
$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;
Uporaba
Omogoči pojavna okna prek JavaScripta:
const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)
Omogočanje, da bodo popoverji delovali za uporabnike tipkovnic in podporne tehnologije
Če želite uporabnikom tipkovnice omogočiti aktiviranje vaših pojavnih elementov, jih dodajte samo elementom HTML, ki so tradicionalno osredotočeni na tipkovnico in so interaktivni (kot so povezave ali kontrolniki obrazcev). Čeprav lahko poljubne elemente HTML (kot <span>je s) omogočite fokusiranje z dodajanjem tabindex="0"atributa, bo to dodalo potencialno nadležne in zmedene tabulatorske postanke na neinteraktivnih elementih za uporabnike tipkovnice, večina podpornih tehnologij pa trenutno ne objavi vsebine pojavnega okna v tej situaciji . Poleg tega se ne zanašajte samo na hoversprožilec za svoje pojavne elemente, saj jih tako uporabniki tipkovnice ne bodo mogli sprožiti.
Čeprav lahko s to htmlmožnostjo v pojavna okna vstavite bogat, strukturiran HTML, močno priporočamo, da se izogibate dodajanju pretirane količine vsebine. Popoverji trenutno delujejo tako, da je njihova vsebina, ko so enkrat prikazana, povezana s sprožilnim elementom z aria-describedbyatributom. Posledično bo celotna vsebina popoverja objavljena uporabnikom podporne tehnologije kot en dolg, neprekinjen tok.
Poleg tega, čeprav je mogoče vključiti tudi interaktivne kontrolnike (kot so elementi obrazca ali povezave) v vaš pojavni element (z dodajanjem teh elementov med allowListdovoljene atribute in oznake), se zavedajte, da trenutno pojavni okvir ne upravlja vrstnega reda fokusa tipkovnice. Ko uporabnik tipkovnice odpre pojavni element, fokus ostane na prožilnem elementu in ker pojavni element običajno ne sledi takoj sprožilcu v strukturi dokumenta, ni nobenega zagotovila, da bo premikanje naprej/pritiskanjeTABpremakne uporabnika tipkovnice v samo pojavno okno. Skratka, preprosto dodajanje interaktivnih kontrolnikov v pojavni element bo verjetno naredilo te kontrolnike nedosegljive/neuporabne za uporabnike tipkovnic in uporabnike podpornih tehnologij ali pa bo vsaj povzročilo nelogičen splošni vrstni red fokusa. V teh primerih razmislite o uporabi modalnega pogovornega okna.
Opcije
Ker je možnosti mogoče posredovati prek podatkovnih atributov ali JavaScripta, lahko dodate ime možnosti v data-bs-, kot v data-bs-animation="{value}". Prepričajte se, da ste spremenili vrsto malega črke imena možnosti iz " camelCase " v " kebab-case ", ko posredujete možnosti prek podatkovnih atributov. Na primer, uporabite data-bs-custom-class="beautifier"namesto data-bs-customClass="beautifier".
Od Bootstrap 5.2.0 vse komponente podpirajo poskusni atribut rezerviranih podatkov, data-bs-configki lahko hrani preprosto konfiguracijo komponente kot niz JSON. Ko ima element atribute data-bs-config='{"delay":0, "title":123}'in data-bs-title="456", bo končna titlevrednost 456in ločeni atributi podatkov bodo preglasili vrednosti, podane na data-bs-config. Poleg tega lahko obstoječi atributi podatkov hranijo vrednosti JSON, kot je data-bs-delay='{"show":0,"hide":150}'.
sanitize,
sanitizeFn, in
allowListni mogoče zagotoviti z uporabo podatkovnih atributov.
| Ime | Vrsta | Privzeto | Opis |
|---|---|---|---|
allowList |
predmet | Privzeta vrednost | Objekt, ki vsebuje dovoljene atribute in oznake. |
animation |
logično | true |
Uporabite prehod CSS zbledenja na pojavni element. |
boundary |
niz, element | 'clippingParents' |
Meja omejitve prelivanja pojavnega elementa (velja samo za Popperjev modifikator preventOverflow). Privzeto je 'clippingParents'in lahko sprejme referenco HTMLElement (samo prek JavaScripta). Za več informacij se obrnite na dokumente Popper's detectOverflow . |
container |
niz, element, false | false |
Popover doda določenemu elementu. Primer: container: 'body'. Ta možnost je še posebej uporabna, ker vam omogoča, da pojavni element postavite v tok dokumenta blizu sprožilnega elementa – kar bo preprečilo, da bi pojavni element med spreminjanjem velikosti okna lebdel stran od sprožilnega elementa. |
content |
niz, element, funkcija | '' |
Privzeta vrednost vsebine, če data-bs-contentatribut ni prisoten. Če je podana funkcija, bo klicana s thissklicem, nastavljenim na element, na katerega je pritrjen popover. |
customClass |
niz, funkcija | '' |
Dodajte razrede v pojavni okvir, ko je prikazan. Upoštevajte, da bodo ti razredi dodani poleg vseh razredov, navedenih v predlogi. Če želite dodati več razredov, jih ločite s presledki: 'class-1 class-2'. Posredujete lahko tudi funkcijo, ki naj vrne en sam niz, ki vsebuje dodatna imena razredov. |
delay |
število, predmet | 0 |
Zakasnitev prikaza in skrivanja pojavnega pojava (ms)—ne velja za tip ročnega sprožilca. Če je navedena številka, se zakasnitev uporabi za skrij/prikaži. Struktura objekta je: delay: { "show": 500, "hide": 100 }. |
fallbackPlacements |
niz, niz | ['top', 'right', 'bottom', 'left'] |
Določite nadomestne umestitve tako, da zagotovite seznam umestitev v nizu (po prednostnem vrstnem redu). Za več informacij glejte Popperjeve dokumente o vedenju . |
html |
logično | false |
Dovoli HTML v pojavnem oknu. Če je res, bodo oznake HTML v pojavnem oknu titleupodobljene v pojavnem oknu. Če je nastavljeno na false, innerTextbo lastnost uporabljena za vstavljanje vsebine v DOM. Če vas skrbijo napadi XSS, uporabite besedilo. |
offset |
število, niz, funkcija | [0, 0] |
Odmik pojavnega elementa glede na cilj. V podatkovnih atributih lahko posredujete niz z vrednostmi, ločenimi z vejico, kot je: data-bs-offset="10,20". Ko se funkcija uporablja za določanje odmika, se pokliče z objektom, ki kot prvi argument vsebuje poperjevo postavitev, referenco in poperjev rekt. Vozlišče sprožilnega elementa DOM je posredovano kot drugi argument. Funkcija mora vrniti matriko z dvema številoma: drsenje , razdalja . Za več informacij glejte Popperjevo dokumentacijo o offsetu . |
placement |
niz, funkcija | 'top' |
Kako postaviti popover: samodejno, zgoraj, spodaj, levo, desno. Ko autoje naveden, bo dinamično preusmeril pojavni element. Ko se funkcija uporabi za določitev umestitve, se pokliče s pojavnim vozliščem DOM kot prvim argumentom in prožilnim elementom DOM vozliščem kot drugim. Kontekst thisje nastavljen na pojavni primerek. |
popperConfig |
null, predmet, funkcija | null |
Če želite spremeniti privzeto konfiguracijo Popperja za Bootstrap, glejte Popperjeva konfiguracija . Ko se funkcija uporabi za ustvarjanje Popperjeve konfiguracije, se pokliče z objektom, ki vsebuje privzeto Popperjevo konfiguracijo Bootstrapa. Pomaga vam pri uporabi in združitvi privzetih nastavitev z vašo lastno konfiguracijo. Funkcija mora vrniti konfiguracijski objekt za Popper. |
sanitize |
logično | true |
Omogočite ali onemogočite čiščenje. Če je aktivirano 'template', bodo možnosti 'content'in 'title'možnosti razčiščene. |
sanitizeFn |
null, funkcija | null |
Tukaj lahko zagotovite lastno funkcijo razkuževanja. To je lahko uporabno, če za izvajanje sanacije raje uporabljate namensko knjižnico. |
selector |
string, false | false |
Če je na voljo izbirnik, bodo pojavni objekti dodeljeni navedenim ciljem. V praksi se to uporablja tudi za uporabo popoverjev za dinamično dodane elemente DOM ( jQuery.onpodpora). Oglejte si to številko in informativen primer . |
template |
vrvica | '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' |
Osnovni HTML za uporabo pri ustvarjanju pojavnega okna. Popoverji titlebodo vbrizgani v .popover-inner. .popover-arrowbo postala popoverjeva puščica. Zunanji ovojni element mora imeti .popoverrazred in role="popover". |
title |
niz, element, funkcija | '' |
Privzeta vrednost naslova, če titleatribut ni prisoten. Če je podana funkcija, bo klicana s thissklicem, nastavljenim na element, na katerega je pritrjen popover. |
trigger |
vrvica | 'hover focus' |
Kako se sproži popover: klik, lebdenje, fokus, ročno. Lahko prenesete več sprožilcev; ločite jih s presledkom. 'manual'označuje, da bo popover sprožen programsko prek metod in .popover('show'); te vrednosti ni mogoče kombinirati z nobenim drugim sprožilcem. samo po sebi bo povzročilo popoverje, ki jih ni mogoče sprožiti prek tipkovnice, in bi jih bilo treba uporabiti le, če so prisotne alternativne metode za posredovanje istih informacij uporabnikom tipkovnice..popover('hide').popover('toggle')'hover' |
Atributi podatkov za posamezne popoverje
Možnosti za posamezna pojavna okna se lahko določijo tudi z uporabo podatkovnih atributov, kot je razloženo zgoraj.
Uporaba funkcije zpopperConfig
const popover = new bootstrap.Popover(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Metode
Asinhrone metode in prehodi
Vse metode API so asinhrone in začnejo prehod . K klicatelju se vrnejo takoj, ko se prehod začne, vendar preden se konča . Poleg tega bo prezrt klic metode prehodne komponente .
Za več informacij si oglejte našo dokumentacijo JavaScript .
| Metoda | Opis |
|---|---|
disable |
Odstrani možnost prikaza pojavnega elementa. Popover bo lahko prikazan le, če je ponovno omogočen. |
dispose |
Skrije in uniči pojavni element elementa (Odstrani shranjene podatke o elementu DOM). Popoverjev, ki uporabljajo delegiranje (ki so ustvarjeni z možnostjo selector) , ni mogoče posamično uničiti na podrejenih prožilnih elementih. |
enable |
Omogoča prikaz pojavnega elementa. Popoverji so privzeto omogočeni. |
getInstance |
Statična metoda, ki vam omogoča, da dobite pojavni primerek, povezan z elementom DOM. |
getOrCreateInstance |
Statična metoda, ki vam omogoča, da dobite pojavni primerek, povezan z elementom DOM, ali ustvarite novega, če ni bil inicializiran. |
hide |
Skrije pojavni element elementa. Vrne se k klicatelju, preden je bil popover dejansko skrit (tj. preden hidden.bs.popoverpride do dogodka). To velja za »ročno« sprožitev popoverja. |
setContent |
Omogoča spreminjanje vsebine pojavnega okna po njegovi inicializaciji. |
show |
Razkrije popover elementa. Vrne se k klicatelju, preden je pojavno okno dejansko prikazano (tj. preden shown.bs.popoverpride do dogodka). To velja za »ročno« sprožitev popoverja. Popoverji, katerih naslov in vsebina sta ničelne dolžine, niso nikoli prikazani. |
toggle |
Preklopi pojavni element elementa. Vrne se klicatelju, preden je pojavni element dejansko prikazan ali skrit (tj. preden pride do dogodka shown.bs.popoverali ). hidden.bs.popoverTo velja za »ročno« sprožitev popoverja. |
toggleEnabled |
Preklopi možnost, da je pojavni element elementa prikazan ali skrit. |
update |
Posodobi položaj pojavnega elementa. |
// 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'
})
setContentsprejme
objectargument, pri čemer je vsak ključ lastnosti veljaven
stringizbirnik znotraj predloge pojavnega okna, vsaka povezana vrednost lastnosti pa je lahko
string|
element|
function|
null
Dogodki
| Dogodek | Opis |
|---|---|
hide.bs.popover |
Ta dogodek se sproži takoj, ko hideje bila poklicana metoda primerka. |
hidden.bs.popover |
Ta dogodek se sproži, ko se pojavni pomik neha skriti pred uporabnikom (počakal bo, da se zaključijo prehodi CSS). |
inserted.bs.popover |
Ta dogodek se sproži po show.bs.popoverdogodku, ko je bila v DOM dodana popover predloga. |
show.bs.popover |
Ta dogodek se sproži takoj, ko showse pokliče metoda primerka. |
shown.bs.popover |
Ta dogodek se sproži, ko postane pojavni element viden uporabniku (počakal bo, da se zaključijo prehodi CSS). |
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
// do something...
})