Přejít na hlavní obsah Přejít na navigaci v dokumentech
Check
in English

Popovers

Dokumentace a příklady pro přidávání vyskakovacích oken Bootstrap, jako jsou ty, které se nacházejí v systému iOS, do jakéhokoli prvku na vašem webu.

Přehled

Co byste měli vědět při používání popover pluginu:

  • Popovers se při určování polohy spoléhají na knihovnu Popper třetí strany . Popper.min.js musíte zahrnout před bootstrap.js, nebo použít ten bootstrap.bundle.min.js, který obsahuje Popper.
  • Popovers vyžadují popover plugin jako závislost.
  • Popovers jsou z výkonnostních důvodů volitelná, takže je musíte inicializovat sami .
  • Nulová délka titlea contenthodnoty nikdy nezobrazí vyskakovací okno.
  • Určete container: 'body', abyste se vyhnuli problémům s vykreslováním ve složitějších komponentách (jako jsou naše vstupní skupiny, skupiny tlačítek atd.).
  • Spouštění vyskakovacích oken na skrytých prvcích nebude fungovat.
  • Popover pro .disablednebo disabledprvky musí být spuštěny na prvku obalu.
  • Při spuštění z kotev, které se zalomí přes více čar, budou vyskakovací okna vycentrována mezi celkovou šířkou kotev. Chcete-li se tomuto chování vyhnout, použijte .text-nowrapna svém s.<a>
  • Popovers musí být skryty, než budou jejich odpovídající prvky odstraněny z DOM.
  • Popovers lze spustit díky prvku uvnitř stínového DOM.
Ve výchozím nastavení tato komponenta používá vestavěný dezinfekční prostředek obsahu, který odstraňuje všechny prvky HTML, které nejsou výslovně povoleny. Další podrobnosti najdete v sekci dezinfekce v naší JavaScriptové dokumentaci .
Efekt animace této komponenty závisí na prefers-reduced-motiondotazu na média. Podívejte se na část s omezeným pohybem v naší dokumentaci přístupnosti .

Pokračujte ve čtení, abyste viděli, jak popover fungují s některými příklady.

Příklady

Povolit vyskakovací okna

Jak bylo uvedeno výše, musíte vyskakovací okna před použitím inicializovat. Jedním ze způsobů, jak inicializovat všechna vyskakovací okna na stránce, je vybrat je podle jejich data-bs-toggleatributu, například:

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

Živé demo

K vykreslení následujícího živého vyskakovacího okna používáme JavaScript podobný výše uvedenému úryvku. Titulky se nastavují pomocí data-bs-titlea obsah těla se nastavuje pomocí data-bs-content.

Neváhejte použít buď titlenebo data-bs-titleve svém HTML. Když titleje použit, Popper jej automaticky nahradí data-bs-titlepři 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>

Čtyři směry

K dispozici jsou čtyři možnosti: nahoře, vpravo, dole a vlevo. Pokyny jsou zrcadleny při použití Bootstrapu v RTL. Nastavte data-bs-placementpro změnu směru.

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>

Zvykcontainer

Pokud máte nějaké styly v nadřazeném prvku, které narušují vyskakovací okno, budete chtít zadat vlastní container, aby se v tomto prvku místo toho zobrazil kód HTML vyskakovacího okna. To je běžné u responzivních tabulek, vstupních skupin a podobně.

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

Další situací, kdy budete chtít nastavit explicitní vlastní container, jsou vyskakovací okna uvnitř modálního dialogu , abyste se ujistili, že vyskakovací okno je připojeno k modálnímu dialogu. To je důležité zejména pro vyskakovací okna, která obsahují interaktivní prvky – modální dialogy zachytí fokus, takže pokud není vyskakovací okno podřízeným prvkem modálního okna, uživatelé nebudou moci tyto interaktivní prvky zaměřit ani aktivovat.

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

Vlastní vyskakovací okna

Přidáno ve verzi 5.2.0

Vzhled vyskakovacích oken můžete přizpůsobit pomocí proměnných CSS . Nastavili jsme vlastní třídu s data-bs-custom-class="custom-popover"pro rozsah našeho vlastního vzhledu a používáme ji k přepsání některých místních proměnný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>

Zavřít při dalším kliknutí

Pomocí focusspouštěče zavřete vyskakovací okna při dalším kliknutí uživatele na jiný prvek, než je prvek přepínání.

Pro zavření při dalším kliknutí je vyžadováno specifické označení

Pro správné chování mezi prohlížeči a platformami musíte použít <a>značku, nikoli značku <button>, a také musíte zahrnout 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'
})

Zakázané prvky

