Ga naar hoofdinhoud Ga naar navigatie in documenten
Check
in English

Popovers

Documentatie en voorbeelden voor het toevoegen van Bootstrap-popovers, zoals die in iOS, aan elk element op uw site.

Overzicht

Wat u moet weten bij het gebruik van de popover-plug-in:

  • Popovers vertrouwen op de externe bibliotheek Popper voor positionering. U moet popper.min.js vóór opnemen bootstrap.jsof er een gebruiken bootstrap.bundle.min.jsdie Popper bevat.
  • Popovers vereisen de popover-plug- in als afhankelijkheid.
  • Popovers zijn opt-in om prestatieredenen, dus u moet ze zelf initialiseren .
  • Nullengte titleen contentwaarden zullen nooit een popover laten zien.
  • Specificeer container: 'body'om weergaveproblemen in complexere componenten te voorkomen (zoals onze invoergroepen, knopgroepen, enz.).
  • Het activeren van popovers op verborgen elementen werkt niet.
  • Popovers voor .disabledof disabledelementen moeten worden geactiveerd op een wrapper-element.
  • Wanneer geactiveerd door ankers die over meerdere lijnen lopen, worden popovers gecentreerd tussen de totale breedte van de ankers. Gebruik .text-nowrapop uw <a>s om dit gedrag te voorkomen.
  • Popovers moeten worden verborgen voordat de bijbehorende elementen uit het DOM zijn verwijderd.
  • Popovers kunnen worden geactiveerd dankzij een element in een schaduw-DOM.
Standaard gebruikt dit onderdeel de ingebouwde inhoudsanitizer, die HTML-elementen verwijdert die niet expliciet zijn toegestaan. Zie het gedeelte over ontsmettingsmiddel in onze JavaScript-documentatie voor meer informatie.
Het animatie-effect van deze component is afhankelijk van de prefers-reduced-motionmediaquery. Zie het gedeelte over beperkte beweging van onze toegankelijkheidsdocumentatie .

Blijf lezen om te zien hoe popovers werken met enkele voorbeelden.

Voorbeelden

Popovers inschakelen

Zoals hierboven vermeld, moet u popovers initialiseren voordat ze kunnen worden gebruikt. Een manier om alle popovers op een pagina te initialiseren, is door ze op hun data-bs-toggleattribuut te selecteren, zoals:

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

Live demonstratie

We gebruiken JavaScript vergelijkbaar met het bovenstaande fragment om de volgende live popover weer te geven. Titels worden ingesteld via data-bs-titleen de inhoud van de inhoud wordt ingesteld via data-bs-content.

Voel je vrij om een ​​van beide titleof data-bs-titlein je HTML te gebruiken. Wanneer titlewordt gebruikt, zal Popper het automatisch vervangen door data-bs-titlewanneer het element wordt weergegeven.
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>

Vier richtingen

Er zijn vier opties beschikbaar: boven, rechts, onder en links. Routebeschrijvingen worden gespiegeld bij gebruik van Bootstrap in RTL. Stel data-bs-placementin om van richting te veranderen.

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>

Aangepastcontainer

Als je enkele stijlen op een bovenliggend element hebt die een popover verstoren, moet je een custom specificeren containerzodat de HTML van de popover in plaats daarvan binnen dat element verschijnt. Dit is gebruikelijk in responsieve tabellen, invoergroepen en dergelijke.

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

Een andere situatie waarin u een expliciete gewoonte wilt instellen, containerzijn popovers in een modaal dialoogvenster , om ervoor te zorgen dat de popover zelf aan de modal wordt toegevoegd. Dit is vooral belangrijk voor popovers die interactieve elementen bevatten - modale dialogen zullen de focus vangen, dus tenzij de popover een onderliggend element van de modal is, kunnen gebruikers deze interactieve elementen niet focussen of activeren.

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

Aangepaste popovers

Toegevoegd in v5.2.0

U kunt het uiterlijk van popovers aanpassen met behulp van CSS-variabelen . We hebben een aangepaste klasse ingesteld data-bs-custom-class="custom-popover"waarmee we ons aangepaste uiterlijk kunnen bepalen en gebruiken deze om enkele lokale CSS-variabelen te overschrijven.

.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>

Sluiten bij volgende klik

Gebruik de focustrigger om popovers te sluiten bij de volgende klik van de gebruiker op een ander element dan het schakelelement.

Specifieke opmaak vereist voor afwijzen bij volgende klik

Voor correct cross-browser en cross-platform gedrag moet u de <a>tag gebruiken, niet de <button>tag, en moet u ook een tabindexattribuut opnemen.

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

Uitgeschakelde elementen

