Spring til hovedindhold Spring til dokumentnavigation
Check
in English

Popovers

Dokumentation og eksempler på tilføjelse af Bootstrap popovers, som dem der findes i iOS, til ethvert element på dit websted.

Oversigt

Ting at vide, når du bruger popover-plugin:

  • Popovers er afhængige af tredjepartsbiblioteket Popper til positionering. Du skal inkludere popper.min.js før bootstrap.js, eller bruge en bootstrap.bundle.min.js, der indeholder Popper.
  • Popovers kræver popover-pluginet som en afhængighed.
  • Popovers er opt-in af præstationsmæssige årsager, så du skal selv initialisere dem .
  • Nul-længde titleog contentværdier vil aldrig vise en popover.
  • Angiv container: 'body'for at undgå gengivelse af problemer i mere komplekse komponenter (såsom vores inputgrupper, knapgrupper osv.).
  • At udløse popovers på skjulte elementer vil ikke fungere.
  • Popovers for .disabledeller disabledelementer skal udløses på et indpakningselement.
  • Når de udløses fra ankre, der ombrydes over flere linjer, vil popovers blive centreret mellem ankrenes samlede bredde. Brug .text-nowrappå dine <a>s for at undgå denne adfærd.
  • Popovers skal skjules, før deres tilsvarende elementer er blevet fjernet fra DOM.
  • Popovers kan udløses takket være et element inde i en skygge-DOM.
Som standard bruger denne komponent den indbyggede indholdsrenser, som fjerner alle HTML-elementer, der ikke udtrykkeligt er tilladt. Se afsnittet om desinfektion i vores JavaScript-dokumentation for flere detaljer.
Animationseffekten af ​​denne komponent afhænger af prefers-reduced-motionmedieforespørgslen. Se afsnittet om reduceret bevægelse i vores tilgængelighedsdokumentation .

Fortsæt med at læse for at se, hvordan popovers fungerer med nogle eksempler.

Eksempler

Aktiver popovers

Som nævnt ovenfor skal du initialisere popovers, før de kan bruges. En måde at initialisere alle popovers på en side ville være at vælge dem efter deres data-bs-toggleattribut, som sådan:

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

Live demo

Vi bruger JavaScript svarende til kodestykket ovenfor til at gengive følgende live popover. Titler indstilles via data-bs-titleog kropsindhold indstilles via data-bs-content.

Du er velkommen til at bruge enten titleeller data-bs-titlei din HTML. Når titledet bruges, vil Popper automatisk erstatte det med data-bs-title, når elementet gengives.
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>

Fire retninger

Der er fire muligheder: top, højre, bund og venstre. Retninger spejles, når du bruger Bootstrap i RTL. Indstil data-bs-placementfor at ændre retningen.

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>

Brugerdefineredecontainer

Når du har nogle typografier på et overordnet element, der forstyrrer en popover, skal du angive en brugerdefineret container, så popoverens HTML vises i dette element i stedet. Dette er almindeligt i responsive tabeller, inputgrupper og lignende.

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

En anden situation, hvor du ønsker at angive en eksplicit brugerdefineret container, er popovers i en modal dialog for at sikre, at selve popoveren er tilføjet til modalen. Dette er især vigtigt for popovers, der indeholder interaktive elementer – modale dialoger vil fange fokus, så medmindre popoveren er et underordnet element af modalen, vil brugerne ikke være i stand til at fokusere eller aktivere disse interaktive elementer.

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

Brugerdefinerede popovers

Tilføjet i v5.2.0

Du kan tilpasse udseendet af popovers ved hjælp af CSS-variabler . Vi indstiller en brugerdefineret klasse med data-bs-custom-class="custom-popover"til at omfatte vores brugerdefinerede udseende og bruger den til at tilsidesætte nogle af de lokale CSS-variabler.

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

Afvis ved næste klik

Brug focustriggeren til at afvise popovers ved brugerens næste klik på et andet element end til/fra-elementet.

Specifik opmærkning påkrævet for at afvise-ved-næste-klik

For korrekt adfærd på tværs af browsere og på tværs af platforme skal du bruge <a>tagget, ikke<button> tagget, og du skal også inkludere en tabindexattribut.

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

