Popovers
Documentació i exemples per afegir finestres emergents Bootstrap, com les que es troben a iOS, a qualsevol element del vostre lloc.
Visió general
Coses a saber quan s'utilitza el connector popover:
- Els popovers confien en la biblioteca de tercers Popper per al posicionament. Heu d'incloure popper.min.js abans de bootstrap.js o utilitzar
bootstrap.bundle.min.js
/bootstrap.bundle.js
que conté Popper perquè funcionin els popovers! - Els popovers requereixen el connector tooltip com a dependència.
- Els popovers estan activats per raons de rendiment, de manera que els heu d'inicialitzar vosaltres mateixos .
- La longitud zero
title
icontent
els valors mai no mostraran un popover. - Especifiqueu
container: 'body'
per evitar problemes de renderització en components més complexos (com els nostres grups d'entrada, grups de botons, etc.). - No funcionarà activar popovers en elements ocults.
- Els popovers per
.disabled
odisabled
elements s'han d'activar en un element d'embolcall. - Quan s'activa des d'ancoratges que s'emboliquen a través de diverses línies, els popovers es centraran entre l'amplada total dels ancoratges. Utilitzeu
.text-nowrap
-lo<a>
per evitar aquest comportament. - Els popovers s'han d'amagar abans que els seus elements corresponents s'hagin eliminat del DOM.
- Els popovers es poden activar gràcies a un element dins d'un DOM ombra.
prefers-reduced-motion
consulta de mitjans. Consulteu la
secció de moviment reduït de la nostra documentació d'accessibilitat .
Segueix llegint per veure com funcionen els popovers amb alguns exemples.
Exemple: habiliteu les finestres emergents a tot arreu
Una manera d'inicialitzar totes les finestres emergents d'una pàgina seria seleccionar-les pel seu data-bs-toggle
atribut:
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
})
Exemple: ús de l' container
opció
Quan tingueu alguns estils en un element pare que interfereixen amb un popover, voldreu especificar un personalitzat container
perquè l'HTML del popover aparegui dins d'aquest element.
var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
container: 'body'
})
Exemple
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
Quatre direccions
Hi ha quatre opcions disponibles: superior, dreta, inferior i alineada a l'esquerra. Les indicacions es reflecteixen quan s'utilitza Bootstrap a RTL.
<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>
Omet al següent clic
Utilitzeu el focus
disparador per descartar les finestres emergents al següent clic de l'usuari en un element diferent de l'element de commutació.
Es requereix un etiquetatge específic per a descartar el clic següent
Per a un comportament adequat entre navegadors i plataformes, heu d'utilitzar l' <a>
etiqueta, no l' <button>
etiqueta, i també heu d'incloure un tabindex
atribut.
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
var popover = new bootstrap.Popover(document.querySelector('.popover-dismiss'), {
trigger: 'focus'
})
Elements inhabilitats
Els elements amb l' disabled
atribut no són interactius, és a dir, els usuaris no poden passar-hi el cursor ni fer-hi clic per activar una finestra emergent (o informació sobre eines). Com a solució alternativa, voldreu activar el popover des d'un embolcall <div>
o <span>
, idealment enfocat al teclat amb tabindex="0"
.
Per als activadors de popover desactivats, també podeu preferir data-bs-trigger="hover focus"
que el popover aparegui com a comentari visual immediat als vostres usuaris, ja que potser no esperen fer clic en un element desactivat.
<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>
Sass
Les variables
$popover-font-size: $font-size-sm;
$popover-bg: $white;
$popover-max-width: 276px;
$popover-border-width: $border-width;
$popover-border-color: rgba($black, .2);
$popover-border-radius: $border-radius-lg;
$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow: $box-shadow;
$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;
$popover-arrow-color: $popover-bg;
$popover-arrow-outer-color: fade-in($popover-border-color, .05);
Ús
Activa les finestres emergents mitjançant JavaScript:
var exampleEl = document.getElementById('example')
var popover = new bootstrap.Popover(exampleEl, options)
Fer que les finestres emergents funcionin per als usuaris de teclat i tecnologia d'assistència
Per permetre que els usuaris del teclat activin les vostres finestres emergents, només hauríeu d'afegir-les als elements HTML que tradicionalment es poden centrar en el teclat i interactius (com ara enllaços o controls de formulari). Tot i que els elements HTML arbitraris (com ara <span>
s) es poden enfocar afegint l' tabindex="0"
atribut, això afegirà tabulacions potencialment molestes i confuses en elements no interactius per als usuaris del teclat, i la majoria de les tecnologies d'assistència actualment no anuncien el contingut del popover en aquesta situació. . A més, no us confieu únicament hover
com a activador dels vostres popovers, ja que això els farà impossibles d'activar per als usuaris del teclat.
Tot i que podeu inserir HTML ric i estructurat a les finestres emergents amb l' html
opció, us recomanem fermament que eviteu afegir una quantitat excessiva de contingut. La manera com funcionen actualment les finestres emergents és que, un cop es mostren, el seu contingut està lligat a l'element activador amb l' aria-describedby
atribut. Com a resultat, la totalitat del contingut del popover s'anunciarà als usuaris de tecnologia d'assistència com un flux llarg i ininterromput.
A més, tot i que també és possible incloure controls interactius (com ara elements de formulari o enllaços) a la finestra emergent (afegiu aquests elements a les allowList
etiquetes i atributs permesos), tingueu en compte que actualment la finestra emergent no gestiona l'ordre de focus del teclat. Quan un usuari de teclat obre una finestra emergent, el focus es manté en l'element activador, i com que la finestra emergent normalment no segueix immediatament l'activador a l'estructura del document, no hi ha cap garantia que s'avança/premTABmourà un usuari del teclat a la finestra emergent. En resum, el simple fet d'afegir controls interactius a un popover és probable que aquests controls siguin inabastables/inutilitzables per als usuaris del teclat i els usuaris de tecnologies d'assistència, o si més no, un ordre d'enfocament global il·lògic. En aquests casos, considereu utilitzar un diàleg modal.
Opcions
Les opcions es poden passar mitjançant atributs de dades o JavaScript. Per als atributs de dades, afegiu el nom de l'opció a data-bs-
, com a data-bs-animation=""
. Assegureu-vos de canviar el tipus de cas del nom de l'opció de camelCase a kebab-case quan passeu les opcions mitjançant atributs de dades. Per exemple, en comptes d'utilitzar data-bs-customClass="beautifier"
, utilitzeu data-bs-custom-class="beautifier"
.
sanitize
,
sanitizeFn
, i
allowList
no es poden proporcionar amb atributs de dades.
Nom | Tipus | Per defecte | Descripció |
---|---|---|---|
animation |
booleà | true |
Apliqueu una transició d'esvaïment CSS al popover |
container |
cadena | element | fals | false |
Afegeix la finestra emergent a un element específic. Exemple: |
content |
cadena | element | funció | '' |
Valor de contingut predeterminat si Si es dóna una funció, s'anomenarà amb la seva |
delay |
nombre | objecte | 0 |
Retard per mostrar i amagar la finestra emergent (ms): no s'aplica al tipus d'activador manual Si es proporciona un número, s'aplica un retard tant per ocultar com per mostrar L'estructura de l'objecte és: |
html |
booleà | false |
Inseriu HTML a la finestra emergent. Si és fals, innerText la propietat s'utilitzarà per inserir contingut al DOM. Utilitzeu text si us preocupen els atacs XSS. |
placement |
cadena | funció | 'right' |
Com posicionar el popover - automàtic | dalt | baix | esquerra | dret. Quan s'utilitza una funció per determinar la ubicació, es crida amb el node DOM emergent com a primer argument i el node DOM de l'element activador com a segon. El |
selector |
cadena | fals | false |
Si es proporciona un selector, els objectes emergents es delegaran als objectius especificats. A la pràctica, això s'utilitza per permetre que el contingut HTML dinàmic s'afegeixi popovers. Vegeu això i un exemple informatiu . |
template |
corda | '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>' |
HTML base per utilitzar quan es crea el popover. Els popover's Els popover's
L'element d'embolcall més extern hauria de tenir la |
title |
cadena | element | funció | '' |
Valor del títol predeterminat si Si es dóna una funció, s'anomenarà amb la seva |
trigger |
corda | 'click' |
Com s'activa el popover - feu clic a | flotar | focus | manual. Podeu passar múltiples activadors; separeu-los amb un espai. manual no es pot combinar amb cap altre activador. |
fallbackPlacements |
matriu | ['top', 'right', 'bottom', 'left'] |
Definiu ubicacions alternatives proporcionant una llista d'ubicacions en matriu (per ordre de preferència). Per obtenir més informació, consulteu els documents de comportament de Popper |
boundary |
cadena | element | 'clippingParents' |
Límit de restricció de desbordament del popover (només s'aplica al modificador preventOverflow de Popper). Per defecte és 'clippingParents' i pot acceptar una referència HTMLElement (només mitjançant JavaScript). Per obtenir més informació, consulteu els documents detectOverflow de Popper . |
customClass |
cadena | funció | '' |
Afegiu classes a la finestra emergent quan es mostri. Tingueu en compte que aquestes classes s'afegiran a més de les classes especificades a la plantilla. Per afegir diverses classes, separeu-les amb espais: També podeu passar una funció que hauria de retornar una única cadena que contingui noms de classe addicionals. |
sanitize |
booleà | true |
Activa o desactiva la desinfecció. Si està activat 'template' , 'content' i 'title' les opcions es desinfectaran. Consulteu la secció desinfectant a la nostra documentació de JavaScript . |
allowList |
objecte | Valor per defecte | Objecte que conté atributs i etiquetes permesos |
sanitizeFn |
nul | funció | null |
Aquí podeu proporcionar la vostra pròpia funció de desinfecció. Això pot ser útil si preferiu utilitzar una biblioteca dedicada per realitzar la desinfecció. |
offset |
matriu | cadena | funció | [0, 8] |
Desplaçament del popover en relació amb el seu objectiu. Podeu passar una cadena en atributs de dades amb valors separats per comes com: Quan s'utilitza una funció per determinar el desplaçament, s'anomena amb un objecte que conté la ubicació del popper, la referència i rectes del popper com a primer argument. El node DOM de l'element desencadenant es passa com a segon argument. La funció ha de retornar una matriu amb dos números: . Per obtenir més informació, consulteu els documents d'offset de Popper . |
popperConfig |
nul | objecte | funció | null |
Per canviar la configuració de Popper per defecte de Bootstrap, vegeu la configuració de Popper . Quan s'utilitza una funció per crear la configuració de Popper, s'anomena amb un objecte que conté la configuració de Popper per defecte de Bootstrap. Us ajuda a utilitzar i combinar el valor predeterminat amb la vostra pròpia configuració. La funció ha de retornar un objecte de configuració per a Popper. |
Atributs de dades per a popovers individuals
Les opcions per a popovers individuals es poden especificar alternativament mitjançant l'ús d'atributs de dades, tal com s'ha explicat anteriorment.
S'utilitza la funció ambpopperConfig
var popover = new bootstrap.Popover(element, {
popperConfig: function (defaultBsPopperConfig) {
// var newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Mètodes
Mètodes asíncrons i transicions
Tots els mètodes de l'API són asíncrons i comencen una transició . Tornen a la persona que truca tan bon punt s'inicia la transició però abans que acabi . A més, s'ignorarà una trucada de mètode en un component en transició .
Consulteu la nostra documentació de JavaScript per obtenir més informació .
espectacle
Revela el popover d'un element. Torna a la persona que truca abans que s'hagi mostrat realment el popover (és a dir, abans shown.bs.popover
que es produeixi l'esdeveniment). Això es considera una activació "manual" del popover. Les finestres emergents el títol i el contingut dels quals són de longitud zero mai es mostren.
myPopover.show()
amagar
Amaga la finestra emergent d'un element. Torna a la persona que truca abans que el popover s'hagi amagat (és a dir, abans hidden.bs.popover
que es produeixi l'esdeveniment). Això es considera una activació "manual" del popover.
myPopover.hide()
alternar
Activa o desactiva la finestra emergent d'un element. Torna a la persona que truca abans que el popover s'hagi mostrat o amagat (és a dir, abans que es produeixi l'esdeveniment shown.bs.popover
o ). hidden.bs.popover
Això es considera una activació "manual" del popover.
myPopover.toggle()
disposar
Amaga i destrueix la finestra emergent d'un element (elimina les dades emmagatzemades a l'element DOM). Els popovers que utilitzen la delegació (que es creen amb l' selector
opció ) no es poden destruir individualment en elements activadors descendents.
myPopover.dispose()
habilitar
Ofereix la possibilitat de mostrar-se al popover d'un element. Les finestres emergents estan habilitades de manera predeterminada.
myPopover.enable()
desactivar
Elimina la possibilitat que es mostri la finestra emergent d'un element. La finestra emergent només es podrà mostrar si es torna a habilitar.
myPopover.disable()
toggleEnabled
Activa o desactiva la possibilitat de mostrar o amagar la finestra emergent d'un element.
myPopover.toggleEnabled()
actualitzar
Actualitza la posició de la finestra emergent d'un element.
myPopover.update()
getInstance
Mètode estàtic que us permet obtenir la instància emergent associada a un element DOM
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
getOrCreateInstance
Mètode estàtic que us permet obtenir la instància emergent associada a un element DOM o crear-ne una de nova en cas que no s'hagi inicialitzat
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
Esdeveniments
Tipus d'esdeveniment | Descripció |
---|---|
show.bs.popover | Aquest esdeveniment s'activa immediatament quan show es crida al mètode d'instància. |
mostrat.bs.popover | Aquest esdeveniment s'activa quan la finestra emergent s'ha fet visible per a l'usuari (esperarà que finalitzin les transicions CSS). |
hide.bs.popover | Aquest esdeveniment s'activa immediatament quan hide s'ha cridat el mètode d'instància. |
hidden.bs.popover | Aquest esdeveniment s'activa quan la finestra emergent s'ha acabat d'ocultar per a l'usuari (esperarà que finalitzin les transicions CSS). |
inserit.bs.popover | Aquest esdeveniment s'activa després de l' show.bs.popover esdeveniment quan s'ha afegit la plantilla popover al DOM. |
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
// do something...
})