Elementen met het disabledattribuut zijn niet interactief, wat betekent dat gebruikers er niet met de muis over kunnen gaan of erop kunnen klikken om een ​​popover (of knopinfo) te activeren. Als tijdelijke oplossing wil je de popover activeren vanuit een wrapper <div>of <span>, idealiter gemaakt om te focussen op het toetsenbord met tabindex="0".

Voor uitgeschakelde popover-triggers kunt u er ook de voorkeur aan geven data-bs-trigger="hover focus"dat de popover wordt weergegeven als onmiddellijke visuele feedback voor uw gebruikers, omdat ze niet verwachten dat ze op een uitgeschakeld element zullen klikken .

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

Variabelen

Toegevoegd in v5.2.0

Als onderdeel van Bootstrap's evoluerende benadering van CSS-variabelen, gebruiken popovers nu lokale CSS .popover-variabelen voor verbeterde realtime aanpassingen. Waarden voor de CSS-variabelen worden ingesteld via Sass, dus Sass-aanpassing wordt ook nog steeds ondersteund.

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

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

Gebruik

Popovers inschakelen via JavaScript:

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

Popovers laten werken voor gebruikers van toetsenborden en ondersteunende technologie

Om toetsenbordgebruikers in staat te stellen uw popovers te activeren, moet u ze alleen toevoegen aan HTML-elementen die traditioneel toetsenbordgericht en interactief zijn (zoals koppelingen of formulierbesturingselementen). Hoewel willekeurige HTML-elementen (zoals <span>s) focusseerbaar kunnen worden gemaakt door het tabindex="0"attribuut toe te voegen, voegt dit mogelijk vervelende en verwarrende tabstops toe aan niet-interactieve elementen voor toetsenbordgebruikers, en de meeste ondersteunende technologieën kondigen momenteel de inhoud van de popover niet aan in deze situatie . Vertrouw er bovendien niet alleen op hoverals de trigger voor uw popovers, omdat dit het onmogelijk maakt om ze te activeren voor toetsenbordgebruikers.

Hoewel u met deze optie uitgebreide, gestructureerde HTML in popovers kunt invoegen, htmlraden we u ten zeerste aan om geen overmatige hoeveelheid inhoud toe te voegen. De manier waarop popovers momenteel werken, is dat, zodra ze worden weergegeven, hun inhoud is gekoppeld aan het trigger-element met het aria-describedbyattribuut. Als gevolg hiervan zal de volledige inhoud van de popover worden aangekondigd aan gebruikers van ondersteunende technologie als één lange, ononderbroken stream.

Bovendien, hoewel het mogelijk is om ook interactieve bedieningselementen (zoals formulierelementen of koppelingen) in uw popover op te nemen (door deze elementen toe te voegen aan de allowListtoegestane attributen en tags), moet u er rekening mee houden dat de popover momenteel de focusvolgorde van het toetsenbord niet beheert. Wanneer een toetsenbordgebruiker een popover opent, blijft de focus op het activerende element, en aangezien de popover meestal niet onmiddellijk de trigger in de structuur van het document volgt, is er geen garantie dat vooruit gaan/drukkenTABzal een toetsenbordgebruiker naar de popover zelf verplaatsen. Kortom, het simpelweg toevoegen van interactieve bedieningselementen aan een popover maakt deze bedieningselementen waarschijnlijk onbereikbaar/onbruikbaar voor toetsenbordgebruikers en gebruikers van ondersteunende technologieën, of zorgt op zijn minst voor een onlogische algemene focusvolgorde. Overweeg in deze gevallen om in plaats daarvan een modaal dialoogvenster te gebruiken.

Opties

Omdat opties kunnen worden doorgegeven via gegevensattributen of JavaScript, kunt u een optienaam toevoegen aan data-bs-, zoals in data-bs-animation="{value}". Zorg ervoor dat u het kasttype van de optienaam wijzigt van " camelCase " in " kebab-case " wanneer u de opties doorgeeft via gegevensattributen. Gebruik bijvoorbeeld in data-bs-custom-class="beautifier"plaats van data-bs-customClass="beautifier".

Vanaf Bootstrap 5.2.0 ondersteunen alle componenten een experimenteel gereserveerd gegevenskenmerk data-bs-configdat een eenvoudige componentconfiguratie als een JSON-tekenreeks kan bevatten. Wanneer een element attributen heeft data-bs-config='{"delay":0, "title":123}', zal data-bs-title="456"de uiteindelijke titlewaarde zijn 456en zullen de afzonderlijke gegevensattributen de waarden overschrijven die op data-bs-config. Bovendien kunnen bestaande gegevensattributen JSON-waarden zoals data-bs-delay='{"show":0,"hide":150}'.