Deaktiverede elementer

Elementer med disabledattributten er ikke interaktive, hvilket betyder, at brugere ikke kan svæve eller klikke på dem for at udløse en popover (eller værktøjstip). Som en løsning vil du gerne udløse popover fra en wrapper <div>eller <span>, ideelt lavet tastaturfokuserbar ved hjælp af tabindex="0".

For deaktiverede popover-udløsere foretrækker du måske også data-bs-trigger="hover focus", at popover-vinduet vises som øjeblikkelig visuel feedback til dine brugere, da de måske ikke forventer at klikke på et deaktiveret element.

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

Variabler

Tilføjet i v5.2.0

Som en del af Bootstraps udviklende CSS-variabletilgang bruger popovers nu lokale CSS-variabler .popovertil forbedret realtidstilpasning. Værdier for CSS-variablerne indstilles via Sass, så Sass-tilpasning understøttes også stadig.

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

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

Brug

Aktiver popovers via JavaScript:

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

Få popovers til at fungere for brugere af tastatur og hjælpemidler

For at tillade tastaturbrugere at aktivere dine popovers, bør du kun tilføje dem til HTML-elementer, der traditionelt er tastaturfokuserbare og interaktive (såsom links eller formularkontrolelementer). Selvom vilkårlige HTML-elementer (såsom <span>s) kan gøres fokusbare ved at tilføje tabindex="0"attributten, vil dette tilføje potentielt irriterende og forvirrende tabulatorstop på ikke-interaktive elementer for tastaturbrugere, og de fleste hjælpeteknologier annoncerer i øjeblikket ikke popoverens indhold i denne situation . Derudover skal du ikke stole udelukkende på hoversom udløseren for dine popovers, da dette vil gøre dem umulige at udløse for tastaturbrugere.

Selvom du kan indsætte rig, struktureret HTML i popovers med htmlmuligheden, anbefaler vi kraftigt, at du undgår at tilføje en overdreven mængde indhold. Den måde popovers fungerer på i øjeblikket er, at når de først er vist, er deres indhold bundet til triggerelementet med aria-describedbyattributten. Som et resultat vil hele popoverens indhold blive annonceret til hjælpeteknologibrugere som én lang, uafbrudt stream.

Derudover, mens det er muligt også at inkludere interaktive kontroller (såsom formularelementer eller links) i din popover (ved at tilføje disse elementer til de allowListtilladte attributter og tags), skal du være opmærksom på, at popover i øjeblikket ikke administrerer tastaturets fokusrækkefølge. Når en tastaturbruger åbner en popover, forbliver fokus på det udløsende element, og da popover normalt ikke umiddelbart følger triggeren i dokumentets struktur, er der ingen garanti for, at man bevæger sig fremad/trykkerTABflytter en tastaturbruger ind i selve popoveren. Kort sagt, blot tilføjelse af interaktive kontroller til en popover vil sandsynligvis gøre disse kontroller utilgængelige/ubrugelige for tastaturbrugere og brugere af hjælpeteknologier, eller i det mindste skabe en ulogisk overordnet fokusrækkefølge. I disse tilfælde kan du overveje at bruge en modal dialog i stedet.

Muligheder

Da muligheder kan videregives via dataattributter eller JavaScript, kan du tilføje et indstillingsnavn til data-bs-, som i data-bs-animation="{value}". Sørg for at ændre sagstypen for indstillingsnavnet fra " camelCase " til " kebab-case ", når du videregiver mulighederne via dataattributter. Brug for eksempel i data-bs-custom-class="beautifier"stedet for data-bs-customClass="beautifier".

Fra Bootstrap 5.2.0 understøtter alle komponenter en eksperimentel reserveret dataattribut data-bs-config, der kan rumme simpel komponentkonfiguration 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 titleværdi være, 456og de separate dataattributter vil tilsidesætte værdier givet på data-bs-config. Derudover er eksisterende dataattributter i stand til at rumme JSON-værdier som data-bs-delay='{"show":0,"hide":150}'.

