Popovers
Dokumentasjon og eksempler for å legge til Bootstrap popovers, som de som finnes i iOS, til ethvert element på nettstedet ditt.
Oversikt
Ting å vite når du bruker popover-plugin:
- Popovers er avhengige av tredjepartsbiblioteket Popper for posisjonering. Du må inkludere popper.min.js før
bootstrap.js
, eller bruke enbootstrap.bundle.min.js
som inneholder Popper. - Popovers krever popover-plugin som en avhengighet.
- Popovers er opt-in av ytelsesårsaker, så du må initialisere dem selv .
- Null-lengde
title
ogcontent
verdier vil aldri vise en popover. - Spesifiser
container: 'body'
for å unngå å gjengi problemer i mer komplekse komponenter (som våre inndatagrupper, knappegrupper osv.). - Å utløse popovers på skjulte elementer vil ikke fungere.
- Popovers for
.disabled
ellerdisabled
elementer må utløses på et wrapper-element. - Når de utløses fra ankere som går over flere linjer, vil popovers være sentrert mellom ankrenes totale bredde. Bruk
.text-nowrap
på din<a>
s for å unngå denne oppførselen. - Popovers må skjules før de tilhørende elementene er fjernet fra DOM.
- Popovers kan utløses takket være et element inne i en skygge-DOM.
prefers-reduced-motion
mediesøket. Se delen
for redusert bevegelse i tilgjengelighetsdokumentasjonen vår .
Fortsett å lese for å se hvordan popovers fungerer med noen eksempler.
Eksempler
Aktiver popovers
Som nevnt ovenfor, må du initialisere popovers før de kan brukes. En måte å initialisere alle popover-vinduer på en side er å velge dem etter data-bs-toggle
attributtet deres, slik:
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
Live demo
Vi bruker JavaScript som ligner på kodebiten ovenfor for å gjengi følgende live popover. Titler settes via data-bs-title
og kroppsinnhold settes via data-bs-content
.
title
eller
data-bs-title
i HTML-en din. Når
title
det brukes, vil Popper erstatte det automatisk med
data-bs-title
når elementet er gjengitt.
<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>
Fire retninger
Fire alternativer er tilgjengelige: topp, høyre, bunn og venstre. Retningene speiles når du bruker Bootstrap i RTL. Still data-bs-placement
inn for å endre retning.
<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>
Tilpassetcontainer
Når du har noen stiler på et overordnet element som forstyrrer en popover, vil du spesifisere en egendefinert container
slik at popoverens HTML vises i det elementet i stedet. Dette er vanlig i responsive tabeller, input-grupper og lignende.
const popover = new bootstrap.Popover('.example-popover', {
container: 'body'
})
En annen situasjon der du vil angi en eksplisitt egendefinert container
er popovers inne i en modal dialogboks , for å sikre at selve popoveren er lagt til modalen. Dette er spesielt viktig for popovers som inneholder interaktive elementer – modale dialoger vil fange fokus, så med mindre popoveren er et underordnet element av modalen, vil ikke brukere kunne fokusere eller aktivere disse interaktive elementene.
const popover = new bootstrap.Popover('.example-popover', {
container: '.modal-body'
})
Egendefinerte popovers
Lagt til i v5.2.0Du kan tilpasse utseendet til popovers ved hjelp av CSS-variabler . Vi setter en egendefinert klasse med data-bs-custom-class="custom-popover"
for å omfatte vårt tilpassede utseende og bruker den til å overstyre noen av de lokale CSS-variablene.
.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>
Avvis ved neste klikk
Bruk focus
triggeren til å avvise popovers ved brukerens neste klikk på et annet element enn veksleelementet.
Spesifikk markering kreves for avvisning ved neste klikk
For riktig oppførsel på tvers av nettlesere og plattformer må du bruke <a>
taggen, ikke<button>
taggen, og du må også inkludere et tabindex
attributt.
<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'
})
Deaktiverte elementer
Elementer med disabled
attributtet er ikke interaktive, noe som betyr at brukere ikke kan holde musepekeren eller klikke på dem for å utløse en popover (eller verktøytips). Som en løsning bør du utløse popover fra en innpakning <div>
eller <span>
, ideelt gjort tastaturfokuserbar ved hjelp av tabindex="0"
.
For deaktiverte popover-utløsere foretrekker du kanskje også data-bs-trigger="hover focus"
at popover-en vises som umiddelbar visuell tilbakemelding til brukerne dine, da de kanskje ikke forventer å klikke på et deaktivert 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
Lagt til i v5.2.0Som en del av Bootstraps utviklende CSS-variabletilnærming, bruker popovers nå lokale CSS-variabler .popover
for forbedret sanntidstilpasning. Verdier for CSS-variablene settes via Sass, så Sass-tilpasning støttes fortsatt også.
--#{$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;
Bruk
Aktiver popovers via JavaScript:
const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)
Å få popovers til å fungere for brukere av tastatur og hjelpemidler
For å tillate tastaturbrukere å aktivere popover-vinduene dine, bør du bare legge dem til HTML-elementer som tradisjonelt er tastaturfokuserbare og interaktive (som lenker eller skjemakontroller). Selv om vilkårlige HTML-elementer (som <span>
s) kan gjøres fokuserbare ved å legge til tabindex="0"
attributtet, vil dette legge til potensielt irriterende og forvirrende tabulatorstopp på ikke-interaktive elementer for tastaturbrukere, og de fleste hjelpeteknologier annonserer for øyeblikket ikke popoverens innhold i denne situasjonen . I tillegg må du ikke stole utelukkende på hover
som utløseren for popovers, da dette vil gjøre dem umulige å utløse for tastaturbrukere.
Selv om du kan sette inn rik, strukturert HTML i popovers med html
alternativet, anbefaler vi sterkt at du unngår å legge til for mye innhold. Måten popovers fungerer på for øyeblikket er at innholdet deres er knyttet til triggerelementet med aria-describedby
attributtet når det først vises. Som et resultat vil hele popover-innholdet bli annonsert til brukere av hjelpemiddelteknologi som én lang, uavbrutt strøm.
I tillegg, mens det er mulig å inkludere interaktive kontroller (som skjemaelementer eller lenker) i popover-vinduet (ved å legge til disse elementene til de allowList
tillatte attributtene og taggene), må du være oppmerksom på at popover-en for øyeblikket ikke administrerer tastaturfokusrekkefølgen. Når en tastaturbruker åpner en popover, forblir fokus på det utløsende elementet, og siden popover vanligvis ikke følger utløseren umiddelbart i dokumentets struktur, er det ingen garanti for at man går fremover/trykkerTABvil flytte en tastaturbruker inn i selve popover-vinduet. Kort sagt, å legge til interaktive kontroller i en popover vil sannsynligvis gjøre disse kontrollene uoppnåelige/ubrukelige for tastaturbrukere og brukere av hjelpeteknologier, eller i det minste gi en ulogisk generell fokusrekkefølge. I disse tilfellene bør du vurdere å bruke en modal dialog i stedet.
Alternativer
Siden alternativer kan sendes via dataattributter eller JavaScript, kan du legge til et alternativnavn til data-bs-
, som i data-bs-animation="{value}"
. Sørg for å endre sakstypen for alternativnavnet fra " camelCase " til " kebab-case " når du sender alternativene via dataattributter. Bruk for eksempel i data-bs-custom-class="beautifier"
stedet for data-bs-customClass="beautifier"
.
Fra Bootstrap 5.2.0 støtter alle komponenter et eksperimentelt reservert dataattributt data-bs-config
som kan inneholde enkel komponentkonfigurasjon som en JSON-streng. Når et element har data-bs-config='{"delay":0, "title":123}'
og data-bs-title="456"
attributter, vil den endelige title
verdien være 456
og de separate dataattributtene vil overstyre verdier gitt på data-bs-config
. I tillegg kan eksisterende dataattributter inneholde JSON-verdier som data-bs-delay='{"show":0,"hide":150}'
.
sanitize
Merk at alternativene ,
sanitizeFn
, og
av sikkerhetsgrunner
allowList
ikke kan leveres med dataattributter.
Navn | Type | Misligholde | Beskrivelse |
---|---|---|---|
allowList |
gjenstand | Standardverdi | Objekt som inneholder tillatte attributter og tagger. |
animation |
boolsk | true |
Bruk en CSS-fade-overgang på popoveren. |
boundary |
streng, element | 'clippingParents' |
Overløpsbegrensningsgrense for popover (gjelder bare Poppers preventOverflow-modifikator). Som standard er det 'clippingParents' og kan godta en HTMLElement-referanse (kun via JavaScript). For mer informasjon se Poppers detectOverflow-dokumenter . |
container |
streng, element, falsk | false |
Legger popover til et bestemt element. Eksempel: container: 'body' . Dette alternativet er spesielt nyttig ved at det lar deg plassere popover i flyten av dokumentet nær det utløsende elementet - noe som vil forhindre popover fra å flyte bort fra det utløsende elementet under en vindusstørrelse. |
content |
streng, element, funksjon | '' |
Standardinnholdsverdi hvis data-bs-content attributtet ikke er til stede. Hvis en funksjon er gitt, vil den bli kalt med this referansen satt til elementet som popoveren er knyttet til. |
customClass |
streng, funksjon | '' |
Legg til klasser i popover-vinduet når det vises. Merk at disse klassene vil bli lagt til i tillegg til eventuelle klasser spesifisert i malen. For å legge til flere klasser, skille dem med mellomrom: 'class-1 class-2' . Du kan også sende en funksjon som skal returnere en enkelt streng som inneholder flere klassenavn. |
delay |
nummer, objekt | 0 |
Forsinket visning og skjuling av popover (ms) – gjelder ikke for manuell utløsertype. Hvis et nummer er oppgitt, brukes forsinkelse på både skjul/show. Objektstrukturen er: delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
streng, array | ['top', 'right', 'bottom', 'left'] |
Definer reserveplasseringer ved å gi en liste over plasseringer i matrise (i preferanserekkefølge). For mer informasjon, se Poppers atferdsdokumenter . |
html |
boolsk | false |
Tillat HTML i popover. Hvis det er sant, vil HTML-tagger i popover- title en bli gjengitt i popover-en. Hvis falsk, innerText vil egenskapen bli brukt til å sette inn innhold i DOM. Bruk tekst hvis du er bekymret for XSS-angrep. |
offset |
tall, streng, funksjon | [0, 0] |
Forskyvning av popover i forhold til målet. Du kan sende en streng i dataattributter med kommadelte verdier som: data-bs-offset="10,20" . Når en funksjon brukes til å bestemme forskyvningen, kalles den opp med et objekt som inneholder popperplasseringen, referansen og popperrektene som det første argumentet. Det utløsende elementet DOM-noden sendes som det andre argumentet. Funksjonen må returnere en matrise med to tall: skrenning , avstand . For mer informasjon se Poppers offset-dokumenter . |
placement |
streng, funksjon | 'top' |
Slik plasserer du popover: auto, topp, bunn, venstre, høyre. Når auto det er spesifisert, vil det dynamisk reorientere popover-vinduet. Når en funksjon brukes til å bestemme plasseringen, kalles den med popover-DOM-noden som det første argumentet og det utløsende elementet DOM-noden som den andre. Konteksten this er satt til popover-forekomsten. |
popperConfig |
null, objekt, funksjon | null |
For å endre Bootstraps standard Popper -konfigurasjon, se Poppers konfigurasjon . Når en funksjon brukes til å lage Popper-konfigurasjonen, kalles den med et objekt som inneholder Bootstraps standard Popper-konfigurasjon. Det hjelper deg å bruke og slå sammen standarden med din egen konfigurasjon. Funksjonen må returnere et konfigurasjonsobjekt for Popper. |
sanitize |
boolsk | true |
Aktiver eller deaktiver desinfisering. Hvis aktivert 'template' , 'content' og 'title' alternativer vil bli renset. |
sanitizeFn |
null, funksjon | null |
Her kan du levere din egen desinfiseringsfunksjon. Dette kan være nyttig hvis du foretrekker å bruke et dedikert bibliotek for å utføre desinfisering. |
selector |
streng, falsk | false |
Hvis en velger er angitt, vil popover-objekter bli delegert til de angitte målene. I praksis brukes dette til også å bruke popovers til dynamisk lagt til DOM-elementer ( jQuery.on støtte). Se denne utgaven og et informativt eksempel . |
template |
streng | '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' |
Base HTML for å bruke når du oppretter popover. Popover-ene title vil bli injisert i .popover-inner . .popover-arrow vil bli popover-pilen. Det ytterste innpakningselementet skal ha .popover klassen og role="popover" . |
title |
streng, element, funksjon | '' |
Standard tittelverdi hvis title attributtet ikke er til stede. Hvis en funksjon er gitt, vil den bli kalt med this referansen satt til elementet som popoveren er knyttet til. |
trigger |
streng | 'hover focus' |
Hvordan popover utløses: klikk, hover, fokus, manuell. Du kan passere flere utløsere; skille dem med et mellomrom. 'manual' indikerer at popover vil bli utløst programmatisk via metodene .popover('show') , .popover('hide') og ; .popover('toggle') denne verdien kan ikke kombineres med noen annen utløser. 'hover' i seg selv vil resultere i popovers som ikke kan utløses via tastaturet, og bør kun brukes hvis alternative metoder for å formidle samme informasjon til tastaturbrukere er tilstede. |
Dataattributter for individuelle popovers
Alternativer for individuelle popovers kan alternativt spesifiseres ved bruk av dataattributter, som forklart ovenfor.
Bruker funksjon medpopperConfig
const popover = new bootstrap.Popover(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Metoder
Asynkrone metoder og overganger
Alle API-metoder er asynkrone og starter en overgang . De går tilbake til den som ringer så snart overgangen er startet, men før den avsluttes . I tillegg vil et metodekall på en overgangskomponent bli ignorert .
Metode | Beskrivelse |
---|---|
disable |
Fjerner muligheten for at et elements popover skal vises. Popover vil kun kunne vises hvis den er aktivert på nytt. |
dispose |
Skjuler og ødelegger et elements popover (fjerner lagrede data på DOM-elementet). Popovers som bruker delegering (som opprettes ved hjelp av selector alternativet ) kan ikke ødelegges individuelt på etterkommere triggerelementer. |
enable |
Gir et elements popover muligheten til å bli vist. Popovers er aktivert som standard. |
getInstance |
Statisk metode som lar deg få popover-forekomsten knyttet til et DOM-element. |
getOrCreateInstance |
Statisk metode som lar deg få popover-forekomsten knyttet til et DOM-element, eller opprette en ny i tilfelle den ikke ble initialisert. |
hide |
Skjuler et elements popover. Går tilbake til den som ringer før popover faktisk har blitt skjult (dvs. før hidden.bs.popover hendelsen inntreffer). Dette regnes som en "manuell" utløsning av popover. |
setContent |
Gir en måte å endre popoverens innhold etter initialiseringen. |
show |
Avslører et elements popover. Går tilbake til den som ringer før popover faktisk har blitt vist (dvs. før shown.bs.popover hendelsen inntreffer). Dette regnes som en "manuell" utløsning av popover. Popovers hvis tittel og innhold begge har null lengde, vises aldri. |
toggle |
Veksler på et elements popover. Går tilbake til den som ringer før popover-en faktisk har blitt vist eller skjult (dvs. før hendelsen shown.bs.popover eller hidden.bs.popover inntreffer). Dette regnes som en "manuell" utløsning av popover. |
toggleEnabled |
Veksler på muligheten for at et elements popover skal vises eller skjules. |
update |
Oppdaterer posisjonen til et 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
godtar et
object
argument, der hver egenskapsnøkkel er en gyldig
string
velger i popover-malen, og hver relaterte egenskapsverdi kan være
string
|
element
|
function
|
null
arrangementer
Begivenhet | Beskrivelse |
---|---|
hide.bs.popover |
Denne hendelsen utløses umiddelbart når hide instansmetoden er kalt. |
hidden.bs.popover |
Denne hendelsen utløses når popover-en er ferdig skjult for brukeren (vil vente på at CSS-overganger er fullført). |
inserted.bs.popover |
Denne hendelsen utløses etter show.bs.popover hendelsen når popover-malen er lagt til DOM. |
show.bs.popover |
Denne hendelsen utløses umiddelbart når show instansmetoden kalles. |
shown.bs.popover |
Denne hendelsen utløses når popoveren er gjort synlig for brukeren (vil vente på at CSS-overgangene er fullført). |
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
// do something...
})