Houd er rekening mee dat om veiligheidsredenen de opties sanitize, sanitizeFn, en allowListniet kunnen worden geleverd met gegevensattributen.
Naam Type Standaard Beschrijving
allowList object Standaardwaarde Object dat toegestane attributen en tags bevat.
animation booleaans true Pas een CSS-vervagingsovergang toe op de popover.
boundary tekenreeks, element 'clippingParents' Overloopbeperkingsgrens van de popover (alleen van toepassing op de preventOverflow-modifier van Popper). Standaard is 'clippingParents'en kan het een HTMLElement-referentie accepteren (alleen via JavaScript). Voor meer informatie raadpleegt u Popper's detectOverflow docs .
container string, element, false false Voegt de popover toe aan een specifiek element. Voorbeeld: container: 'body'. Deze optie is met name handig omdat u de popover in de stroom van het document in de buurt van het activerende element kunt plaatsen - waardoor wordt voorkomen dat de popover van het activerende element wegzweeft tijdens het formaat van het venster.
content tekenreeks, element, functie '' Standaard inhoudswaarde als data-bs-contentkenmerk niet aanwezig is. Als een functie is opgegeven, wordt deze aangeroepen met de thisreferentieset naar het element waaraan de popover is gekoppeld.
customClass tekenreeks, functie '' Voeg klassen toe aan de popover wanneer deze wordt weergegeven. Houd er rekening mee dat deze klassen worden toegevoegd naast de klassen die in de sjabloon zijn gespecificeerd. Om meerdere klassen toe te voegen, scheidt u ze met spaties: 'class-1 class-2'. U kunt ook een functie doorgeven die een enkele tekenreeks moet retourneren met extra klassenamen.
delay nummer, object 0 Vertraging bij het tonen en verbergen van de popover (ms)—is niet van toepassing op het handmatige triggertype. Als een nummer wordt opgegeven, wordt vertraging toegepast op zowel verbergen/weergeven. Objectstructuur is: delay: { "show": 500, "hide": 100 }.
fallbackPlacements string, array ['top', 'right', 'bottom', 'left'] Definieer fallback-plaatsingen door een lijst met plaatsingen in een array op te geven (in volgorde van voorkeur). Raadpleeg voor meer informatie de gedragsdocumenten van Popper .
html booleaans false Sta HTML toe in de popover. Indien waar, worden HTML-tags in de popovers titleweergegeven in de popover. Indien onwaar, wordt innerTextde eigenschap gebruikt om inhoud in de DOM in te voegen. Gebruik sms als je je zorgen maakt over XSS-aanvallen.
offset getal, tekenreeks, functie [0, 0] Offset van de popover ten opzichte van zijn doel. U kunt een tekenreeks in gegevensattributen doorgeven met door komma's gescheiden waarden zoals: data-bs-offset="10,20". Wanneer een functie wordt gebruikt om de offset te bepalen, wordt deze aangeroepen met een object dat de popper-plaatsing, de referentie en popper-rects als eerste argument bevat. Het triggerelement DOM-knooppunt wordt doorgegeven als het tweede argument. De functie moet een array teruggeven met twee getallen: skidding , distance . Raadpleeg voor meer informatie de offsetdocumenten van Popper .
placement tekenreeks, functie 'top' Hoe de popover te plaatsen: auto, boven, onder, links, rechts. Wanneer autois opgegeven, zal het de popover dynamisch heroriënteren. Wanneer een functie wordt gebruikt om de plaatsing te bepalen, wordt deze aangeroepen met het popover-DOM-knooppunt als het eerste argument en het activerende element DOM-knooppunt als het tweede. De thiscontext is ingesteld op de popover-instantie.
popperConfig null, object, functie null Zie de configuratie van Popper om de standaard Popper-configuratie van Bootstrap te wijzigen . Wanneer een functie wordt gebruikt om de Popper-configuratie te maken, wordt deze aangeroepen met een object dat de standaard Popper-configuratie van Bootstrap bevat. Het helpt u de standaard te gebruiken en samen te voegen met uw eigen configuratie. De functie moet een configuratieobject voor Popper teruggeven.
sanitize booleaans true Schakel de desinfectie in of uit. Indien geactiveerd 'template', 'content'worden 'title'de opties gezuiverd.
sanitizeFn null, functie null Hier kunt u uw eigen ontsmettingsfunctie leveren. Dit kan handig zijn als u liever een speciale bibliotheek gebruikt om op te schonen.
selector string, false false Als er een selector is, worden popover-objecten gedelegeerd aan de opgegeven doelen. In de praktijk wordt dit gebruikt om ook popovers toe te passen op dynamisch toegevoegde DOM-elementen ( jQuery.onondersteuning). Zie dit nummer en een informatief voorbeeld .
template snaar '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Basis-HTML die moet worden gebruikt bij het maken van de popover. De popover's titleworden in de .popover-inner. .popover-arrowwordt de pijl van de popover. Het buitenste wrapper-element moet de .popoverklasse en hebben role="popover".
title tekenreeks, element, functie '' Standaardtitelwaarde als titleattribuut niet aanwezig is. Als een functie is opgegeven, wordt deze aangeroepen met de thisreferentieset naar het element waaraan de popover is gekoppeld.
trigger snaar 'hover focus' Hoe popover wordt geactiveerd: klik, zweef, focus, handmatig. U kunt meerdere triggers doorgeven; scheid ze met een spatie. 'manual'geeft aan dat de popover programmatisch wordt geactiveerd via de .popover('show'), .popover('hide')en .popover('toggle')methoden; deze waarde kan niet worden gecombineerd met een andere trigger. 'hover'op zichzelf zal resulteren in popovers die niet via het toetsenbord kunnen worden geactiveerd, en mogen alleen worden gebruikt als er alternatieve methoden zijn om dezelfde informatie voor toetsenbordgebruikers over te brengen.

