Preskočiť na hlavný obsah Preskočiť na navigáciu v dokumentoch
Check
in English

Popovers

Dokumentácia a príklady pridávania kontextových okien Bootstrap, ako sú tie, ktoré sa nachádzajú v systéme iOS, do akéhokoľvek prvku na vašej lokalite.

Prehľad

Čo by ste mali vedieť pri používaní popover plugin:

  • Popovery sa pri umiestňovaní spoliehajú na knižnicu Popper tretej strany . Popper.min.js musíte zahrnúť pred bootstrap.js, alebo použiť ten bootstrap.bundle.min.js, ktorý obsahuje Popper.
  • Popovery vyžadujú popover plugin ako závislosť.
  • Vyskakovacie okná sú aktivované z dôvodov výkonu, takže ich musíte inicializovať sami .
  • Nulová dĺžka titlea contenthodnoty nikdy nezobrazia kontextové okno.
  • Špecifikujte container: 'body', aby ste sa vyhli problémom s vykresľovaním v zložitejších komponentoch (ako sú naše vstupné skupiny, skupiny tlačidiel atď.).
  • Spustenie vyskakovacích okien na skrytých prvkoch nebude fungovať.
  • Vyskakovacie okná pre prvky .disabledalebo disabledprvky musia byť spustené na prvku obalu.
  • Pri spustení z kotiev, ktoré sa zalomia cez viacero riadkov, budú vyskakovacie okná vycentrované medzi celkovou šírkou kotiev. Použite .text-nowrapna <a>s, aby ste sa vyhli tomuto správaniu.
  • Vyskakovacie okná musia byť skryté pred odstránením príslušných prvkov z modelu DOM.
  • Popovery môžu byť spustené vďaka prvku vo vnútri tieňového DOM.
Tento komponent štandardne používa vstavaný dezinfekčný prostriedok na obsah, ktorý odstraňuje všetky prvky HTML, ktoré nie sú výslovne povolené. Ďalšie podrobnosti nájdete v sekcii dezinfekcie v našej dokumentácii JavaScript .
Animačný efekt tohto komponentu závisí od prefers-reduced-motionmediálneho dopytu. Pozrite si časť so zníženým pohybom v našej dokumentácii o prístupnosti .

Pokračujte v čítaní, aby ste videli, ako fungujú vyskakovacie okná s niektorými príkladmi.

Príklady

Povoliť vyskakovacie okná

Ako už bolo spomenuté vyššie, vyskakovacie okná musíte inicializovať predtým, ako ich budete môcť použiť. Jedným zo spôsobov, ako inicializovať všetky kontextové okná na stránke, by bolo vybrať ich podľa ich data-bs-toggleatribútu, napríklad:

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

Živá ukážka

Na vykreslenie nasledujúceho aktívneho kontextového okna používame JavaScript podobný úryvku vyššie. Titulky sa nastavujú cez data-bs-titlea obsah tela sa nastavuje cez data-bs-content.

Vo svojom HTML môžete použiť buď titlealebo . data-bs-titleKeď titlesa použije, Popper ho automaticky nahradí data-bs-titlepri vykreslení prvku.
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>

Štyri smery

K dispozícii sú štyri možnosti: hore, vpravo, dole a vľavo. Pokyny sa zrkadlia pri použití Bootstrapu v RTL. Nastavte data-bs-placementna zmenu smeru.

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>

Vlastnécontainer

Ak máte nejaké štýly v nadradenom prvku, ktoré zasahujú do kontextového okna, budete chcieť zadať vlastný container, aby sa namiesto toho v tomto prvku objavil kód HTML kontextového okna. To je bežné v responzívnych tabuľkách, skupinách vstupov a podobne.

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

Ďalšou situáciou, v ktorej budete chcieť nastaviť explicitné prispôsobenie container, sú kontextové okná vo vnútri modálneho dialógového okna , aby ste sa uistili, že samotné kontextové okno je pripojené k modálnemu zobrazeniu. Toto je obzvlášť dôležité pre kontextové okná, ktoré obsahujú interaktívne prvky – modálne dialógy zachytia zameranie, takže pokiaľ popover nie je podriadeným prvkom modálneho okna, používatelia nebudú môcť tieto interaktívne prvky zamerať ani aktivovať.

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

