Ir ao contido principal Ir á navegación de documentos
Check
in English

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 dependen da biblioteca de terceiros Popper para o posicionamento. Debes incluír popper.min.js antes bootstrap.jsou usar un bootstrap.bundle.min.jsque conteña Popper.
  • Os popovers requiren o complemento popover como dependencia.
  • Os popovers están activados por motivos de rendemento, polo que debes inicializalos vostede mesmo .
  • A lonxitude cero titlee contentos 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 .disabledou disabledelementos 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-nowrapno 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.
De forma predeterminada, este compoñente usa o desinfectante de contido integrado, que elimina todos os elementos HTML que non están permitidos de forma explícita. Consulta a sección de desinfectantes na nosa documentación de JavaScript para obter máis detalles.
O efecto de animación deste compoñente depende da prefers-reduced-motionconsulta 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.

Exemplos

Activa os popovers

Como se mencionou anteriormente, debes inicializar os popovers antes de que se poidan usar. Unha forma de inicializar todos os popovers nunha páxina sería seleccionalos polo seu data-bs-toggleatributo, así:

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

Demo en directo

Usamos JavaScript semellante ao fragmento anterior para renderizar o seguinte popover en directo. Os títulos establécense mediante data-bs-titlee o contido do corpo a través de data-bs-content.

Non dubides en usar calquera titleou data-bs-titleno teu HTML. Cando titlese usa, Popper substituirase automaticamente por data-bs-titlecando se renderice o elemento.
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>

Catro direccións

Hai catro opcións dispoñibles: arriba, dereita, inferior e esquerda. As indicacións replícanse cando se usa Bootstrap en RTL. Establecer data-bs-placementpara cambiar a dirección.

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>

Personalizadocontainer

Cando teñas algúns estilos nun elemento principal que interfiran cun popover, quererás especificar un personalizado containerpara que o HTML do popover apareza nese elemento. Isto é común en táboas sensibles, grupos de entrada e similares.

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

Outra situación na que quererá establecer un personalizado explícito containerson os popovers dentro dun diálogo modal , para asegurarse de que o popover se engade ao modal. Isto é especialmente importante para os popovers que conteñen elementos interactivos: os diálogos modais atraparán o foco, polo que, a menos que o popover sexa un elemento fillo do modal, os usuarios non poderán enfocar nin activar estes elementos interactivos.

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

Popovers personalizados

Engadido na v5.2.0

Podes personalizar a aparencia dos popovers usando variables CSS . Establecemos unha clase personalizada data-bs-custom-class="custom-popover"para definir o noso aspecto personalizado e usámola para anular algunhas das variables CSS locais.

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

Descartar no seguinte clic

Use o focusdisparador 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 tabindexatributo.

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

Elementos desactivados

Os elementos co disabledatributo 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.

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

Variables

Engadido na v5.2.0

Como parte do enfoque de variables CSS en evolución de Bootstrap, os popovers agora usan variables CSS locais activadas .popoverpara mellorar a personalización en tempo real. Os valores para as variables CSS establécense a través de Sass, polo que a personalización de Sass tamén se admite.

  --#{$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);
  

Variables Sass

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

Uso

Activar popovers mediante JavaScript:

const exampleEl = document.getElementById('example')
const 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 hoveractivador 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 htmlopció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-describedbyatributo. 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 allowListdos 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 avance/preme.TABmoverá un usuario de teclado ao propio popover. En resumo, é probable que simplemente engadir controis interactivos a un popover faga 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

Como as opcións se poden pasar a través de atributos de datos ou JavaScript, pode engadir un nome de opción a data-bs-, como en data-bs-animation="{value}". 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, use data-bs-custom-class="beautifier"no canto de data-bs-customClass="beautifier".

A partir de Bootstrap 5.2.0, todos os compoñentes admiten un atributo de datos reservados experimentaisdata-bs-config que pode albergar unha configuración sinxela de compoñentes como cadea JSON. Cando un elemento ten data-bs-config='{"delay":0, "title":123}'e data-bs-title="456"atributos, o titlevalor final será 456e os atributos de datos separados anularán os valores indicados en data-bs-config. Ademais, os atributos de datos existentes poden albergar valores JSON como data-bs-delay='{"show":0,"hide":150}'.