Gegevensattributen voor individuele popovers

Opties voor individuele popovers kunnen ook worden gespecificeerd door het gebruik van data-attributen, zoals hierboven uitgelegd.

Functie gebruiken metpopperConfig

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

Methoden:

Asynchrone methoden en overgangen

Alle API-methoden zijn asynchroon en starten een transitie . Ze keren terug naar de beller zodra de overgang is gestart maar voordat deze eindigt . Bovendien wordt een methodeaanroep op een overgangscomponent genegeerd .

Zie onze JavaScript-documentatie voor meer informatie .

Methode Beschrijving
disable Verwijdert de mogelijkheid om de popover van een element weer te geven. De popover kan alleen worden weergegeven als deze opnieuw wordt ingeschakeld.
dispose Verbergt en vernietigt de popover van een element (verwijdert opgeslagen gegevens op het DOM-element). Popovers die delegatie gebruiken (die zijn gemaakt met de selectoroptie ) kunnen niet afzonderlijk worden vernietigd op onderliggende triggerelementen.
enable Geeft de popover van een element de mogelijkheid om te worden weergegeven. Popovers zijn standaard ingeschakeld.
getInstance Statische methode waarmee u de popover-instantie kunt koppelen aan een DOM-element.
getOrCreateInstance Statische methode waarmee u de popover-instantie kunt koppelen aan een DOM-element, of een nieuwe kunt maken voor het geval deze niet is geïnitialiseerd.
hide Verbergt de popover van een element. Keert terug naar de beller voordat de popover daadwerkelijk is verborgen (dwz voordat de hidden.bs.popovergebeurtenis plaatsvindt). Dit wordt beschouwd als een "handmatige" activering van de popover.
setContent Geeft een manier om de inhoud van de popover te wijzigen na initialisatie.
show Onthult de popover van een element. Keert terug naar de beller voordat de popover daadwerkelijk is getoond (dwz voordat de shown.bs.popovergebeurtenis plaatsvindt). Dit wordt beschouwd als een "handmatige" activering van de popover. Popovers waarvan de titel en inhoud beide nul zijn, worden nooit weergegeven.
toggle Schakelt de popover van een element in. Keert terug naar de beller voordat de popover daadwerkelijk is getoond of verborgen (dwz voordat de shown.bs.popoverof hidden.bs.popover-gebeurtenis plaatsvindt). Dit wordt beschouwd als een "handmatige" activering van de popover.
toggleEnabled Schakelt de mogelijkheid in om de popover van een element te tonen of te verbergen.
update Werkt de positie van de popover van een element bij.
// 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'
})
De setContentmethode accepteert een objectargument, waarbij elke eigenschapssleutel een geldige stringselector is binnen de popover-sjabloon, en elke gerelateerde eigenschapswaarde kan string| element| function| null

Evenementen

Evenement Beschrijving
hide.bs.popover Deze gebeurtenis wordt onmiddellijk geactiveerd wanneer de hideinstantiemethode is aangeroepen.
hidden.bs.popover Deze gebeurtenis wordt geactiveerd wanneer de popover is verborgen voor de gebruiker (wacht tot de CSS-overgangen zijn voltooid).
inserted.bs.popover Deze gebeurtenis wordt geactiveerd na de show.bs.popovergebeurtenis wanneer de popover-sjabloon is toegevoegd aan de DOM.
show.bs.popover Deze gebeurtenis wordt onmiddellijk geactiveerd wanneer de showinstantiemethode wordt aangeroepen.
shown.bs.popover Deze gebeurtenis wordt geactiveerd wanneer de popover zichtbaar is gemaakt voor de gebruiker (wacht tot de CSS-overgangen zijn voltooid).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})