Vlastné vyskakovacie okná

Pridané vo verzii 5.2.0

Vzhľad vyskakovacích okien môžete prispôsobiť pomocou premenných CSS . Nastavili sme vlastnú triedu s data-bs-custom-class="custom-popover"na rozsah nášho vlastného vzhľadu a použili sme ju na prepísanie niektorých miestnych premenných 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;
}
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>

Zavrieť pri ďalšom kliknutí

Pomocou focusspúšťača zatvorte kontextové okná pri ďalšom kliknutí používateľa na iný prvok, než je prvok prepínača.

Na zatvorenie pri nasledujúcom kliknutí sa vyžaduje špecifická značka

Pre správne správanie medzi prehliadačmi a platformami musíte použiť <a>značku, nie značku <button>, a tiež musíte zahrnúť tabindexatribút.

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

Zakázané prvky

Prvky s disabledatribútom nie sú interaktívne, čo znamená, že používatelia na ne nemôžu umiestniť kurzor myši alebo na ne kliknúť, aby vyvolali kontextové okno (alebo popis). Ako riešenie budete chcieť spustiť vyskakovacie okno z obalu <div>alebo <span>, ideálne tak, aby bolo možné zamerať sa na klávesnicu pomocou tabindex="0".

V prípade vypnutých spúšťačov kontextových okien môžete tiež uprednostniť data-bs-trigger="hover focus", aby sa kontextové okno zobrazovalo vašim používateľom ako okamžitá vizuálna spätná väzba, pretože nemusia očakávať, že kliknú na zakázaný prvok.

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

Premenné

Pridané vo verzii 5.2.0

Ako súčasť rozvíjajúceho sa prístupu premenných CSS od Bootstrapu, kontextové okná teraz používajú lokálne premenné CSS na .popovervylepšené prispôsobenie v reálnom čase. Hodnoty pre premenné CSS sa nastavujú cez Sass, takže prispôsobenie Sass je stále podporované.

  --#{$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 premenné

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

Použitie

Povoliť vyskakovacie okná prostredníctvom JavaScriptu:

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

Aby vyskakovacie okná fungovali pre používateľov klávesnice a asistenčných technológií

Aby ste umožnili používateľom klávesnice aktivovať vaše vyskakovacie okná, mali by ste ich pridať iba do prvkov HTML, ktoré sú tradične zamerané na klávesnicu a sú interaktívne (ako sú odkazy alebo ovládacie prvky formulárov). Hoci ľubovoľné prvky HTML (ako napríklad <span>s) môžu byť zaostriteľné pridaním tabindex="0"atribútu, používateľom klávesnice to pridajú potenciálne nepríjemné a mätúce zarážky tabulátora na neinteraktívnych prvkoch a väčšina asistenčných technológií v súčasnosti v tejto situácii neoznamuje obsah kontextového okna. . Okrem toho sa nespoliehajte iba na hoverspúšťač pre vaše kontextové okná, pretože to znemožní ich spustenie pre používateľov klávesnice.

Aj keď pomocou tejto možnosti môžete do kontextových okien vkladať bohatý, štruktúrovaný kód HTML html, dôrazne vám odporúčame vyhnúť sa pridávaniu nadmerného množstva obsahu. V súčasnosti fungujú kontextové okná tak, že po zobrazení je ich obsah prepojený so spúšťacím prvkom s aria-describedbyatribútom. Výsledkom je, že celý obsah kontextového okna bude oznámený používateľom asistenčných technológií ako jeden dlhý, neprerušovaný stream.