Prvky s disabledatributem nejsou interaktivní, což znamená, že uživatelé na ně nemohou umístit kurzor myši nebo na ně kliknout, aby vyvolali vyskakovací okno (nebo popisek). Jako náhradní řešení budete chtít spustit vyskakovací okno z obalu <div>nebo <span>, v ideálním případě se lze zaměřit na klávesnici pomocí tabindex="0".

U zakázaných spouštěčů vyskakovacích oken můžete také upřednostnit data-bs-trigger="hover focus", aby se vyskakovací okno zobrazilo vašim uživatelům jako okamžitá vizuální zpětná vazba, protože nemusí očekávat, že kliknou na zakázaný prvek.

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

Proměnné

Přidáno ve verzi 5.2.0

Jako součást vyvíjejícího se přístupu Bootstrap proměnných CSS, vyskakovací okna nyní používají místní proměnné CSS .popoverpro lepší přizpůsobení v reálném čase. Hodnoty pro proměnné CSS se nastavují prostřednictvím Sass, takže přizpůsobení Sass je stále podporováno.

  --#{$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 proměnné

$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žívání

Povolit vyskakovací okna prostřednictvím JavaScriptu:

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

Aby vyskakovací okna fungovala pro uživatele klávesnice a asistenčních technologií

Chcete-li umožnit uživatelům klávesnice aktivovat vaše vyskakovací okna, měli byste je přidat pouze do prvků HTML, které jsou tradičně zaměřeny na klávesnici a jsou interaktivní (jako jsou odkazy nebo ovládací prvky formuláře). Ačkoli lze libovolné prvky HTML (například <span>s) upravit tak, aby bylo možné zaměřit se přidáním tabindex="0"atributu, přidá to uživatelům klávesnice potenciálně nepříjemné a matoucí zarážky tabulátoru na neinteraktivních prvcích a většina asistenčních technologií v současné době neoznamuje obsah vyskakovacího okna. . Kromě toho se nespoléhejte pouze na hoverspouštěcí prvek pro vaše vyskakovací okna, protože to znemožní jejich spuštění pro uživatele klávesnice.

I když pomocí této možnosti můžete do vyskakovacích oken vkládat bohatý, strukturovaný kód HTML html, důrazně doporučujeme, abyste nepřidávali nadměrné množství obsahu. Popovery v současnosti fungují tak, že jakmile se zobrazí, jejich obsah je spojen se spouštěcím prvkem s aria-describedbyatributem. Výsledkem je, že veškerý obsah vyskakovacího okna bude uživatelům asistenčních technologií oznámen jako jeden dlouhý, nepřerušovaný stream.

Navíc, i když je možné do vyskakovacího okna zahrnout také interaktivní ovládací prvky (jako jsou prvky formuláře nebo odkazy) (přidáním těchto prvků k allowListpovoleným atributům a tagům), uvědomte si, že vyskakovací okno v současné době neřídí pořadí fokusu klávesnice. Když uživatel klávesnice otevře vyskakovací okno, fokus zůstane na spouštěcím prvku, a protože vyskakovací okno obvykle nenásleduje okamžitě po spouštěči ve struktuře dokumentu, není zaručeno, že pohyb vpřed/stisknutíTABpřesune uživatele klávesnice do samotného vyskakovacího okna. Stručně řečeno, pouhé přidání interaktivních ovládacích prvků do vyskakovacího okna pravděpodobně způsobí, že tyto ovládací prvky nebudou dostupné/nepoužitelné pro uživatele klávesnice a uživatele asistenčních technologií, nebo přinejmenším způsobí nelogické celkové pořadí zaměření. V těchto případech zvažte použití modálního dialogu.

Možnosti

Protože volby lze předávat prostřednictvím datových atributů nebo JavaScriptu, můžete přidat název volby k data-bs-, jako v data-bs-animation="{value}". Při předávání možností prostřednictvím datových atributů se ujistěte, že jste změnili typ případu názvu možnosti z „ camelCase “ na „ kebab-case “. Použijte například data-bs-custom-class="beautifier"místo data-bs-customClass="beautifier".

Od Bootstrapu 5.2.0 všechny komponenty podporují experimentální atribut vyhrazených dat data-bs-config, který může obsahovat jednoduchou konfiguraci komponenty jako řetězec JSON. Když má prvek atributy data-bs-config='{"delay":0, "title":123}'a data-bs-title="456", konečná titlehodnota bude 456a samostatné datové atributy přepíší hodnoty uvedené na data-bs-config. Kromě toho mohou existující datové atributy obsahovat hodnoty JSON, jako je data-bs-delay='{"show":0,"hide":150}'.

