Prijeđi na glavni sadržaj Prijeđi na navigaciju dokumentima
Check
in English

Popovers

Dokumentacija i primjeri za dodavanje Bootstrap skočnih prozora, poput onih koji se nalaze u iOS-u, bilo kojem elementu na vašoj web-lokaciji.

Pregled

Stvari koje treba znati kada koristite popover dodatak:

  • Popoveri se za pozicioniranje oslanjaju na biblioteku treće strane Popper . Morate uključiti popper.min.js prije bootstrap.jsili koristiti onaj bootstrap.bundle.min.jskoji sadrži Popper.
  • Popoveri zahtijevaju popover dodatak kao ovisnost.
  • Popoveri su opt-in zbog performansi, pa ih morate sami pokrenuti .
  • Nulta duljina titleicontent vrijednosti nikada neće prikazati skočni prikaz.
  • Naveditecontainer: 'body' kako biste izbjegli probleme s generiranjem u složenijim komponentama (poput naših ulaznih grupa, grupa gumba itd.).
  • Pokretanje skočnih prozora na skrivenim elementima neće raditi.
  • Popover za .disabledilidisabled moraju se pokrenuti na elementu omotača.
  • Kada se pokreću iz sidrišta koja se prelamaju preko više linija, skočni prozori bit će centrirani između ukupne širine sidrišta. Koristite .text-nowrapna svom <a>s kako biste izbjegli ovakvo ponašanje.
  • Skočni prozori moraju biti skriveni prije nego što se njihovi odgovarajući elementi uklone iz DOM-a.
  • Popoveri se mogu pokrenuti zahvaljujući elementu unutar DOM-a u sjeni.
Prema zadanim postavkama, ova komponenta koristi ugrađeni alat za čišćenje sadržaja koji uklanja sve HTML elemente koji nisu izričito dopušteni. Za više pojedinosti pogledajte odjeljak sanitizera u našoj JavaScript dokumentaciji .
Učinak animacije ove komponente ovisi o prefers-reduced-motionmedijskom upitu. Pogledajte odjeljak smanjenog kretanja u našoj dokumentaciji o pristupačnosti .

Nastavite čitati da vidite kako skočni prozori funkcioniraju s nekim primjerima.

Primjeri

Omogući skočne prozore

Kao što je gore spomenuto, morate pokrenuti skočne prozore prije nego što se mogu koristiti. Jedan od načina da inicijalizirate sve skočne prozore na stranici bio bi da ih odaberete po data-bs-toggleatributu, ovako:

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

Demo uživo

Koristimo JavaScript sličan gornjem isječku za renderiranje sljedećeg skočnog prikaza uživo. Naslovi se postavljaju putem data-bs-title, a sadržaj tijela se postavlja putem data-bs-content.

Slobodno koristite ili titleili data-bs-titleu svom HTML-u. Kada titlese koristi, Popper će ga automatski zamijeniti data-bs-titlekada se element renderira.
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>

Četiri smjera

Dostupne su četiri opcije: gore, desno, dolje i lijevo. Upute se preslikavaju kada koristite Bootstrap u RTL-u. Postavite data-bs-placementza promjenu smjera.

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>

Prilagođencontainer

Kada imate neke stilove na nadređenom elementu koji ometaju skočni prozor, trebali biste navesti prilagođeni containertako da se HTML skočnog prozora pojavljuje unutar tog elementa. To je uobičajeno u responzivnim tablicama, grupama unosa i slično.

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

Još jedna situacija u kojoj ćete htjeti postaviti eksplicitni običaj containersu skočni prozori unutar modalnog dijaloga , kako biste bili sigurni da je sam skočni prozor pridodan modalu. Ovo je osobito važno za skočne prozore koji sadrže interaktivne elemente – modalni dijalozi će zadržati fokus, pa osim ako skočni prozor nije podređeni element modala, korisnici neće moći fokusirati ili aktivirati te interaktivne elemente.

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

Prilagođeni popover

Dodano u v5.2.0

Izgled skočnih prozora možete prilagoditi pomoću CSS varijabli . Postavljamo prilagođenu klasu 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;
}
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>

Odbaci pri sljedećem kliku

Upotrijebite focusokidač za odbacivanje skočnih prozora pri sljedećem korisnikovom kliku na element različit od preklopnog elementa.

Za odbacivanje pri sljedećem kliku potrebna je posebna oznaka