Okrem toho, hoci je možné do kontextového okna zahrnúť aj interaktívne ovládacie prvky (ako sú prvky formulára alebo odkazy) (pridaním týchto prvkov k allowListpovoleným atribútom a značkám), uvedomte si, že kontextové okno v súčasnosti nespravuje poradie zaostrenia klávesnice. Keď používateľ klávesnice otvorí kontextové okno, zameranie zostáva na spúšťací prvok, a keďže kontextové okno zvyčajne nenasleduje okamžite po spúšťači v štruktúre dokumentu, neexistuje žiadna záruka, že pohyb vpred/stlačenieTABpresunie používateľa klávesnice do samotného kontextového okna. Stručne povedané, jednoduché pridanie interaktívnych ovládacích prvkov do kontextového okna pravdepodobne spôsobí, že tieto ovládacie prvky budú nedostupné/nepoužiteľné pre používateľov klávesnice a používateľov asistenčných technológií, alebo prinajmenšom spôsobí nelogické celkové poradie zamerania. V týchto prípadoch zvážte použitie modálneho dialógu.

možnosti

Keďže možnosti možno odovzdať prostredníctvom atribútov údajov alebo jazyka JavaScript, môžete pridať názov možnosti k data-bs-, ako v data-bs-animation="{value}". Pri odovzdávaní možností cez atribúty údajov nezabudnite zmeniť typ prípadu názvu možnosti z „ camelCase “ na „ kebab-case “. Napríklad použite data-bs-custom-class="beautifier"namiesto data-bs-customClass="beautifier".

Od Bootstrapu 5.2.0 všetky komponenty podporujú experimentálny atribút rezervovaných údajov data-bs-config, ktorý môže obsahovať jednoduchú konfiguráciu komponentu ako reťazec JSON. Ak má prvok atribúty data-bs-config='{"delay":0, "title":123}'a data-bs-title="456", konečná titlehodnota bude 456a samostatné atribúty údajov prepíšu hodnoty uvedené na data-bs-config. Existujúce dátové atribúty môžu navyše obsahovať hodnoty JSON ako data-bs-delay='{"show":0,"hide":150}'.