sanitizeBemærk, at valgmulighederne , sanitizeFn, og af sikkerhedsmæssige årsager allowListikke kan leveres ved hjælp af dataattributter.
Navn Type Standard Beskrivelse
allowList objekt Standard værdi Objekt som indeholder tilladte attributter og tags.
animation boolesk true Anvend en CSS-fade-overgang til popoveren.
boundary streng, element 'clippingParents' Overløbsbegrænsningsgrænse for popover (gælder kun Poppers preventOverflow-modifikator). Som standard er 'clippingParents'og kan det acceptere en HTMLElement-reference (kun via JavaScript). For mere information henvises til Poppers detectOverflow-dokumenter .
container streng, element, falsk false Føjer popover til et bestemt element. Eksempel: container: 'body'. Denne indstilling er især nyttig, fordi den giver dig mulighed for at placere popover i dokumentflowet nær det udløsende element - hvilket vil forhindre popover i at flyde væk fra det udløsende element under en vinduesstørrelse.
content streng, element, funktion '' Standardindholdsværdi, hvis data-bs-contentattribut ikke er til stede. Hvis en funktion er givet, vil den blive kaldt med dens thisreference sat til det element, som popoveren er knyttet til.
customClass streng, funktion '' Tilføj klasser til popover, når det vises. Bemærk, at disse klasser vil blive tilføjet ud over de klasser, der er angivet i skabelonen. For at tilføje flere klasser skal du adskille dem med mellemrum: 'class-1 class-2'. Du kan også sende en funktion, der skal returnere en enkelt streng, der indeholder yderligere klassenavne.
delay nummer, genstand 0 Forsinket visning og skjulning af popover (ms) – gælder ikke for manuel triggertype. Hvis et nummer er angivet, anvendes forsinkelse på både skjul/show. Objektstrukturen er: delay: { "show": 500, "hide": 100 }.
fallbackPlacements streng, matrix ['top', 'right', 'bottom', 'left'] Definer reserveplaceringer ved at angive en liste over placeringer i matrix (i præferencerækkefølge). For mere information henvises til Poppers adfærdsdokumenter .
html boolesk false Tillad HTML i popover. Hvis det er sandt, vil HTML-tags i popover'erne titleblive gengivet i popoveren. Hvis falsk, innerTextvil egenskaben blive brugt til at indsætte indhold i DOM. Brug tekst, hvis du er bekymret for XSS-angreb.
offset tal, streng, funktion [0, 0] Forskydning af popover i forhold til dets mål. Du kan sende en streng i dataattributter med kommaseparerede værdier som: data-bs-offset="10,20". Når en funktion bruges til at bestemme forskydningen, kaldes den med et objekt, der indeholder popperplaceringen, referencen og popper rects som dets første argument. Det udløsende element DOM-node sendes som det andet argument. Funktionen skal returnere en matrix med to tal: udskridning , afstand . For mere information henvises til Poppers offset-dokumenter .
placement streng, funktion 'top' Sådan placeres popover: auto, top, bund, venstre, højre. Når autodet er angivet, vil det dynamisk omorientere popoveren. Når en funktion bruges til at bestemme placeringen, kaldes den med popover DOM-knuden som dets første argument og det udløsende element DOM-noden som dens anden. Konteksten thisindstilles til popover-forekomsten.
popperConfig null, objekt, funktion null For at ændre Bootstraps standard Popper -konfiguration, se Poppers konfiguration . Når en funktion bruges til at oprette Popper-konfigurationen, kaldes den med et objekt, der indeholder Bootstraps standard Popper-konfiguration. Det hjælper dig med at bruge og flette standarden med din egen konfiguration. Funktionen skal returnere et konfigurationsobjekt for Popper.
sanitize boolesk true Aktiver eller deaktiver desinficering. Hvis aktiveret 'template', 'content'og 'title'muligheder vil blive renset.
sanitizeFn null, funktion null Her kan du levere din egen desinficeringsfunktion. Dette kan være nyttigt, hvis du foretrækker at bruge et dedikeret bibliotek til at udføre desinficering.
selector streng, falsk false Hvis der er angivet en vælger, vil popover-objekter blive uddelegeret til de angivne mål. I praksis bruges dette til også at anvende popovers til dynamisk tilføjede DOM-elementer ( jQuery.onunderstøttelse). Se dette nummer og et informativt eksempel .
template snor '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Base HTML til brug ved oprettelse af popover. Popover'erne titlevil blive sprøjtet ind i .popover-inner. .popover-arrowbliver popoverens pil. Det yderste indpakningselement skal have .popoverklassen og role="popover".
title streng, element, funktion '' Standard titelværdi, hvis titleattribut ikke er til stede. Hvis en funktion er givet, vil den blive kaldt med dens thisreference sat til det element, som popoveren er knyttet til.
trigger snor 'hover focus' Hvordan popover udløses: klik, svæv, fokus, manuel. Du kan passere flere triggere; adskille dem med et mellemrum. 'manual'angiver, at popover vil blive udløst programmatisk via .popover('show'), .popover('hide')og .popover('toggle')metoderne; denne værdi kan ikke kombineres med nogen anden trigger. 'hover'i sig selv vil resultere i popovers, der ikke kan udløses via tastaturet, og bør kun bruges, hvis alternative metoder til at formidle den samme information til tastaturbrugere er til stede.

