Popovers
Documentación e exemplos para engadir popovers Bootstrap, como os que se atopan en iOS, a calquera elemento do teu sitio.
Visión xeral
Cousas que debes saber ao usar o complemento popover:
- Os popovers confían na biblioteca de terceiros Popper para o posicionamento. Debes incluír popper.min.js antes de bootstrap.js ou usar
bootstrap.bundle.min.js
/bootstrap.bundle.js
que contén Popper para que funcionen. - Os popovers requiren o complemento de información sobre ferramentas como dependencia.
- Os popovers están activados por motivos de rendemento, polo que debes inicializalos vostede mesmo .
- A lonxitude cero
title
econtent
os valores nunca mostrarán un popover. - Especifique
container: 'body'
para evitar problemas de renderizado en compoñentes máis complexos (como os nosos grupos de entrada, grupos de botóns, etc.). - Non funcionará activar popovers en elementos ocultos.
- Os popovers para
.disabled
oudisabled
elementos deben activarse nun elemento de envoltura. - Cando se activan desde áncoras que envolven varias liñas, os popovers centraranse entre o ancho total das áncoras. Use
.text-nowrap
no seu<a>
s para evitar este comportamento. - Os popovers deben ocultarse antes de que se eliminen do DOM os seus elementos correspondentes.
- Os popovers pódense activar grazas a un elemento dentro dun DOM en sombra.
prefers-reduced-motion
consulta multimedia. Consulta a
sección de movemento reducido da nosa documentación de accesibilidade .
Continúa lendo para ver como funcionan os popovers con algúns exemplos.
Exemplo: activa os popovers en todas partes
Unha forma de inicializar todos os popovers nunha páxina sería seleccionalos polo seu data-bs-toggle
atributo:
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
})
Exemplo: Usando a container
opción
Cando teñas algúns estilos nun elemento principal que interfiran cun popover, quererás especificar un personalizado container
para que o HTML do popover apareza nese elemento.
var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
container: 'body'
})
Exemplo
<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>
Catro direccións
Hai catro opcións dispoñibles: arriba, dereita, inferior e aliñada á esquerda. As indicacións replícanse cando se usa Bootstrap en 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>
Descartar no seguinte clic
Use o focus
disparador para descartar popovers no seguinte clic do usuario nun elemento diferente do elemento de alternancia.
Requírese un marcado específico para descartar ao facer clic ao seguinte
Para un comportamento adecuado entre navegadores e plataformas, debes usar a <a>
etiqueta, non a <button>
etiqueta, e tamén debes incluír un tabindex
atributo.
<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'
})
Elementos desactivados
Os elementos co disabled
atributo non son interactivos, o que significa que os usuarios non poden pasar o rato nin facer clic neles para activar un popover (ou información sobre ferramentas). Como solución alternativa, quererá activar o popover desde un envoltorio <div>
ou <span>
, idealmente enfocado ao teclado usando tabindex="0"
.
Para os activadores de popover desactivados, tamén podes preferir data-bs-trigger="hover focus"
que o popover apareza como un feedback visual inmediato para os teus usuarios, xa que quizais non esperen facer clic nun elemento desactivado.
<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
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);
Uso
Activar popovers mediante JavaScript:
var exampleEl = document.getElementById('example')
var popover = new bootstrap.Popover(exampleEl, options)
Facendo que os popovers funcionen para os usuarios de teclado e tecnoloxía de asistencia
Para permitir que os usuarios do teclado activen os teus popovers, só debes engadilos aos elementos HTML que tradicionalmente son interactivos e enfocados ao teclado (como ligazóns ou controis de formulario). Aínda que os elementos HTML arbitrarios (como <span>
s) pódense enfocar engadindo o tabindex="0"
atributo, isto engadirá tabulacións potencialmente molestas e confusas en elementos non interactivos para os usuarios de teclado, e a maioría das tecnoloxías de asistencia actualmente non anuncian o contido do popover nesta situación. . Ademais, non confíes únicamente no hover
activador dos teus popovers, xa que isto fará que sexan imposibles de activar para os usuarios do teclado.
Aínda que pode inserir HTML enriquecido e estruturado nas ventás emerxentes coa html
opción, recomendamos encarecidamente que evite engadir unha cantidade excesiva de contido. A forma en que funcionan os popovers actualmente é que, unha vez mostrados, o seu contido está ligado ao elemento disparador co aria-describedby
atributo. Como resultado, a totalidade do contido do popover anunciarase aos usuarios de tecnoloxía de asistencia como un fluxo longo e ininterrompido.
Ademais, aínda que tamén é posible incluír controis interactivos (como elementos de formulario ou ligazóns) no seu popover (engadindo estes elementos ao allowList
dos atributos e etiquetas permitidos), teña en conta que actualmente o popover non xestiona a orde de enfoque do teclado. Cando un usuario de teclado abre un popover, o foco permanece no elemento activador e, como o popover normalmente non segue inmediatamente o disparador na estrutura do documento, non hai garantía de que avanzar/premerTABmoverá un usuario de teclado ao propio popover. En resumo, simplemente engadir controis interactivos a un popover é probable que estes controis sexan inalcanzables/inutilizables para os usuarios de teclado e os usuarios de tecnoloxías de asistencia, ou polo menos faga unha orde global de enfoque ilóxica. Nestes casos, considere usar un diálogo modal no seu lugar.
Opcións
As opcións pódense pasar a través de atributos de datos ou JavaScript. Para os atributos de datos, engada o nome da opción a data-bs-
, como en data-bs-animation=""
. Asegúrate de cambiar o tipo de maiúsculas e minúsculas do nome da opción de camelCase a kebab-case ao pasar as opcións a través dos atributos de datos. Por exemplo, en lugar de usar data-bs-customClass="beautifier"
, use data-bs-custom-class="beautifier"
.
sanitize
,
sanitizeFn
, e
allowList
non se poden proporcionar mediante atributos de datos.
Nome | Tipo | Por defecto | Descrición |
---|---|---|---|
animation |
booleano | true |
Aplique unha transición de fundido CSS ao popover |
container |
cadea | elemento | falso | false |
Engade o popover a un elemento específico. Exemplo: |
content |
cadea | elemento | función | '' |
Valor de contido predeterminado se Se se dá unha función, chamarase coa súa |
delay |
número | obxecto | 0 |
Atraso para mostrar e ocultar o popover (ms): non se aplica ao tipo de activación manual Se se proporciona un número, aplícase un atraso tanto para ocultar como para mostrar A estrutura do obxecto é: |
html |
booleano | false |
Insira HTML no popover. Se é falso, innerText empregarase a propiedade para inserir contido no DOM. Usa texto se estás preocupado polos ataques XSS. |
placement |
cadea | función | 'right' |
Como colocar o popover - auto | arriba | inferior | esquerda | certo. Cando se usa unha función para determinar a colocación, chámase co nodo DOM popover como primeiro argumento e o nodo DOM do elemento desencadeante como segundo. O |
selector |
cadea | falso | false |
Se se proporciona un selector, os obxectos popover delegaranse nos obxectivos especificados. Na práctica, isto úsase para permitir que o contido HTML dinámico teña aparellos emergentes engadidos. Vexa isto e un exemplo informativo . |
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 para usar ao crear o popover. Os popovers Os popovers
O elemento de envoltura máis externo debería ter a |
title |
cadea | elemento | función | '' |
Valor predeterminado do título se Se se dá unha función, chamarase coa súa |
trigger |
corda | 'click' |
Como se activa o popover: fai clic en | pasar o rato | foco | manual. Podes pasar varios disparadores; separalos cun espazo. manual non se pode combinar con ningún outro disparador. |
fallbackPlacements |
matriz | ['top', 'right', 'bottom', 'left'] |
Defina colocacións alternativas proporcionando unha lista de colocacións na matriz (por orde de preferencia). Para obter máis información, consulte os documentos de comportamento de Popper |
boundary |
cadea | elemento | 'clippingParents' |
Límite de restricción de desbordamento do popover (aplícase só ao modificador preventOverflow de Popper). Por defecto é 'clippingParents' e pode aceptar unha referencia HTMLElement (só a través de JavaScript). Para obter máis información, consulte os documentos detectOverflow de Popper . |
customClass |
cadea | función | '' |
Engade clases ao popover cando se mostra. Teña en conta que estas clases engadiranse ademais de todas as clases especificadas no modelo. Para engadir varias clases, sepáraas con espazos: Tamén pode pasar unha función que debería devolver unha única cadea que conteña nomes de clases adicionais. |
sanitize |
booleano | true |
Activa ou desactiva a desinfección. Se está activado 'template' , 'content' e 'title' as opcións serán desinfectadas. Consulte a sección de desinfectantes na nosa documentación de JavaScript . |
allowList |
obxecto | Valor predeterminado | Obxecto que contén atributos e etiquetas permitidos |
sanitizeFn |
nulo | función | null |
Aquí podes proporcionar a túa propia función de desinfección. Isto pode ser útil se prefires usar unha biblioteca dedicada para realizar a desinfección. |
offset |
matriz | cadea | función | [0, 8] |
Desfase do popover en relación ao seu obxectivo. Podes pasar unha cadea en atributos de datos con valores separados por comas como: Cando se usa unha función para determinar a compensación, chámase cun obxecto que contén a posición do popper, a referencia e os rectos do popper como primeiro argumento. O nodo DOM do elemento desencadeante pásase como segundo argumento. A función debe devolver unha matriz con dous números: . Para obter máis información, consulte os documentos de offset de Popper . |
popperConfig |
nulo | obxecto | función | null |
Para cambiar a configuración de Popper predeterminada de Bootstrap, consulte Configuración de Popper . Cando se usa unha función para crear a configuración de Popper, chámase cun obxecto que contén a configuración de Popper predeterminada de Bootstrap. Axúdache a usar e combinar a configuración predeterminada coa túa propia configuración. A función debe devolver un obxecto de configuración para Popper. |
Atributos de datos para popovers individuais
As opcións para popovers individuais pódense especificar alternativamente mediante o uso de atributos de datos, como se explicou anteriormente.
Usando a función conpopperConfig
var popover = new bootstrap.Popover(element, {
popperConfig: function (defaultBsPopperConfig) {
// var newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Métodos
Métodos asíncronos e transicións
Todos os métodos da API son asíncronos e inician unha transición . Volven ao interlocutor en canto se inicia a transición pero antes de que remate . Ademais, ignorarase unha chamada de método nun compoñente en transición .
Consulte a nosa documentación de JavaScript para obter máis información .
mostrar
Revela o popover dun elemento. Volve ao interlocutor antes de que se amosase o popover (é dicir, antes de shown.bs.popover
que se produza o evento). Isto considérase un desencadeamento "manual" do popover. Nunca se amosan os popovers cuxo título e contido sexan de lonxitude cero.
myPopover.show()
ocultar
Oculta o popover dun elemento. Volve ao interlocutor antes de que se ocultase o popover (é dicir, antes de hidden.bs.popover
que ocorra o evento). Isto considérase un desencadeamento "manual" do popover.
myPopover.hide()
alternar
Alterna o popover dun elemento. Volve ao interlocutor antes de que se amosase ou ocultase o popover (é dicir, antes de que se produza o evento shown.bs.popover
ou ). hidden.bs.popover
Isto considérase un desencadeamento "manual" do popover.
myPopover.toggle()
dispor
Oculta e destrúe o popover dun elemento (Elimina os datos almacenados no elemento DOM). Os popovers que usan a delegación (que se crean mediante a selector
opción ) non se poden destruír individualmente nos elementos desencadeantes descendentes.
myPopover.dispose()
habilitar
Dá a posibilidade de mostrar o popover dun elemento. Os popovers están activados por defecto.
myPopover.enable()
desactivar
Elimina a posibilidade de mostrar o popover dun elemento. O popover só se poderá mostrar se se volve activar.
myPopover.disable()
alternar Activado
Alterna a posibilidade de mostrar ou ocultar o popover dun elemento.
myPopover.toggleEnabled()
actualizar
Actualiza a posición do popover dun elemento.
myPopover.update()
getInstance
Método estático que che permite obter a instancia de popover asociada a un elemento DOM
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
getOrCreateInstance
Método estático que che permite obter a instancia de popover asociada a un elemento DOM ou crear unha nova no caso de que non se inicializou
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
Eventos
Tipo de evento | Descrición |
---|---|
mostrar.bs.popover | Este evento desenvólvese inmediatamente cando show se chama ao método de instancia. |
mostrado.bs.popover | Este evento desenvólvese cando o popover se fixo visible para o usuario (esperará a que se completen as transicións CSS). |
ocultar.bs.popover | Este evento desenvólvese inmediatamente cando hide se chamou ao método de instancia. |
hidden.bs.popover | Este evento desenvólvese cando o popover rematou de ocultarse ao usuario (esperará a que se completen as transicións CSS). |
inserido.bs.popover | Este evento desenvólvese despois do show.bs.popover evento cando o modelo popover foi engadido ao DOM. |
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
// do something...
})