Upozorňujeme, že z bezpečnostných dôvodov nie je možné zadať voľby sanitize, sanitizeFn, a allowListpomocou atribútov údajov.
názov Typ Predvolené Popis
allowList objekt Predvolená hodnota Objekt, ktorý obsahuje povolené atribúty a značky.
animation boolovská hodnota true Na vyskakovacie okno použite prechod zoslabovania CSS.
boundary reťazec, prvok 'clippingParents' Hranica obmedzenia pretečenia kontextového okna (platí len pre Popperov modifikátor preventOverflow). V predvolenom nastavení je 'clippingParents'a môže akceptovať referenciu HTMLElement (iba cez JavaScript). Ďalšie informácie nájdete v dokumentoch Popper's detectOverflow .
container reťazec, prvok, nepravda false Pripojí kontextové okno ku konkrétnemu prvku. Príklad: container: 'body'. Táto možnosť je užitočná najmä v tom, že vám umožňuje umiestniť vyskakovacie okno v toku dokumentu v blízkosti spúšťacieho prvku – čo zabráni tomu, aby sa vyskakovacie okno vznášalo preč od spúšťacieho prvku počas zmeny veľkosti okna.
content reťazec, prvok, funkcia '' data-bs-contentAk atribút nie je prítomný, predvolená hodnota obsahu . Ak je zadaná funkcia, bude volaná s thisnastavenou referenciou na prvok, ku ktorému je kontextové okno pripojené.
customClass reťazec, funkcia '' Pridajte triedy do kontextového okna, keď sa zobrazí. Všimnite si, že tieto triedy budú pridané k všetkým triedam špecifikovaným v šablóne. Ak chcete pridať viacero tried, oddeľte ich medzerami: 'class-1 class-2'. Môžete tiež odovzdať funkciu, ktorá by mala vrátiť jeden reťazec obsahujúci ďalšie názvy tried.
delay číslo, objekt 0 Oneskorenie zobrazenia a skrytia kontextového okna (ms) – netýka sa manuálneho typu spúšťania. Ak je zadané číslo, oneskorenie sa použije na skrytie/zobrazenie. Štruktúra objektu je: delay: { "show": 500, "hide": 100 }.
fallbackPlacements reťazec, pole ['top', 'right', 'bottom', 'left'] Definujte záložné umiestnenia poskytnutím zoznamu umiestnení v poli (v poradí podľa preferencie). Ďalšie informácie nájdete v dokumentoch o správaní Poppera .
html boolovská hodnota false Povoliť HTML vo vyskakovacom okne. Ak je pravda, značky HTML v kontextovom okne titlesa vykreslia v kontextovom okne. Ak je hodnota false, innerTextvlastnosť sa použije na vloženie obsahu do DOM. Ak sa obávate útokov XSS, použite text.
offset číslo, reťazec, funkcia [0, 0] Posun vyskakovacieho okna vzhľadom na jeho cieľ. V atribútoch údajov môžete zadať reťazec s hodnotami oddelenými čiarkou, ako napríklad: data-bs-offset="10,20". Keď sa funkcia používa na určenie posunu, volá sa s objektom obsahujúcim umiestnenie popper, referenciu a popper rects ako svoj prvý argument. Uzol DOM spúšťacieho prvku sa odovzdá ako druhý argument. Funkcia musí vrátiť pole s dvoma číslami: skiding , distance . Ďalšie informácie nájdete v dokumentoch Popper's ofset .
placement reťazec, funkcia 'top' Ako umiestniť popover: automaticky, hore, dole, vľavo, vpravo. Keď autoje zadané, dynamicky sa zmení orientácia kontextového okna. Keď sa funkcia používa na určenie umiestnenia, volá sa s popover uzlom DOM ako jej prvým argumentom a spúšťacím prvkom DOM uzlom ako jej druhým. Kontext thisje nastavený na inštanciu kontextového okna.
popperConfig null, objekt, funkcia null Ak chcete zmeniť predvolenú konfiguráciu Popper pre Bootstrap, pozrite si konfiguráciu Poppera . Keď sa funkcia používa na vytvorenie konfigurácie Popper, volá sa s objektom, ktorý obsahuje predvolenú konfiguráciu Popper Bootstrapu. Pomôže vám použiť a zlúčiť predvolené nastavenie s vašou vlastnou konfiguráciou. Funkcia musí vrátiť konfiguračný objekt pre Popper.
sanitize boolovská hodnota true Povoliť alebo zakázať dezinfekciu. Ak je aktivovaný 'template', 'content'a 'title'možnosti budú dezinfikované.
sanitizeFn null, funkcia null Tu si môžete dodať vlastnú funkciu dezinfekcie. To môže byť užitočné, ak uprednostňujete použitie špeciálnej knižnice na vykonanie dezinfekcie.
selector reťazec, nepravda false Ak je poskytnutý selektor, popover objekty budú delegované na špecifikované ciele. V praxi sa to používa aj na aplikovanie popoverov na dynamicky pridávané prvky DOM ( jQuery.onpodpora). Pozrite si tento problém a informatívny príklad .
template reťazec '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Základné HTML, ktoré sa má použiť pri vytváraní kontextového okna. Popover titlesa vstrekne do .popover-inner. .popover-arrowsa stane šípkou vyskakovacieho okna. Prvok vonkajšieho obalu by mal mať .popovertriedu a role="popover".
title reťazec, prvok, funkcia '' Predvolená hodnota názvu, ak titleatribút nie je prítomný. Ak je zadaná funkcia, bude volaná s thisnastavenou referenciou na prvok, ku ktorému je kontextové okno pripojené.
trigger reťazec 'hover focus' Spôsob spustenia kontextového okna: kliknutie, kurzor myši, zaostrenie, manuálne. Môžete prejsť viacerými spúšťačmi; oddeľte ich medzerou. 'manual'označuje, že kontextové okno sa spustí programovo prostredníctvom metód .popover('show'), .popover('hide')a ; .popover('toggle')túto hodnotu nemožno kombinovať so žiadnym iným spúšťačom. 'hover'sám o sebe povedie k vyskakovacím oknám, ktoré sa nedajú spustiť pomocou klávesnice, a mali by sa používať iba vtedy, ak existujú alternatívne spôsoby prenosu rovnakých informácií pre používateľov klávesnice.