Dataattributter for individuelle popovers

Valgmuligheder for individuelle popovers kan alternativt specificeres ved brug af dataattributter, som forklaret ovenfor.

Bruger funktion medpopperConfig

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

Metoder

Asynkrone metoder og overgange

Alle API - metoder er asynkrone og starter en overgang . De vender tilbage til den, der ringer, så snart overgangen er startet, men før den slutter . Derudover vil et metodekald på en overgangskomponent blive ignoreret .

Se vores JavaScript-dokumentation for mere information .

Metode Beskrivelse
disable Fjerner muligheden for, at et elements popover vises. Popover vil kun kunne vises, hvis det er genaktiveret.
dispose Skjuler og ødelægger et elements popover (fjerner lagrede data på DOM-elementet). Popovers, der bruger delegering (som oprettes ved hjælp af selectormuligheden ), kan ikke individuelt destrueres på descendant trigger-elementer.
enable Giver et elements popover mulighed for at blive vist. Popovers er aktiveret som standard.
getInstance Statisk metode, som giver dig mulighed for at få popover-forekomsten tilknyttet et DOM-element.
getOrCreateInstance Statisk metode, som giver dig mulighed for at få popover-forekomsten tilknyttet et DOM-element, eller oprette en ny, hvis den ikke blev initialiseret.
hide Skjuler et elements popover. Vender tilbage til den, der ringer, før popover faktisk er blevet skjult (dvs. før hidden.bs.popoverhændelsen indtræffer). Dette betragtes som en "manuel" udløsning af popover.
setContent Giver en måde at ændre popoverens indhold efter initialiseringen.
show Afslører et elements popover. Vender tilbage til den, der ringer, før popover-vinduet rent faktisk er blevet vist (dvs. før shown.bs.popoverhændelsen indtræffer). Dette betragtes som en "manuel" udløsning af popover. Popovers, hvis titel og indhold begge er nul-længde, vises aldrig.
toggle Skifter et elements popover. Vender tilbage til den, der ringer, før pop-over faktisk er blevet vist eller skjult (dvs. før hændelsen shown.bs.popovereller hidden.bs.popoverindtræffer). Dette betragtes som en "manuel" udløsning af popover.
toggleEnabled Skifter muligheden for, at et elements popover vises eller skjules.
update Opdaterer placeringen af ​​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'
})
Metoden setContentaccepterer et objectargument, hvor hver egenskabsnøgle er en gyldig stringvælger i popover-skabelonen, og hver relateret egenskabsværdi kan være string| element| function| null

Begivenheder

Begivenhed Beskrivelse
hide.bs.popover Denne hændelse udløses straks, når hideinstansmetoden er blevet kaldt.
hidden.bs.popover Denne hændelse udløses, når popoveren er færdig med at blive skjult for brugeren (vil vente på, at CSS-overgange er fuldført).
inserted.bs.popover Denne hændelse udløses efter show.bs.popoverhændelsen, når popover-skabelonen er blevet tilføjet til DOM.
show.bs.popover Denne hændelse udløses med det samme, når showinstansmetoden kaldes.
shown.bs.popover Denne hændelse udløses, når popoveren er gjort synlig for brugeren (vil vente på, at CSS-overgange er fuldført).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})