Popovers
Dokumentation och exempel för att lägga till Bootstrap popovers, som de som finns i iOS, till valfritt element på din webbplats.
Översikt
Saker att veta när du använder popover-plugin:
- Popovers förlitar sig på tredje parts bibliotek Popper för positionering. Du måste inkludera popper.min.js före
bootstrap.js
, eller använda enbootstrap.bundle.min.js
som innehåller Popper. - Popovers kräver popover-plugin som ett beroende.
- Popovers är opt-in av prestandaskäl, så du måste initiera dem själv .
- Nolllängd
title
ochcontent
värden kommer aldrig att visa en popover. - Ange
container: 'body'
för att undvika att problem återges i mer komplexa komponenter (som våra indatagrupper, knappgrupper, etc). - Att utlösa popovers på dolda element kommer inte att fungera.
- Popovers för
.disabled
ellerdisabled
element måste utlösas på ett omslagselement. - När de utlöses från ankare som lindas över flera linjer, kommer popovers att centreras mellan ankarnas totala bredd. Använd
.text-nowrap
på din<a>
s för att undvika detta beteende. - Popovers måste döljas innan deras motsvarande element har tagits bort från DOM.
- Popovers kan utlösas tack vare ett element inuti en skugga DOM.
prefers-reduced-motion
mediefrågan. Se
avsnittet för reducerad rörelse i vår tillgänglighetsdokumentation .
Fortsätt läsa för att se hur popovers fungerar med några exempel.
Exempel
Aktivera popovers
Som nämnts ovan måste du initiera popovers innan de kan användas. Ett sätt att initiera alla popovers på en sida skulle vara att välja dem efter deras data-bs-toggle
attribut, som så:
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
Live-demo
Vi använder JavaScript som liknar kodavsnittet ovan för att rendera följande live popover. Titlar ställs in via data-bs-title
och kroppsinnehåll ställs in via data-bs-content
.
title
eller
data-bs-title
i din HTML. När
title
den används kommer Popper att ersätta den automatiskt med
data-bs-title
när elementet renderas.
<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>
Fyra riktningar
Fyra alternativ är tillgängliga: topp, höger, botten och vänster. Vägbeskrivningarna speglas när du använder Bootstrap i RTL. Ställ data-bs-placement
in för att ändra riktning.
<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>
Beställningscontainer
När du har några stilar på ett överordnat element som stör en popover, vill du ange en anpassad container
så att popoverens HTML visas i det elementet istället. Detta är vanligt i responsiva tabeller, inmatningsgrupper och liknande.
const popover = new bootstrap.Popover('.example-popover', {
container: 'body'
})
En annan situation där du vill ställa in en explicit anpassad container
är popovers i en modal dialogruta , för att se till att själva popoveren läggs till modalen. Detta är särskilt viktigt för popovers som innehåller interaktiva element – modala dialoger kommer att fånga fokus, så om inte popoveren är ett underordnat element till modalen, kommer användare inte att kunna fokusera eller aktivera dessa interaktiva element.
const popover = new bootstrap.Popover('.example-popover', {
container: '.modal-body'
})
Anpassade popovers
Lades till i v5.2.0Du kan anpassa utseendet på popovers med hjälp av CSS-variabler . Vi ställer in en anpassad klass med data-bs-custom-class="custom-popover"
för att omfånga vårt anpassade utseende och använder den för att åsidosätta några av de lokala CSS-variablerna.
.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>
Stäng vid nästa klick
Använd focus
triggern för att ta bort popovers vid nästa klick på ett annat element än växlingselementet.
Specifik uppmärkning krävs för att ta bort-vid-nästa-klick
För korrekt beteende över webbläsare och plattformar måste du använda <a>
taggen, inte<button>
taggen, och du måste även inkludera ett tabindex
attribut.
<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'
})
Inaktiverade element
Element med disabled
attributet är inte interaktiva, vilket innebär att användare inte kan hålla muspekaren eller klicka på dem för att utlösa en popover (eller verktygstips). Som en lösning bör du trigga popover från ett omslag <div>
eller <span>
, idealiskt gjort tangentbordsfokuserbart med tabindex="0"
.
För inaktiverade popover-utlösare kanske du också föredrar data-bs-trigger="hover focus"
att popover-fönstret visas som omedelbar visuell feedback till dina användare eftersom de kanske inte förväntar sig att klicka på ett inaktiverat element.
<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
Variabler
Lades till i v5.2.0Som en del av Bootstraps utvecklande CSS-variabler använder popovers nu lokala CSS-variabler .popover
för förbättrad realtidsanpassning. Värden för CSS-variablerna ställs in via Sass, så Sass-anpassning stöds fortfarande också.
--#{$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 variabler
$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;
Användande
Aktivera popovers via JavaScript:
const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)
Att få popovers att fungera för användare av tangentbord och hjälpmedel
För att tillåta tangentbordsanvändare att aktivera dina popovers bör du bara lägga till dem i HTML-element som traditionellt är tangentbordsfokuserade och interaktiva (som länkar eller formulärkontroller). Även om godtyckliga HTML-element (som <span>
s) kan göras fokuserbara genom att lägga till tabindex="0"
attributet, kommer detta att lägga till potentiellt irriterande och förvirrande tabbstopp på icke-interaktiva element för tangentbordsanvändare, och de flesta hjälpmedelstekniker meddelar för närvarande inte popoverens innehåll i denna situation . Dessutom, lita inte enbart på hover
som utlösare för dina popovers, eftersom detta kommer att göra dem omöjliga att utlösa för tangentbordsanvändare.
Även om du kan infoga rik, strukturerad HTML i popovers med html
alternativet, rekommenderar vi starkt att du undviker att lägga till en överdriven mängd innehåll. Sättet som popovers fungerar för närvarande är att, när de väl visas, är deras innehåll kopplat till triggerelementet med aria-describedby
attributet. Som ett resultat kommer hela popover-innehållet att tillkännages för hjälpmedelsanvändare som en lång, oavbruten ström.
Dessutom, även om det är möjligt att även inkludera interaktiva kontroller (som formulärelement eller länkar) i din popover (genom att lägga till dessa element till de allowList
tillåtna attributen och taggar), var medveten om att popover för närvarande inte hanterar tangentbordets fokusordning. När en tangentbordsanvändare öppnar en popover förblir fokus på det utlösande elementet, och eftersom popoveren vanligtvis inte omedelbart följer utlösaren i dokumentets struktur, finns det ingen garanti för att gå framåt/tryckaTABkommer att flytta en tangentbordsanvändare till själva popover-fönstret. Kort sagt, att helt enkelt lägga till interaktiva kontroller till en popover kommer sannolikt att göra dessa kontroller oåtkomliga/oanvändbara för tangentbordsanvändare och användare av hjälpmedel, eller åtminstone skapa en ologisk övergripande fokusordning. I dessa fall, överväg att använda en modal dialogruta istället.
alternativ
Eftersom alternativ kan skickas via dataattribut eller JavaScript kan du lägga till ett alternativnamn till data-bs-
, som i data-bs-animation="{value}"
. Se till att ändra fallets typ av alternativnamnet från " camelCase " till " kebab-case " när du skickar alternativen via dataattribut. Använd till exempel data-bs-custom-class="beautifier"
istället för data-bs-customClass="beautifier"
.
Från och med Bootstrap 5.2.0 stöder alla komponenter ett experimentellt reserverat dataattribut data-bs-config
som kan hysa enkel komponentkonfiguration som en JSON-sträng. När ett element har data-bs-config='{"delay":0, "title":123}'
och data-bs-title="456"
attribut kommer det slutliga title
värdet att vara 456
och de separata dataattributen kommer att åsidosätta värden som ges på data-bs-config
. Dessutom kan befintliga dataattribut innehålla JSON-värden som data-bs-delay='{"show":0,"hide":150}'
.
sanitize
Observera att alternativen ,
sanitizeFn
, och
av säkerhetsskäl
allowList
inte kan tillhandahållas med dataattribut.
namn | Typ | Standard | Beskrivning |
---|---|---|---|
allowList |
objekt | Standardvärde | Objekt som innehåller tillåtna attribut och taggar. |
animation |
booleskt | true |
Tillämpa en CSS-tonningsövergång på popover-fönstret. |
boundary |
sträng, element | 'clippingParents' |
Overflow-begränsningsgräns för popover (gäller endast Poppers preventOverflow-modifierare). Som standard är 'clippingParents' och kan det acceptera en HTMLElement-referens (endast via JavaScript). För mer information se Poppers detectOverflow -dokument . |
container |
sträng, element, falsk | false |
Lägger till popover till ett specifikt element. Exempel: container: 'body' . Det här alternativet är särskilt användbart eftersom det låter dig placera popover i dokumentflödet nära det utlösande elementet - vilket kommer att förhindra popover från att flyta bort från det utlösande elementet under en fönsterstorleksändring. |
content |
sträng, element, funktion | '' |
Standardvärde för innehåll om data-bs-content attributet inte finns. Om en funktion ges kommer den att anropas med dess this referens inställd på elementet som popoveren är kopplad till. |
customClass |
sträng, funktion | '' |
Lägg till klasser i popover-fönstret när det visas. Observera att dessa klasser kommer att läggas till utöver de klasser som anges i mallen. För att lägga till flera klasser, separera dem med mellanslag: 'class-1 class-2' . Du kan också skicka en funktion som ska returnera en enda sträng som innehåller ytterligare klassnamn. |
delay |
nummer, objekt | 0 |
Fördröj visning och döljning av popover (ms) – gäller inte manuell triggertyp. Om ett nummer tillhandahålls tillämpas fördröjning på både hide/show. Objektstrukturen är: delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
sträng, array | ['top', 'right', 'bottom', 'left'] |
Definiera reservplaceringar genom att tillhandahålla en lista över placeringar i array (i prioritetsordning). För mer information se Poppers beteendedokumentation . |
html |
booleskt | false |
Tillåt HTML i popover-fönstret. Om det är sant kommer HTML-taggar i popoveren title att renderas i popoveren. Om det är falskt kommer innerText egenskapen att användas för att infoga innehåll i DOM. Använd text om du är orolig för XSS-attacker. |
offset |
nummer, sträng, funktion | [0, 0] |
Förskjutning av popover i förhållande till dess mål. Du kan skicka en sträng i dataattribut med kommaseparerade värden som: data-bs-offset="10,20" . När en funktion används för att bestämma offset, anropas den med ett objekt som innehåller popperplaceringen, referensen och popper rects som dess första argument. Det utlösande elementets DOM-nod skickas som det andra argumentet. Funktionen måste returnera en array med två siffror: sladd , avstånd . För mer information se Poppers offset -dokument . |
placement |
sträng, funktion | 'top' |
Så här placerar du popover: auto, topp, botten, vänster, höger. När auto det anges kommer det dynamiskt att omorientera popover-fönstret. När en funktion används för att bestämma placeringen anropas den med popover-DOM-noden som sitt första argument och det utlösande elementet DOM-noden som sin andra. Kontexten this är inställd på popover-instansen. |
popperConfig |
null, objekt, funktion | null |
För att ändra Bootstraps standard Popper-konfiguration, se Poppers konfiguration . När en funktion används för att skapa Popper-konfigurationen, anropas den med ett objekt som innehåller Bootstraps standard Popper-konfiguration. Det hjälper dig att använda och slå samman standarden med din egen konfiguration. Funktionen måste returnera ett konfigurationsobjekt för Popper. |
sanitize |
booleskt | true |
Aktivera eller inaktivera saneringen. Om aktiverat 'template' , 'content' och 'title' alternativ kommer att saneras. |
sanitizeFn |
null, funktion | null |
Här kan du tillhandahålla din egen desinficeringsfunktion. Detta kan vara användbart om du föredrar att använda ett dedikerat bibliotek för att utföra sanering. |
selector |
sträng, falsk | false |
Om en väljare tillhandahålls kommer popover-objekt att delegeras till de angivna målen. I praktiken används detta för att även tillämpa popovers på dynamiskt tillagda DOM-element ( jQuery.on stöd). Se detta nummer och ett informativt exempel . |
template |
sträng | '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' |
Basera HTML att använda när du skapar popover. Popover title kommer att injiceras i .popover-inner . .popover-arrow kommer att bli popoverens pil. Det yttersta omslagselementet ska ha .popover klassen och role="popover" . |
title |
sträng, element, funktion | '' |
Standardtitelvärde om title attributet inte finns. Om en funktion ges kommer den att anropas med dess this referens inställd på elementet som popoveren är kopplad till. |
trigger |
sträng | 'hover focus' |
Hur popover utlöses: klick, hovra, fokus, manuell. Du kan passera flera triggers; separera dem med ett mellanslag. 'manual' indikerar att popover kommer att utlösas programmatiskt via metoderna .popover('show') , .popover('hide') och .popover('toggle') ; detta värde kan inte kombineras med någon annan trigger. 'hover' på egen hand kommer att resultera i popovers som inte kan utlösas via tangentbordet, och bör endast användas om alternativa metoder för att förmedla samma information till tangentbordsanvändare finns. |
Dataattribut för enskilda popovers
Alternativ för individuella popovers kan alternativt specificeras genom användning av dataattribut, som förklarats ovan.
Använder funktion medpopperConfig
const popover = new bootstrap.Popover(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Metoder
Asynkrona metoder och övergångar
Alla API - metoder är asynkrona och startar en övergång . De återvänder till den som ringer så snart övergången har påbörjats men innan den slutar . Dessutom kommer ett metodanrop på en övergångskomponent att ignoreras .
Metod | Beskrivning |
---|---|
disable |
Tar bort möjligheten för ett elements popover att visas. Popover kommer bara att kunna visas om det återaktiveras. |
dispose |
Döljer och förstör ett elements popover (tar bort lagrad data på DOM-elementet). Popovers som använder delegering (som skapas med alternativet selector ) kan inte förstöras individuellt på underliggande triggerelement. |
enable |
Ger ett elements popover möjligheten att visas. Popovers är aktiverade som standard. |
getInstance |
Statisk metod som låter dig få popover-instansen associerad med ett DOM-element. |
getOrCreateInstance |
Statisk metod som låter dig få popover-instansen associerad med ett DOM-element, eller skapa en ny om den inte initierades. |
hide |
Döljer ett elements popover. Återgår till den som ringer innan popover faktiskt har dolts (dvs innan hidden.bs.popover händelsen inträffar). Detta anses vara en "manuell" utlösning av popover. |
setContent |
Ger ett sätt att ändra popover-innehållet efter dess initialisering. |
show |
Avslöjar ett elements popover. Återgår till den som ringer innan popover faktiskt har visats (dvs innan shown.bs.popover händelsen inträffar). Detta anses vara en "manuell" utlösning av popover. Popovers vars titel och innehåll båda är nolllängd visas aldrig. |
toggle |
Växlar ett elements popover. Återgår till den som ringer innan popover faktiskt har visats eller dolt (dvs innan händelsen shown.bs.popover eller hidden.bs.popover inträffar). Detta anses vara en "manuell" utlösning av popover. |
toggleEnabled |
Växlar möjligheten för ett elements popover att visas eller döljas. |
update |
Uppdaterar positionen för ett elements popover. |
// 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
accepterar ett
object
argument, där varje egenskapsnyckel är en giltig
string
väljare inom popovermallen, och varje relaterat egenskapsvärde kan vara
string
|
element
|
function
|
null
evenemang
Händelse | Beskrivning |
---|---|
hide.bs.popover |
Denna händelse aktiveras omedelbart när hide instansmetoden har anropats. |
hidden.bs.popover |
Den här händelsen aktiveras när popover-fönstret har döljts för användaren (väntar på att CSS-övergångar ska slutföras). |
inserted.bs.popover |
Denna händelse aktiveras efter show.bs.popover händelsen när popover-mallen har lagts till i DOM. |
show.bs.popover |
Denna händelse aktiveras omedelbart när show instansmetoden anropas. |
shown.bs.popover |
Den här händelsen aktiveras när popoveren har gjorts synlig för användaren (väntar på att CSS-övergångar ska slutföras). |
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
// do something...
})