Všimněte si, že z bezpečnostních důvodů nelze volby sanitize, sanitizeFn, a allowListzadat pomocí datových atributů.
název Typ Výchozí Popis
allowList objekt Výchozí hodnota Objekt, který obsahuje povolené atributy a značky.
animation booleovský true Na vyskakovací okno použijte přechod prolínání CSS.
boundary řetězec, prvek 'clippingParents' Hranice omezení přetečení vyskakovacího okna (platí pouze pro Popperův modifikátor preventOverflow). Ve výchozím nastavení je 'clippingParents'a může přijímat odkaz HTMLElement (pouze prostřednictvím JavaScriptu). Další informace naleznete v dokumentech DetectOverflow společnosti Popper .
container řetězec, prvek, nepravda false Připojí vyskakovací okno ke konkrétnímu prvku. Příklad: container: 'body'. Tato možnost je užitečná zejména v tom, že vám umožňuje umístit vyskakovací okno v toku dokumentu blízko spouštěcího prvku – což zabrání tomu, aby vyskakovací okno odplouval pryč od spouštěcího prvku během změny velikosti okna.
content řetězec, prvek, funkce '' Výchozí hodnota obsahu, pokud data-bs-contentatribut není přítomen. Je-li zadána funkce, bude volána se svou thisreferenční sadou na prvek, ke kterému je popover připojen.
customClass řetězec, funkce '' Přidejte třídy do vyskakovacího okna, když se zobrazí. Všimněte si, že tyto třídy budou přidány k jakýmkoli třídám uvedeným v šabloně. Chcete-li přidat více tříd, oddělte je mezerami: 'class-1 class-2'. Můžete také předat funkci, která by měla vrátit jeden řetězec obsahující další názvy tříd.
delay číslo, objekt 0 Zpoždění zobrazení a skrytí vyskakovacího okna (ms) – nevztahuje se na typ ručního spouštění. Pokud je zadáno číslo, použije se prodleva pro skrytí/zobrazení. Struktura objektu je: delay: { "show": 500, "hide": 100 }.
fallbackPlacements řetězec, pole ['top', 'right', 'bottom', 'left'] Definujte záložní umístění poskytnutím seznamu umístění v poli (v preferovaném pořadí). Další informace naleznete v dokumentech Popper's behavior .
html booleovský false Povolit HTML ve vyskakovacím okně. Pokud je true, HTML tagy ve vyskakovacím okně titlebudou vykresleny ve vyskakovacím okně. Pokud je false, innerTextvlastnost se použije k vložení obsahu do DOM. Pokud se obáváte útoků XSS, použijte text.
offset číslo, řetězec, funkce [0, 0] Posun vyskakovacího okna vzhledem k jeho cíli. V atributech dat můžete předat řetězec s hodnotami oddělenými čárkami, jako jsou: data-bs-offset="10,20". Když je funkce použita k určení offsetu, je volána s objektem obsahujícím umístění popper, odkaz a popper rects jako svůj první argument. Uzel DOM spouštěcího prvku je předán jako druhý argument. Funkce musí vrátit pole se dvěma čísly: skidding , distance . Další informace naleznete v Popperově ofsetové dokumentaci .
placement řetězec, funkce 'top' Jak umístit vyskakovací okno: automaticky, nahoře, dole, vlevo, vpravo. Když autoje zadáno, dynamicky změní orientaci vyskakovacího okna. Když je k určení umístění použita funkce, je volána s popover uzlem DOM jako prvním argumentem a spouštěcím prvkem DOM uzlem jako druhým. Kontext thisje nastaven na instanci vyskakovacího okna.
popperConfig null, objekt, funkce null Chcete-li změnit výchozí konfiguraci Popperu Bootstrapu, viz Konfigurace Popperu . Když je funkce použita k vytvoření konfigurace Popper, je volána s objektem, který obsahuje výchozí konfiguraci Popperu Bootstrapu. Pomůže vám použít a sloučit výchozí nastavení s vaší vlastní konfigurací. Funkce musí vrátit konfigurační objekt pro Popper.
sanitize booleovský true Povolit nebo zakázat dezinfekci. Pokud je aktivováno 'template', 'content'a 'title'možnosti budou dezinfikovány.
sanitizeFn null, funkce null Zde si můžete dodat vlastní funkci dezinfekce. To může být užitečné, pokud dáváte přednost použití vyhrazené knihovny k provádění sanitace.
selector řetězec, nepravda false Pokud je k dispozici selektor, překryvné objekty budou delegovány na zadané cíle. V praxi se to používá také k aplikaci popoverů na dynamicky přidávané prvky DOM ( jQuery.onpodpora). Viz toto vydání a informativní příklad .
template tětiva '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Základní HTML, které se použije při vytváření vyskakovacího okna. Popover titlebude vstříknut do .popover-inner. .popover-arrowse stane šipkou vyskakovacího okna. Nejvzdálenější prvek obalu by měl mít .popovertřídy a role="popover".
title řetězec, prvek, funkce '' Výchozí hodnota názvu, pokud titleatribut není přítomen. Je-li zadána funkce, bude volána se svou thisreferenční sadou na prvek, ke kterému je popover připojen.
trigger tětiva 'hover focus' Jak se spouští vyskakovací okno: kliknutí, najetí myší, zaostření, manuální. Můžete předat více spouštěčů; oddělte je mezerou. 'manual'označuje, že vyskakovací okno bude spuštěno programově pomocí metod .popover('show'), .popover('hide')a ; .popover('toggle')tuto hodnotu nelze kombinovat s žádným jiným spouštěčem. 'hover'sama o sobě povede k vyskakovacím oknům, která nelze spustit pomocí klávesnice, a měla by být používána pouze v případě, že existují alternativní způsoby přenosu stejných informací pro uživatele klávesnice.