Za ispravno ponašanje između preglednika i platformi, morate koristiti <a>oznaku, a ne oznaku <button>, a također morate uključiti tabindexatribut.

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

Onemogućeni elementi

Elementi s disabledatributom nisu interaktivni, što znači da korisnici ne mogu lebdjeti pokazivačem ili kliknuti na njih da bi pokrenuli skočni prozor (ili opis). Kao zaobilazno rješenje, htjet ćete pokrenuti skočni prozor iz omotača <div>ili <span>, idealno napravljenog za fokusiranje na tipkovnici, pomoću tabindex="0".

Za onemogućene okidače skočnog prozora možda biste radije željeli data-bs-trigger="hover focus"da se skočni prozor pojavi kao neposredna vizualna povratna informacija vašim korisnicima jer možda neće očekivati ​​da će kliknuti na onemogućeni element.

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

Varijable

Dodano u v5.2.0

Kao dio Bootstrapovog pristupa CSS varijablama koji se razvija, popovi sada koriste lokalne CSS varijable .popoverza poboljšanu prilagodbu u stvarnom vremenu. Vrijednosti za CSS varijable postavljaju se putem Sass-a, tako da je i dalje podržana prilagodba Sass-a.

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

Korištenje

Omogući skočne prozore putem JavaScripta:

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

Učinite da skočni prozori rade za korisnike tipkovnice i pomoćne tehnologije

Da biste omogućili korisnicima tipkovnice da aktiviraju vaše skočne prozore, trebali biste ih dodati samo u HTML elemente koji su tradicionalno fokusirani na tipkovnici i koji su interaktivni (kao što su veze ili kontrole obrazaca). Iako proizvoljni HTML elementi (kao što <span>je s) mogu biti fokusirani dodavanjem tabindex="0"atributa, to će dodati potencijalno neugodna i zbunjujuća zaustavljanja kartice na neinteraktivnim elementima za korisnike tipkovnice, a većina pomoćnih tehnologija trenutno ne najavljuje sadržaj skočnog prozora u ovoj situaciji . Osim toga, nemojte se oslanjati samo nahover njega kao na okidač za svoje skočne prozore, jer će to onemogućiti njihovo pokretanje za korisnike tipkovnice.

Iako možete umetnuti bogati, strukturirani HTML u skočne prozore s ovom htmlopcijom, toplo preporučujemo da izbjegavate dodavanje pretjerane količine sadržaja. Način na koji skočni prozori trenutno funkcioniraju jest da se njihov sadržaj, nakon što se prikažu, povezuje s elementom okidača s aria-describedbyatributom. Kao rezultat toga, cjelokupni sadržaj Popovera bit će najavljen korisnicima pomoćne tehnologije kao jedan dugi, neprekinuti tok.

Osim toga, iako je moguće također uključiti interaktivne kontrole (kao što su elementi obrasca ili veze) u vaš skočni prozor (dodavanjem ovih elemenata u allowListdopuštene atribute i oznake), imajte na umu da trenutno skočni prozor ne upravlja redoslijedom fokusa tipkovnice. Kada korisnik tipkovnice otvori skočni prozor, fokus ostaje na elementu okidača, a kako skočni prozor obično ne slijedi odmah okidač u strukturi dokumenta, nema jamstva da će pomicanje naprijed/pritisakTABpremjestit će korisnika tipkovnice u sam skočni prozor. Ukratko, jednostavno dodavanje interaktivnih kontrola skočnom prozoru vjerojatno će te kontrole učiniti nedostupnima/neupotrebljivima za korisnike tipkovnice i korisnike pomoćnih tehnologija ili će u najmanju ruku stvoriti nelogičan ukupni redoslijed fokusa. U tim slučajevima razmislite o korištenju modalnog dijaloškog okvira.

Mogućnosti

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 vrstu velikih i malih slova naziva opcije iz “ camelCase ” u “ kebab-case ” kada prosljeđujete opcije 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-configkoji može sadržavati jednostavnu konfiguraciju komponente kao JSON niz. Kada element ima atribute data-bs-config='{"delay":0, "title":123}'i data-bs-title="456", konačna titlevrijednost će biti 456, a zasebni atributi podataka nadjačat će vrijednosti dane na data-bs-config. Osim toga, postojeći atributi podataka mogu sadržavati JSON vrijednosti poput data-bs-delay='{"show":0,"hide":150}'.

