Popovers
Dokumentacija i primjeri za dodavanje Bootstrap skočnih prozora, poput onih u iOS-u, na bilo koji element na vašoj web-lokaciji.
Pregled
Stvari koje trebate znati kada koristite dodatak za popover:
- Popovers se oslanjaju na biblioteku treće strane Popper za pozicioniranje. Morate uključiti popper.min.js prije
bootstrap.js
ili koristiti onajbootstrap.bundle.min.js
koji sadrži Popper. - Popovers zahtijevaju dodatak za popover kao ovisnost.
- Popovers su uključeni iz razloga performansi, tako da ih morate sami inicijalizirati .
- Nulta dužina
title
icontent
vrijednosti nikada neće prikazati skočni prozor. - Odredite
container: 'body'
kako biste izbjegli probleme s prikazivanjem u složenijim komponentama (kao što su naše grupe za unos, grupe dugmadi, itd.). - Pokretanje iskačućih prikaza na skrivenim elementima neće raditi.
- Skočni prozori za
.disabled
ilidisabled
elemente moraju se pokrenuti na elementu omotača. - Kada se aktiviraju iz sidra koja se premotaju preko više linija, skočni prozori će biti centrirani između ukupne širine sidra. Koristite
.text-nowrap
na vašem<a>
s da biste izbjegli ovo ponašanje. - Popovers moraju biti skriveni prije nego što se njihovi odgovarajući elementi uklone iz DOM-a.
- Popovers se mogu pokrenuti zahvaljujući elementu unutar DOM-a u sjeni.
prefers-reduced-motion
medijskom upitu. Pogledajte odjeljak o
smanjenom pokretu u našoj dokumentaciji o pristupačnosti .
Nastavite čitati kako biste vidjeli kako iskočnici funkcioniraju s nekim primjerima.
Primjeri
Omogući popove
Kao što je gore spomenuto, morate inicijalizirati popove prije nego što se mogu koristiti. Jedan od načina da se inicijaliziraju svi skočni prozori na stranici bio bi da ih odaberete prema njihovom data-bs-toggle
atributu, na primjer:
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
Demo uživo
Koristimo JavaScript sličan gore navedenom isječku za prikazivanje sljedećeg živog skočnog prikaza. Naslovi se postavljaju putem data-bs-title
, a sadržaj tijela se postavlja putem data-bs-content
.
title
ili
data-bs-title
u svom HTML-u. Kada
title
se koristi, Popper će ga automatski zamijeniti
data-bs-title
kada se element renderira.
<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>
Četiri pravca
Dostupne su četiri opcije: gore, desno, dolje i lijevo. Uputstva se preslikavaju kada koristite Bootstrap u RTL-u. Postavite data-bs-placement
za promjenu smjera.
<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
Kada imate neke stilove na roditeljskom elementu koji ometaju iskačući prikaz, htjet ćete navesti prilagođeni container
tako da se HTML iskačućeg elementa umjesto toga pojavljuje unutar tog elementa. Ovo je uobičajeno u responzivnim tabelama, ulaznim grupama i slično.
const popover = new bootstrap.Popover('.example-popover', {
container: 'body'
})
Još jedna situacija u kojoj ćete htjeti postaviti eksplicitno prilagođeno container
jesu iskačući prozori unutar modalnog dijaloga , kako biste bili sigurni da je sam iskačući prozor dodat modalnom. Ovo je posebno važno za iskačuće elemente koji sadrže interaktivne elemente – modalni dijalozi će uhvatiti fokus, tako da osim ako iskačući element nije podređeni element modalnog, korisnici neće moći fokusirati ili aktivirati ove interaktivne elemente.
const popover = new bootstrap.Popover('.example-popover', {
container: '.modal-body'
})
Prilagođeni popovers
Dodato u v5.2.0Možete prilagoditi izgled popovera koristeći CSS varijable . Postavljamo prilagođenu klasu sa data-bs-custom-class="custom-popover"
za opseg našeg prilagođenog izgleda i koristimo je za nadjačavanje nekih lokalnih CSS varijabli.
.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>
Odbacite sljedećim klikom
Upotrijebite focus
okidač da odbacite iskačuće prikaze pri sljedećem kliku korisnika na element koji se razlikuje od elementa za prebacivanje.
Posebne oznake potrebne za odbacivanje pri sljedećem kliku
Za pravilno ponašanje među pretraživačima i platformama, morate koristiti <a>
oznaku, a ne oznaku <button>
, a također morate uključiti tabindex
atribut.
<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'
})
Onemogućeni elementi
Elementi s disabled
atributom nisu interaktivni, što znači da korisnici ne mogu preći pokazivačem miša ili kliknuti na njih da bi pokrenuli skočni prozor (ili opis alata). Kao zaobilazno rešenje, poželećete da pokrenete iskačući prozor iz omotača <div>
ili <span>
, idealno napravljenog za fokusiranje na tastaturi koristeći tabindex="0"
.
Za onemogućene okidače iskačućeg prikaza, možda ćete više voljeti data-bs-trigger="hover focus"
da se iskačući prikaz prikaže kao neposredna vizualna povratna informacija vašim korisnicima jer možda neće očekivati da će kliknuti na onemogućeni 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
Varijable
Dodato u v5.2.0Kao dio Bootstrap-ovog evoluirajućeg pristupa CSS varijabli, popovers sada koriste lokalne CSS varijable uključene .popover
za poboljšanu prilagodbu u realnom vremenu. Vrijednosti za CSS varijable se postavljaju putem Sass-a, tako da je i Sass prilagođavanje i dalje podržano.
--#{$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 varijable
$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;
Upotreba
Omogućite popovers putem JavaScripta:
const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)
Omogućavanje rada iskakanja za korisnike tastature i pomoćne tehnologije
Da biste omogućili korisnicima tastature da aktiviraju vaše skočne prozore, trebali biste ih dodati samo u HTML elemente koji su tradicionalno fokusirani na tipkovnicu i interaktivni (kao što su veze ili kontrole obrasca). Iako se proizvoljni HTML elementi (kao što je <span>
s) mogu fokusirati dodavanjem tabindex="0"
atributa, ovo će dodati potencijalno dosadne i zbunjujuće tab stope na neinteraktivnim elementima za korisnike tastature, a većina pomoćnih tehnologija trenutno ne najavljuje sadržaj skočnog prozora u ovoj situaciji . Osim toga, nemojte se oslanjati samo na hover
okidač za vaše iskačuće poruke, jer će to onemogućiti njihovo pokretanje za korisnike tipkovnice.
Iako možete umetnuti bogat, strukturiran HTML u skočne prozore pomoću html
opcije, toplo preporučujemo da izbjegavate dodavanje prevelike količine sadržaja. Način na koji iskačući oglasi trenutno funkcionišu je da, kada se jednom prikažu, njihov sadržaj je vezan za element okidača sa aria-describedby
atributom. Kao rezultat toga, cjelokupni sadržaj popovera bit će najavljen korisnicima pomoćne tehnologije kao jedan dugi, neprekinuti stream.
Osim toga, iako je moguće uključiti interaktivne kontrole (kao što su elementi obrasca ili veze) u vaš skočni prozor (dodavanjem ovih elemenata u allowList
dozvoljene atribute i oznake), imajte na umu da trenutno skočni prozor ne upravlja redoslijedom fokusa na tastaturi. Kada korisnik tastature otvori skočni prozor, fokus ostaje na elementu okidača, a kako iskakanje obično ne slijedi odmah iza okidača u strukturi dokumenta, ne postoji garancija da će se pomicanje naprijed/pritisakTABće premjestiti korisnika tastature u sam skočni prozor. Ukratko, jednostavno dodavanje interaktivnih kontrola u skočni prozor će vjerovatno učiniti ove kontrole nedostižnim/neupotrebljivim za korisnike tastature i pomoćne tehnologije, ili će u najmanju ruku stvoriti nelogičan opći redoslijed fokusa. U ovim slučajevima, razmislite o korištenju modalnog dijaloga.
Opcije
Kako se opcije mogu proslijediti putem atributa podataka ili JavaScripta, možete dodati naziv opcije u data-bs-
, kao u data-bs-animation="{value}"
. Obavezno promijenite tip slučaja naziva opcije iz “ camelCase ” u “ kebab-case ” prilikom prosljeđivanja opcija putem atributa podataka. Na primjer, koristite data-bs-custom-class="beautifier"
umjesto data-bs-customClass="beautifier"
.
Od Bootstrapa 5.2.0, sve komponente podržavaju eksperimentalni atribut rezerviranih podataka data-bs-config
koji može smjestiti jednostavnu konfiguraciju komponente kao JSON string. Kada element ima atribute data-bs-config='{"delay":0, "title":123}'
i data-bs-title="456"
, konačna title
vrijednost će biti 456
, a zasebni atributi podataka će nadjačati vrijednosti date na data-bs-config
. Osim toga, postojeći atributi podataka mogu sadržavati JSON vrijednosti poput data-bs-delay='{"show":0,"hide":150}'
.
sanitize
,
sanitizeFn
i
allowList
ne mogu dostaviti korištenjem atributa podataka.
Ime | Tip | Default | Opis |
---|---|---|---|
allowList |
objekt | Zadana vrijednost | Objekt koji sadrži dozvoljene atribute i oznake. |
animation |
boolean | true |
Primijenite CSS fade prijelaz na skočni prozor. |
boundary |
string, element | 'clippingParents' |
Granica ograničenja preklapanja iskakanja (odnosi se samo na Popperov modifikator preventOverflow). Podrazumevano, on je 'clippingParents' i može prihvatiti referencu HTMLElementa (samo putem JavaScripta). Za više informacija pogledajte Popper's detectOverflow dokumente . |
container |
string, element, false | false |
Dodaje skočni prozor određenom elementu. Primjer: container: 'body' . Ova opcija je posebno korisna po tome što vam omogućava da pozicionirate iskačući deo u toku dokumenta u blizini pokretačkog elementa - što će sprečiti da iskačući deo odlebdi od elementa za okidanje tokom promene veličine prozora. |
content |
string, element, funkcija | '' |
Zadana vrijednost sadržaja ako data-bs-content atribut nije prisutan. Ako je data funkcija, ona će biti pozvana sa svojom this referencom postavljenom na element za koji je skočni prozor povezan. |
customClass |
niz, funkcija | '' |
Dodajte klase u skočni prozor kada se prikaže. Imajte na umu da će ove klase biti dodane kao dodatak svim klasama navedenim u predlošku. Da biste dodali više klasa, razdvojite ih razmacima: 'class-1 class-2' . Također možete proslijediti funkciju koja bi trebala vratiti jedan string koji sadrži dodatna imena klasa. |
delay |
broj, objekat | 0 |
Odgoda prikazivanja i sakrivanja iskačućeg prikaza (ms)—ne odnosi se na tip ručnog okidača. Ako je naveden broj, kašnjenje se primjenjuje i na sakrivanje/prikaži. Struktura objekta je: delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
niz, niz | ['top', 'right', 'bottom', 'left'] |
Definirajte rezervne položaje pružanjem liste plasmana u nizu (po redoslijedu želje). Za više informacija pogledajte Popperove dokumente o ponašanju . |
html |
boolean | false |
Dozvolite HTML u skočnom prozoru. Ako je tačno, HTML oznake u skočnom prozoru title će biti prikazane u skočnom prozoru. Ako je netačno, innerText svojstvo će se koristiti za umetanje sadržaja u DOM. Koristite tekst ako ste zabrinuti zbog XSS napada. |
offset |
broj, niz, funkcija | [0, 0] |
Pomak skočnog prikaza u odnosu na cilj. Možete proslijediti niz u atributima podataka sa vrijednostima odvojenim zarezima kao što su: data-bs-offset="10,20" . Kada se funkcija koristi za određivanje pomaka, ona se poziva s objektom koji sadrži popper položaj, referencu i popper rects kao prvi argument. Okidač elementa DOM čvor se prosljeđuje kao drugi argument. Funkcija mora vratiti niz sa dva broja: klizanje , udaljenost . Za više informacija pogledajte Popperove ofset dokumente . |
placement |
niz, funkcija | 'top' |
Kako postaviti popover: automatski, gore, dolje, lijevo, desno. Kada auto je navedeno, dinamički će preusmjeriti skočni prozor. Kada se funkcija koristi za određivanje položaja, ona se poziva sa DOM čvorom koji se pojavljuje kao prvim argumentom i pokretačkim elementom DOM čvorom kao drugim. Kontekst this je postavljen na instancu skočnog prikaza. |
popperConfig |
null, objekt, funkcija | null |
Da biste promijenili Bootstrap-ovu zadanu Popper konfiguraciju, pogledajte Popperovu konfiguraciju . Kada se funkcija koristi za kreiranje Popper konfiguracije, ona se poziva sa objektom koji sadrži Bootstrap-ovu zadanu Popper konfiguraciju. Pomaže vam da koristite i spojite zadanu s vlastitom konfiguracijom. Funkcija mora vratiti konfiguracijski objekt za Popper. |
sanitize |
boolean | true |
Omogućite ili onemogućite dezinfekciju. Ako je aktivirano 'template' , 'content' i 'title' opcije će biti sanirane. |
sanitizeFn |
null, funkcija | null |
Ovdje možete ponuditi vlastitu funkciju dezinfekcije. Ovo može biti korisno ako više volite koristiti namjensku biblioteku za dezinfekciju. |
selector |
string, false | false |
Ako je osiguran selektor, iskačući objekti će biti delegirani navedenim ciljevima. U praksi, ovo se takođe koristi za primenu iskakanja na dinamički dodane DOM elemente ( jQuery.on podrška). Pogledajte ovo izdanje i informativni primjer . |
template |
string | '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' |
Osnovni HTML za korištenje prilikom kreiranja skočnog prozora. Popover's title će biti ubrizgan u .popover-inner . .popover-arrow će postati iskačuća strelica. Najudaljeniji element omotača trebao bi imati .popover klasu i role="popover" . |
title |
string, element, funkcija | '' |
Zadana vrijednost naslova ako title atribut nije prisutan. Ako je data funkcija, ona će biti pozvana sa svojom this referencom postavljenom na element za koji je skočni prozor povezan. |
trigger |
string | 'hover focus' |
Kako se popover pokreće: kliknite, lebdite, fokus, ručno. Možete proslijediti više okidača; odvojite ih razmakom. 'manual' označava da će iskakanje biti pokrenuto programski putem metoda .popover('show') , .popover('hide') and ; .popover('toggle') ova vrijednost se ne može kombinirati ni sa jednim drugim okidačem. 'hover' samo po sebi će rezultirati iskačućim prozorima koji se ne mogu pokrenuti preko tastature, i treba ih koristiti samo ako postoje alternativni načini za prenošenje istih informacija za korisnike tastature. |
Atributi podataka za pojedinačne iskačuće
Opcije za pojedinačne iskačuće opcije mogu se alternativno specificirati korištenjem atributa podataka, kao što je objašnjeno gore.
Korištenje funkcije sapopperConfig
const popover = new bootstrap.Popover(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Metode
Asinhrone metode i prijelazi
Sve API metode su asinhrone i pokreću tranziciju . Oni se vraćaju pozivaocu čim prijelaz započne, ali prije nego što se završi . Osim toga, poziv metode na prelaznu komponentu će biti zanemaren .
Pogledajte našu JavaScript dokumentaciju za više informacija .
Metoda | Opis |
---|---|
disable |
Uklanja mogućnost da se iskačući prozor elementa prikaže. Popover će se moći prikazati samo ako je ponovo omogućen. |
dispose |
Sakriva i uništava skočni prozor elementa (Uklanja pohranjene podatke na DOM elementu). Skočni prozori koji koriste delegiranje (koji se kreiraju pomoću opcije selector ) ne mogu se pojedinačno uništiti na elementima okidača potomaka. |
enable |
Daje mogućnost prikaza skočnog prikaza elementa. Popovers su podrazumevano omogućeni. |
getInstance |
Statička metoda koja vam omogućava da dobijete instancu iskačućih stranica koja je povezana sa DOM elementom. |
getOrCreateInstance |
Statička metoda koja vam omogućava da dobijete instancu popovera pridruženu DOM elementu ili kreirate novu u slučaju da nije inicijalizirana. |
hide |
Sakriva skočni prozor elementa. Vraća se pozivaocu prije nego što je iskačući dio stvarno skriven (tj. prije nego što se hidden.bs.popover događaj dogodi). Ovo se smatra "ručnim" pokretanjem iskačućeg prozora. |
setContent |
Daje način za promjenu sadržaja skočnog prozora nakon njegove inicijalizacije. |
show |
Otkriva iskakanje elementa. Vraća se pozivaocu prije nego što je iskačući dio stvarno prikazan (tj. prije nego što se shown.bs.popover događaj dogodi). Ovo se smatra "ručnim" pokretanjem iskačućeg prozora. Skočni prozori čiji su naslov i sadržaj nulte dužine nikada se ne prikazuju. |
toggle |
Prebacuje iskačući prozor elementa. Vraća se pozivaocu prije nego što je iskačući dio zapravo prikazan ili skriven (tj. prije nego se dogodi događaj shown.bs.popover ili ). hidden.bs.popover Ovo se smatra "ručnim" pokretanjem iskačućeg prozora. |
toggleEnabled |
Prebacuje mogućnost da se skočni prozor elementa prikaže ili sakrije. |
update |
Ažurira poziciju iskačućeg 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'
})
setContent
prihvaća
object
argument, gdje je svaki ključ svojstva valjani
string
selektor unutar predloška iskačućeg prikaza, a svaka srodna vrijednost svojstva može biti
string
|
element
|
function
|
null
Događaji
Događaj | Opis |
---|---|
hide.bs.popover |
Ovaj događaj se pokreće odmah kada se hide pozove metoda instance. |
hidden.bs.popover |
Ovaj događaj se pokreće kada skočni prozor završi sa sakrivanjem od korisnika (će sačekati da se CSS tranzicije dovrše). |
inserted.bs.popover |
Ovaj događaj se pokreće nakon show.bs.popover događaja kada je predložak iskakanja dodan u DOM. |
show.bs.popover |
Ovaj događaj se aktivira odmah kada show se pozove metoda instance. |
shown.bs.popover |
Ovaj događaj se pokreće kada skočni prozor postane vidljiv korisniku (će čekati da se CSS tranzicije dovrše). |
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
// do something...
})