Atributy dat pro jednotlivá vyskakovací okna

Volby pro jednotlivá vyskakovací okna lze alternativně specifikovat pomocí datových atributů, jak je vysvětleno výše.

Použití funkce spopperConfig

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

Metody

Asynchronní metody a přechody

Všechny metody API jsou asynchronní a zahajují přechod . Vrátí se k volajícímu, jakmile je přechod zahájen, ale před jeho ukončením . Kromě toho bude ignorováno volání metody na přechodové komponentě .

Další informace naleznete v naší dokumentaci k JavaScriptu .

Metoda Popis
disable Odebere možnost zobrazení vyskakovacího okna prvku. Vyskakovací okno se bude moci zobrazit pouze v případě, že bude znovu povoleno.
dispose Skryje a zničí popover prvku (Odstraní uložená data v prvku DOM). Popovers, která používají delegování (která jsou vytvořena pomocí volby ) selector, nelze jednotlivě zničit na podřízených spouštěcích prvcích.
enable Umožňuje zobrazení vyskakovacího okna prvku. Popovers jsou ve výchozím nastavení povoleny.
getInstance Statická metoda, která vám umožňuje získat instanci popover přidruženou k prvku DOM.
getOrCreateInstance Statická metoda, která vám umožňuje získat instanci popover přidruženou k prvku DOM nebo vytvořit novou v případě, že nebyla inicializována.
hide Skryje popover prvku. Vrátí se k volajícímu dříve, než byl vyskakovací okno skutečně skryt (tj. než dojde k hidden.bs.popoverudálosti). Toto je považováno za „ruční“ spuštění vyskakovacího okna.
setContent Umožňuje změnit obsah vyskakovacího okna po jeho inicializaci.
show Odhalí popover prvku. Vrátí se k volajícímu dříve, než se vyskakovací okno skutečně zobrazilo (tj. než dojde k shown.bs.popoverudálosti). Toto je považováno za „ruční“ spuštění vyskakovacího okna. Popovery, jejichž název i obsah mají nulovou délku, se nikdy nezobrazují.
toggle Přepíná vyskakovací okno prvku. Vrátí se k volajícímu předtím, než se vyskakovací okno skutečně zobrazí nebo skryje (tj. než dojde k události shown.bs.popovernebo ). hidden.bs.popoverToto je považováno za „ruční“ spuštění vyskakovacího okna.
toggleEnabled Přepíná možnost zobrazení nebo skrytí vyskakovacího okna prvku.
update Aktualizuje pozici vyskakovací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'
})
Metoda setContentpřijímá objectargument, kde každý klíč vlastnosti je platným stringselektorem v šabloně vyskakovacího okna a každá související hodnota vlastnosti může být string| element| function| null

Události

událost Popis
hide.bs.popover Tato událost se spustí okamžitě po hidezavolání metody instance.
hidden.bs.popover Tato událost se spustí, když je vyskakovací okno skryto před uživatelem (bude čekat na dokončení přechodů CSS).
inserted.bs.popover Tato událost se spustí po show.bs.popoverudálosti, kdy byla šablona vyskakovacího okna přidána do modelu DOM.
show.bs.popover Tato událost se spustí okamžitě při showvolání metody instance.
shown.bs.popover Tato událost se spustí, když se vyskakovací okno zviditelní uživateli (bude čekat na dokončení přechodů CSS).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})