Imajte na umu da se iz sigurnosnih razloga opcije sanitize, sanitizeFn, i allowListne mogu isporučiti pomoću atributa podataka.
Ime Tip Zadano Opis
allowList objekt Zadana vrijednost Objekt koji sadrži dopuštene atribute i oznake.
animation Booleov true Primijenite CSS fade prijelaz na skočni prozor.
boundary niz, element 'clippingParents' Granica ograničenja prekoračenja skočnog prozora (odnosi se samo na Popperov modifikator za sprečavanje preljeva). Prema zadanim postavkama 'clippingParents'prihvaća i može prihvatiti referencu HTMLElement (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 je opcija posebno korisna jer vam omogućuje postavljanje skočnog prozora u tok dokumenta blizu elementa koji pokreće - što će spriječiti da skočni prozor odlebdi od elementa koji pokreće tijekom promjene veličine prozora.
content niz, element, funkcija '' Zadana vrijednost sadržaja ako data-bs-contentatribut nije prisutan. Ako je dana funkcija, bit će pozvana s thisreferencom postavljenom na element na koji je popover priložen.
customClass niz, funkcija '' Dodajte klase skočnom prozoru kada se prikaže. Imajte na umu da će ove klase biti dodane uz sve klase navedene u predlošku. Za dodavanje više klasa, odvojite ih razmacima: 'class-1 class-2'. Također možete proslijediti funkciju koja bi trebala vratiti jedan niz koji sadrži dodatna imena klasa.
delay broj, predmet 0 Odgoda prikazivanja i skrivanja skočnog prozora (ms)—ne odnosi se na vrstu ručnog okidača. Ako je naveden broj, odgoda se primjenjuje na skrivanje/prikazivanje. Struktura objekta je: delay: { "show": 500, "hide": 100 }.
fallbackPlacements niz, niz ['top', 'right', 'bottom', 'left'] Definirajte zamjenske položaje pružanjem popisa položaja u nizu (redoslijedom preferencija). Za više informacija pogledajte Popperovu dokumentaciju o ponašanju .
html Booleov false Dopusti HTML u skočnom prozoru. Ako je istina, HTML oznake u skočnim prozorima titlebit će prikazane u skočnom prozoru. Ako je netočno, innerTextsvojstvo će se koristiti za umetanje sadržaja u DOM. Upotrijebite tekst ako ste zabrinuti zbog XSS napada.
offset broj, niz, funkcija [0, 0] Pomak popover-a u odnosu na cilj. Možete proslijediti niz u atributima podataka s 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. DOM čvor pokretačkog elementa prosljeđuje se kao drugi argument. Funkcija mora vratiti niz s dva broja: proklizavanje , udaljenost . Za više informacija pogledajte Popperovu offset dokumentaciju .
placement niz, funkcija 'top' Kako postaviti popover: automatski, gore, dolje, lijevo, desno. Kada autoje navedeno, dinamički će preusmjeriti skočni prozor. Kada se funkcija koristi za određivanje položaja, poziva se s skočnim DOM čvorom kao prvim argumentom i DOM čvorom pokretačkog elementa kao drugim. Kontekst thisje postavljen na skočnu instancu.
popperConfig null, objekt, funkcija null Za promjenu Bootstrapove zadane Popper konfiguracije, pogledajte Popperovu konfiguraciju . Kada se funkcija koristi za stvaranje Popper konfiguracije, poziva se s objektom koji sadrži Bootstrapovu zadanu Popper konfiguraciju. Pomaže vam koristiti i spojiti zadane postavke s vlastitom konfiguracijom. Funkcija mora vratiti konfiguracijski objekt za Popper.
sanitize Booleov true Omogućite ili onemogućite dezinfekciju. Ako je aktivirano 'template', 'content'i 'title'opcije će biti očišćene.
sanitizeFn nula, funkcija null Ovdje možete ponuditi vlastitu funkciju dezinfekcije. Ovo može biti korisno ako radije koristite namjensku knjižnicu za izvođenje dezinfekcije.
selector niz, lažan false Ako je selektor osiguran, skočni objekti bit će delegirani navedenim ciljevima. U praksi se to također koristi za primjenu skočnih prozora na dinamički dodane DOM elemente ( jQuery.onpodrška). Pogledajte ovo izdanje i informativni primjer .
template niz '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Osnovni HTML za korištenje pri stvaranju skočnog prozora. Popover titleće se ubrizgati u .popover-inner. .popover-arrowpostat će popoverova strijela. Najudaljeniji element omotača trebao bi imati .popoverklasu i role="popover".
title niz, element, funkcija '' Zadana vrijednost naslova ako titleatribut nije prisutan. Ako je dana funkcija, bit će pozvana s thisreferencom postavljenom na element na koji je popover priložen.
trigger niz 'hover focus' Kako se pokreće popover: klik, lebdenje, fokus, ručno. Možete proći više okidača; odvojite ih razmakom. 'manual'označava da će se popover pokrenuti programski putem .popover('show'), .popover('hide')i .popover('toggle')metoda; ova se vrijednost ne može kombinirati ni s jednim drugim okidačem. 'hover'samostalno će rezultirati pojavljivanjem iskačućih poruka koje se ne mogu pokrenuti putem tipkovnice i treba se koristiti samo ako su prisutne alternativne metode za prenošenje istih informacija za korisnike tipkovnice.

Atributi podataka za pojedinačne skočne prozore

Opcije za pojedinačne skočne prozore mogu se alternativno specificirati upotrebom atributa podataka, kao što je gore objašnjeno.

Korištenje funkcije sapopperConfig

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

Metode

Asinkrone metode i prijelazi

Sve API metode su asinkrone i pokreću prijelaz . Vraćaju se pozivatelju čim prijelaz započne, ali prije nego što završi . Osim toga, poziv metode na prijelaznoj komponenti bit će zanemaren .

Pogledajte našu JavaScript dokumentaciju za više informacija .

metoda Opis
disable Uklanja mogućnost prikazivanja skočnog prozora elementa. Popover će se moći prikazati samo ako je ponovno omogućen.
dispose Skriva i uništava popover elementa (Uklanja pohranjene podatke na DOM elementu). Popoveri koji koriste delegiranje (koji se stvaraju pomoću opcije selector) ne mogu se pojedinačno uništiti na okidačkim elementima potomcima.
enable Daje mogućnost prikazivanja skočnog prozora elementa. Skočni prozori omogućeni su prema zadanim postavkama.
getInstance Statička metoda koja vam omogućuje dobivanje skočne instance povezane s DOM elementom.
getOrCreateInstance Statička metoda koja vam omogućuje dobivanje skočne instance povezane s DOM elementom ili stvaranje nove u slučaju da nije inicijalizirana.
hide Skriva skočni prozor elementa. Vraća se pozivatelju prije nego što je popover zapravo skriven (tj. prije nego što se hidden.bs.popoverdogađaj dogodi). Ovo se smatra "ručnim" pokretanjem popover-a.
setContent Omogućuje promjenu sadržaja skočnog prozora nakon njegove inicijalizacije.
show Otkriva popover elementa. Vraća se pozivatelju prije nego što se popover stvarno prikaže (tj. prije nego što se shown.bs.popoverdogađaj dogodi). Ovo se smatra "ručnim" pokretanjem popover-a. Skočni prozori čiji su naslov i sadržaj nulte duljine nikad se ne prikazuju.
toggle Isključuje skočni prozor elementa. Vraća se pozivatelju prije nego što se popover stvarno prikaže ili sakrije (tj. prije nego što se dogodi događaj shown.bs.popoverili ). hidden.bs.popoverOvo se smatra "ručnim" pokretanjem popover-a.
toggleEnabled Isključuje mogućnost prikazivanja ili sakrivanja skočnog prozora elementa.
update Ažurira položaj skočnog prozora 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'
})
Metoda setContentprihvaća objectargument, gdje je svaki ključ svojstva važeći stringselektor unutar popover predloška, ​​a svaka povezana vrijednost svojstva može biti string| element| function| null

Događaji

Događaj Opis
hide.bs.popover Ovaj se događaj aktivira odmah nakon hidepozivanja metode instance.
hidden.bs.popover Ovaj se događaj pokreće kada popover više nije skriven od korisnika (pričekat će se da se dovrše CSS prijelazi).
inserted.bs.popover Ovaj se događaj pokreće nakon show.bs.popoverdogađaja kada je skočni predložak dodan u DOM.
show.bs.popover Ovaj događaj aktivira se odmah kada showse pozove metoda instance.
shown.bs.popover Ovaj se događaj pokreće kada je popover vidljiv korisniku (pričekat će se da se CSS prijelazi završe).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})