Teña en conta que, por razóns de seguridade, as opcións sanitize, sanitizeFn, e allowListnon se poden proporcionar mediante atributos de datos.
Nome Tipo Por defecto Descrición
allowList obxecto Valor predeterminado Obxecto que contén atributos e etiquetas permitidos.
animation booleano true Aplique unha transición de fundido CSS ao popover.
boundary corda, 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 .
container cadea, elemento, falso false Engade o popover a un elemento específico. Exemplo: container: 'body'. Esta opción é particularmente útil porque permite situar o popover no fluxo do documento preto do elemento activador, o que evitará que o popover flote lonxe do elemento activador durante un cambio de tamaño da xanela.
content cadea, elemento, función '' Valor de contido predeterminado se data-bs-contento atributo non está presente. Se se dá unha función, chamarase coa súa thisreferencia definida ao elemento ao que está unido o popover.
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: 'class-1 class-2'. Tamén pode pasar unha función que debería devolver unha única cadea que conteña nomes de clases adicionais.
delay número, obxecto 0 Atrasa a visualización e ocultación do 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 é: delay: { "show": 500, "hide": 100 }.
fallbackPlacements cadea, 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 .
html booleano false Permitir HTML no popover. Se é verdade, as etiquetas HTML do popover titlemostraranse no popover. Se é falso, innerTextempregarase a propiedade para inserir contido no DOM. Usa texto se estás preocupado polos ataques XSS.
offset número, cadea, función [0, 0] Desfase do popover en relación co seu obxectivo. Podes pasar unha cadea en atributos de datos con valores separados por comas como: data-bs-offset="10,20". 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: skidding , distance . Para obter máis información, consulte os documentos de offset de Popper .
placement cadea, función 'top' Como colocar o popover: automático, arriba, abaixo, esquerda, dereita. Cando autose especifica, reorientará dinámicamente o popover. 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 thiscontexto establécese na instancia de popover.
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.
sanitize booleano true Activa ou desactiva a desinfección. Se está activado 'template', 'content'e 'title'as opcións serán desinfectadas.
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.
selector cadea, falso false Se se proporciona un selector, os obxectos popover delegaranse nos obxectivos especificados. Na práctica, isto úsase tamén para aplicar popovers aos elementos DOM engadidos dinámicamente ( jQuery.onsoporte). Vexa este número e un exemplo informativo .
template corda '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' HTML base para usar ao crear o popover. Os popovers titleinxectaranse no .popover-inner. .popover-arrowconverterase na frecha do popover. O elemento de envoltura máis externo debe ter a .popoverclase e role="popover".
title cadea, elemento, función '' Valor predeterminado do título se titleo atributo non está presente. Se se dá unha función, chamarase coa súa thisreferencia definida ao elemento ao que está unido o popover.
trigger corda 'hover focus' Como se activa o popover: fai clic, pasa o rato, foco, manual. Podes pasar varios disparadores; separalos cun espazo. 'manual'indica que o popover se activará mediante programación mediante os métodos .popover('show'), .popover('hide')e ; .popover('toggle')este valor non se pode combinar con ningún outro disparador. 'hover'por si só producirá popovers que non se poden activar a través do teclado e só se deben usar se hai métodos alternativos para transmitir a mesma información aos usuarios do teclado.

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

const popover = new bootstrap.Popover(element, {
  popperConfig(defaultBsPopperConfig) {
    // const 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 .

Método Descrición
disable Elimina a posibilidade de mostrar o popover dun elemento. O popover só se poderá mostrar se se volve activar.
dispose 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 selectoropción ) non se poden destruír individualmente nos elementos desencadeantes descendentes.
enable Dá a posibilidade de mostrar o popover dun elemento. Os popovers están activados por defecto.
getInstance Método estático que che permite obter a instancia de popover asociada a un elemento DOM.
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.
hide Oculta o popover dun elemento. Volve ao interlocutor antes de que se ocultase o popover (é dicir, antes de hidden.bs.popoverque ocorra o evento). Isto considérase un desencadeamento "manual" do popover.
setContent Dá unha forma de cambiar o contido do popover despois da súa inicialización.
show Revela o popover dun elemento. Volve ao interlocutor antes de que se amosase o popover (é dicir, antes de shown.bs.popoverque 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.
toggle 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.popoverou ). hidden.bs.popoverIsto considérase un desencadeamento "manual" do popover.
toggleEnabled Alterna a posibilidade de mostrar ou ocultar o popover dun elemento.
update Actualiza a posición do popover dun elemento.
// 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'
})
O setContentmétodo acepta un objectargumento, onde cada chave de propiedade é un stringselector válido dentro do modelo popover, e cada valor de propiedade relacionado pode ser string| element| function| null

Eventos

Evento Descrición
hide.bs.popover Este evento desenvólvese inmediatamente cando hidese 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).
inserted.bs.popover Este evento desenvólvese despois do show.bs.popoverevento cando o modelo popover foi engadido ao DOM.
show.bs.popover Este evento desenvólvese inmediatamente cando showse chama ao método de instancia.
shown.bs.popover Este evento desenvólvese cando o popover se fixo visible para o usuario (esperará a que se completen as transicións CSS).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})