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.js
of er een gebruikenbootstrap.bundle.min.js
die Popper bevat. - Popovers vereisen de popover-plug- in als afhankelijkheid.
- Popovers zijn opt-in om prestatieredenen, dus u moet ze zelf initialiseren .
- Nullengte
title
encontent
waarden 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
.disabled
ofdisabled
elementen 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-nowrap
op 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.
prefers-reduced-motion
mediaquery. 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-toggle
attribuut 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-title
en de inhoud van de inhoud wordt ingesteld via data-bs-content
.
title
of
data-bs-title
in je HTML te gebruiken. Wanneer
title
wordt gebruikt, zal Popper het automatisch vervangen door
data-bs-title
wanneer het element wordt weergegeven.
<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-placement
in om van richting te veranderen.
<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 container
zodat 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, container
zijn 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.0U 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;
}
<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 focus
trigger 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 tabindex
attribuut opnemen.
<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 disabled
attribuut 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 .
<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.0Als 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 hover
als 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, html
raden 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-describedby
attribuut. 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 allowList
toegestane 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-config
dat 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 title
waarde zijn 456
en 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}'
.
sanitize
,
sanitizeFn
, en
allowList
niet 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-content kenmerk niet aanwezig is. Als een functie is opgegeven, wordt deze aangeroepen met de this referentieset 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 title weergegeven in de popover. Indien onwaar, wordt innerText de 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 auto is 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 this context 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.on ondersteuning). 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 title worden in de .popover-inner . .popover-arrow wordt de pijl van de popover. Het buitenste wrapper-element moet de .popover klasse en hebben role="popover" . |
title |
tekenreeks, element, functie | '' |
Standaardtitelwaarde als title attribuut niet aanwezig is. Als een functie is opgegeven, wordt deze aangeroepen met de this referentieset 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 .
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 selector optie ) 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.popover gebeurtenis 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.popover gebeurtenis 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.popover of 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'
})
setContent
methode accepteert een
object
argument, waarbij elke eigenschapssleutel een geldige
string
selector 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 hide instantiemethode 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.popover gebeurtenis wanneer de popover-sjabloon is toegevoegd aan de DOM. |
show.bs.popover |
Deze gebeurtenis wordt onmiddellijk geactiveerd wanneer de show instantiemethode 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...
})