Atribúty údajov pre jednotlivé kontextové okná

Možnosti pre jednotlivé kontextové okná možno alternatívne špecifikovať pomocou atribútov údajov, ako je vysvetlené vyššie.

Použitie funkcie spopperConfig

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

Metódy

Asynchrónne metódy a prechody

Všetky metódy API sú asynchrónne a spúšťajú prechod . Vrátia sa k volajúcemu hneď po spustení prechodu, ale skôr, ako sa skončí . Okrem toho bude volanie metódy na prechodovom komponente ignorované .

Viac informácií nájdete v našej dokumentácii JavaScript .

Metóda Popis
disable Odstráni možnosť zobrazenia kontextového okna prvku. Kontextové okno sa bude môcť zobraziť iba vtedy, ak bude znova povolené.
dispose Skryje a zničí popover prvku (odstráni uložené údaje v prvku DOM). Vyskakovacie okná, ktoré používajú delegovanie (ktoré sú vytvorené pomocou voľby ) selector, nemožno jednotlivo zničiť na podradených spúšťacích prvkoch.
enable Umožňuje zobrazenie kontextového okna prvku. Popovers sú predvolene povolené.
getInstance Statická metóda, ktorá vám umožňuje získať inštanciu popover spojenú s prvkom DOM.
getOrCreateInstance Statická metóda, ktorá vám umožňuje získať inštanciu popover priradenú k prvku DOM alebo vytvoriť novú v prípade, že nebola inicializovaná.
hide Skryje popover prvku. Vráti sa k volajúcemu skôr, ako sa kontextové okno skutočne skrylo (tj predtým, ako hidden.bs.popovernastane udalosť). Toto sa považuje za „manuálne“ spustenie vyskakovacieho okna.
setContent Poskytuje spôsob, ako zmeniť obsah kontextového okna po jeho inicializácii.
show Odhalí vyskakovací prvok prvku. Vráti sa k volajúcemu skôr, ako sa skutočne zobrazí kontextové okno (tj predtým, ako shown.bs.popoverdôjde k udalosti). Toto sa považuje za „manuálne“ spustenie vyskakovacieho okna. Kontextové okná, ktorých názov aj obsah majú nulovú dĺžku, sa nikdy nezobrazia.
toggle Prepína kontextové okno prvku. Vráti sa k volajúcemu predtým, ako sa kontextové okno skutočne zobrazí alebo skryje (tj predtým, ako nastane udalosť shown.bs.popoveralebo ). hidden.bs.popoverToto sa považuje za „manuálne“ spustenie vyskakovacieho okna.
toggleEnabled Prepína možnosť zobrazenia alebo skrytia kontextového okna prvku.
update Aktualizuje pozíciu kontextového okna prvku.
// 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'
})
Metóda setContentakceptuje objectargument, kde každý kľúč vlastnosti je platným stringselektorom v šablóne kontextového okna a každá súvisiaca hodnota vlastnosti môže byť string| element| function| null

Diania

Udalosť Popis
hide.bs.popover Táto udalosť sa spustí okamžite po hidezavolaní metódy inštancie.
hidden.bs.popover Táto udalosť sa spustí, keď sa ukončí skrytie kontextového okna pred používateľom (bude čakať na dokončenie prechodov CSS).
inserted.bs.popover Táto udalosť sa spustí po show.bs.popoverudalosti, keď bola do modelu DOM pridaná šablóna kontextového okna.
show.bs.popover Táto udalosť sa spustí okamžite pri showvolaní metódy inštancie.
shown.bs.popover Táto udalosť sa spustí, keď sa kontextové okno zobrazí používateľovi (bude čakať na dokončenie prechodov CSS).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})