Saltar al contenido principal Saltar a la navegación de la documentación
¡Hay una versión más nueva de Bootstrap!
Ver en GitHub

Popovers

Documentación y ejemplos para añadir popovers de Bootstrap, como los que se encuentran en iOS, a cualquier elemento de tu sitio.

Descripción general

Cosas a saber cuando se usa el plugin popover:

  • Los popovers dependen de la librería de terceros Popper para el posicionamiento. Debes incluir popper.min.js antes de bootstrap.js o usar bootstrap.bundle.min.js / bootstrap.bundle.js que contiene Popper para que los popovers funcionen.
  • Los popovers requieren el plugin de tooltip como dependencia.
  • Los popovers son opt-in por razones de rendimiento, por lo que debes inicializarlos tú mismo.
  • Los valores de title y content de longitud cero nunca mostrarán un popover.
  • Especifica container: 'body' para evitar problemas de renderizado en componentes más complejos (como nuestros grupos de entrada, grupos de botones, etc).
  • Activar popovers en elementos ocultos no funcionará.
  • Los popovers para elementos .disabled o disabled deben activarse desde un elemento contenedor.
  • Cuando se activan desde anclas que se envuelven en múltiples líneas, los popovers se centrarán entre el ancho total de las anclas. Usa .text-nowrap en tus <a> para evitar este comportamiento.
  • Los popovers deben ocultarse antes de que sus elementos correspondientes hayan sido eliminados del DOM.
  • Los popovers pueden activarse gracias a un elemento dentro de un shadow DOM.
Por defecto, este componente usa el sanitizador de contenido integrado, que elimina cualquier elemento HTML que no esté explícitamente permitido. Consulta la sección del sanitizador en nuestra documentación de JavaScript para más detalles.
El efecto de animación de este componente depende de la media query prefers-reduced-motion. Consulta la sección de movimiento reducido de nuestra documentación de accesibilidad.

Sigue leyendo para ver cómo funcionan los popovers con algunos ejemplos.

Ejemplo: Habilitar popovers en todas partes

Una forma de inicializar todos los popovers en una página sería seleccionarlos por su atributo data-bs-toggle:

var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
  return new bootstrap.Popover(popoverTriggerEl)
})

Ejemplo: Usando la opción container

Cuando tienes algunos estilos en un elemento padre que interfieren con un popover, querrás especificar un container personalizado para que el HTML del popover aparezca dentro de ese elemento en su lugar.

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

Ejemplo

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

Cuatro direcciones

Hay cuatro opciones disponibles: alineado arriba, derecha, abajo e izquierda. Las direcciones se reflejan cuando 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>

Cerrar al siguiente clic

Usa el disparador focus para cerrar los popovers en el siguiente clic del usuario en un elemento diferente al elemento conmutador.

Marcado específico requerido para cerrar-al-siguiente-clic

Para un comportamiento adecuado entre navegadores y plataformas, debes usar la etiqueta <a>, no la etiqueta <button>, y también debes incluir un atributo tabindex.

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

Los elementos con el atributo disabled no son interactivos, lo que significa que los usuarios no pueden pasar el cursor o hacer clic en ellos para activar un popover (o tooltip). Como solución alternativa, querrás activar el popover desde un <div> o <span> contenedor, idealmente enfocable por teclado usando tabindex="0".

Para los disparadores de popover deshabilitados, también puedes preferir data-bs-trigger="hover focus" para que el popover aparezca como retroalimentación visual inmediata para tus usuarios ya que pueden no esperar hacer clic en un elemento deshabilitado.

<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

Habilitar popovers vía JavaScript:

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

Hacer que los popovers funcionen para usuarios de teclado y tecnologías de asistencia

Para permitir que los usuarios de teclado activen tus popovers, solo debes añadirlos a elementos HTML que sean tradicionalmente enfocables por teclado e interactivos (como enlaces o controles de formulario). Aunque elementos HTML arbitrarios (como <span>s) pueden hacerse enfocables añadiendo el atributo tabindex="0", esto añadirá paradas de tabulación potencialmente molestas y confusas en elementos no interactivos para los usuarios de teclado, y la mayoría de las tecnologías de asistencia actualmente no anuncian el contenido del popover en esta situación. Además, no confíes únicamente en hover como disparador de tus popovers, ya que esto hará imposible activarlos para los usuarios de teclado.

Aunque puedes insertar HTML estructurado y rico en los popovers con la opción html, recomendamos encarecidamente que evites añadir una cantidad excesiva de contenido. La forma en que los popovers funcionan actualmente es que, una vez mostrados, su contenido está vinculado al elemento disparador con el atributo aria-describedby. Como resultado, la totalidad del contenido del popover será anunciada a los usuarios de tecnologías de asistencia como un flujo largo e ininterrumpido.

Además, aunque también es posible incluir controles interactivos (como elementos de formulario o enlaces) en tu popover (añadiendo estos elementos al allowList de atributos y etiquetas permitidos), ten en cuenta que actualmente el popover no gestiona el orden de foco del teclado. Cuando un usuario de teclado abre un popover, el foco permanece en el elemento disparador, y como el popover usualmente no sigue inmediatamente al disparador en la estructura del documento, no hay garantía de que avanzar/presionar TAB mueva a un usuario de teclado al popover mismo. En resumen, simplemente añadir controles interactivos a un popover probablemente hará que estos controles sean inalcanzables/inutilizables para los usuarios de teclado y de tecnologías de asistencia, o como mínimo creará un orden de foco general ilógico. En estos casos, considera usar un diálogo modal en su lugar.

Opciones

Las opciones se pueden pasar vía atributos data o JavaScript. Para los atributos data, añade el nombre de la opción a data-bs-, como en data-bs-animation="". Asegúrate de cambiar el tipo de capitalización del nombre de la opción de camelCase a kebab-case cuando pases las opciones vía atributos data. Por ejemplo, en lugar de usar data-bs-customClass="beautifier", usa data-bs-custom-class="beautifier".

Ten en cuenta que por razones de seguridad las opciones sanitize, sanitizeFn, y allowList no se pueden proporcionar usando atributos data.
Nombre Tipo Predeterminado Descripción
animation boolean true Aplicar una transición de fundido CSS al popover
container string | element | false false

Añade el popover a un elemento específico. Ejemplo: container: 'body'. Esta opción es particularmente útil ya que te permite posicionar el popover en el flujo del documento cerca del elemento disparador - lo que evitará que el popover flote lejos del elemento disparador durante un redimensionamiento de ventana.

content string | element | function ''

Valor de contenido por defecto si el atributo data-bs-content no está presente.

Si se proporciona una función, se llamará con su referencia this establecida al elemento al que está adjunto el popover.

delay number | object 0

Retrasar la muestra y ocultación del popover (ms) - no se aplica al tipo de disparador manual

Si se proporciona un número, el retraso se aplica tanto a ocultar/mostrar

La estructura del objeto es: delay: { "show": 500, "hide": 100 }

html boolean false Inserta HTML en el popover. Si es false, se usará la propiedad innerText para insertar contenido en el DOM. Usa texto si te preocupan los ataques XSS.
placement string | function 'right'

Cómo posicionar el popover - auto | top | bottom | left | right.
Cuando se especifica auto, reorientará dinámicamente el popover.

Cuando se usa una función para determinar la ubicación, se llama con el nodo DOM del popover como primer argumento y el nodo DOM del elemento disparador como segundo. El contexto this se establece en la instancia del popover.

selector string | false false Si se proporciona un selector, los objetos popover se delegarán a los objetivos especificados. En la práctica, esto se usa para permitir que el contenido HTML dinámico tenga popovers añadidos. Consulta esto y un ejemplo informativo.
template string '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'

HTML base a usar cuando se crea el popover.

El title del popover se inyectará en el .popover-header.

El content del popover se inyectará en el .popover-body.

El .popover-arrow se convertirá en la flecha del popover.

El elemento contenedor más externo debe tener la clase .popover.

title string | element | function ''

Valor de título por defecto si el atributo title no está presente.

Si se proporciona una función, se llamará con su referencia this establecida al elemento al que está adjunto el popover.

trigger string 'click' Cómo se activa el popover - click | hover | focus | manual. Puedes pasar múltiples disparadores; sepáralos con un espacio. manual no se puede combinar con ningún otro disparador.
fallbackPlacements array ['top', 'right', 'bottom', 'left'] Define ubicaciones de respaldo proporcionando una lista de ubicaciones en un array (en orden de preferencia). Para más información consulta la documentación de comportamiento de Popper
boundary string | element 'clippingParents' Límite de overflow del popover (se aplica solo al modificador preventOverflow de Popper). Por defecto es 'clippingParents' y puede aceptar una referencia HTMLElement (solo vía JavaScript). Para más información consulta la documentación de detectOverflow de Popper.
customClass string | function ''

Añade clases al popover cuando se muestra. Ten en cuenta que estas clases se añadirán además de las clases especificadas en la plantilla. Para añadir múltiples clases, sepáralas con espacios: 'class-1 class-2'.

También puedes pasar una función que devuelva una sola cadena que contenga nombres de clases adicionales.

sanitize boolean true Habilita o deshabilita la sanitización. Si se activa, las opciones 'template', 'content' y 'title' serán sanitizadas. Consulta la sección del sanitizador en nuestra documentación de JavaScript.
allowList object Valor por defecto Objeto que contiene las etiquetas y atributos permitidos
sanitizeFn null | function null Aquí puedes proporcionar tu propia función de sanitización. Esto puede ser útil si prefieres usar una librería dedicada para realizar la sanitización.
offset array | string | function [0, 8]

Desplazamiento del popover relativo a su objetivo. Puedes pasar una cadena en atributos data con valores separados por comas como: data-bs-offset="10,20"

Cuando se usa una función para determinar el desplazamiento, se llama con un objeto que contiene la colocación de popper, la referencia y los rects de popper como primer argumento. El nodo DOM del elemento disparador se pasa como segundo argumento. La función debe devolver un array con dos números: [skidding, distance].

Para más información consulta la documentación de offset de Popper.

popperConfig null | object | function null

Para cambiar la configuración predeterminada de Popper de Bootstrap, consulta la configuración de Popper.

Cuando se usa una función para crear la configuración de Popper, se llama con un objeto que contiene la configuración predeterminada de Popper de Bootstrap. Te ayuda a usar y fusionar la configuración predeterminada con tu propia configuración. La función debe devolver un objeto de configuración para Popper.

Atributos data para popovers individuales

Las opciones para popovers individuales también se pueden especificar mediante el uso de atributos data, como se explicó anteriormente.

Usar una función con popperConfig

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

Métodos

Métodos asíncronos y transiciones

Todos los métodos de la API son asíncronos e inician una transición. Vuelven al llamador tan pronto como se inicia la transición pero antes de que termine. Además, una llamada a un método en un componente en transición será ignorada.

Consulta nuestra documentación de JavaScript para más información.

show

Muestra el popover de un elemento. Vuelve al llamador antes de que el popover se haya mostrado realmente (es decir, antes de que ocurra el evento shown.bs.popover). Esto se considera una activación "manual" del popover. Los popovers cuyo título y contenido son ambos de longitud cero nunca se muestran.

myPopover.show()

hide

Oculta el popover de un elemento. Vuelve al llamador antes de que el popover se haya ocultado realmente (es decir, antes de que ocurra el evento hidden.bs.popover). Esto se considera una activación "manual" del popover.

myPopover.hide()

toggle

Conmuta el popover de un elemento. Vuelve al llamador antes de que el popover se haya mostrado u ocultado realmente (es decir, antes de que ocurra el evento shown.bs.popover o hidden.bs.popover). Esto se considera una activación "manual" del popover.

myPopover.toggle()

dispose

Oculta y destruye el popover de un elemento (Elimina los datos almacenados en el elemento DOM). Los popovers que usan delegación (que se crean usando la opción selector) no se pueden destruir individualmente en los elementos disparadores descendientes.

myPopover.dispose()

enable

Da a un elemento la capacidad de mostrar su popover. Los popovers están habilitados por defecto.

myPopover.enable()

disable

Elimina la capacidad de mostrar el popover de un elemento. El popover solo podrá mostrarse si se vuelve a habilitar.

myPopover.disable()

toggleEnabled

Conmuta la capacidad de mostrar u ocultar el popover de un elemento.

myPopover.toggleEnabled()

update

Actualiza la posición del popover de un elemento.

myPopover.update()

getInstance

Método estático que te permite obtener la instancia de popover asociada a un elemento del DOM

var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getInstance(exampleTriggerEl) // Returns a Bootstrap popover instance

getOrCreateInstance

Método estático que te permite obtener la instancia de popover asociada a un elemento del DOM, o crear una nueva en caso de que no haya sido inicializada

var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap popover instance

Eventos

Tipo de evento Descripción
show.bs.popover Este evento se dispara inmediatamente cuando se llama al método de instancia show.
shown.bs.popover Este evento se dispara cuando el popover se ha hecho visible al usuario (esperará a que se completen las transiciones CSS).
hide.bs.popover Este evento se dispara inmediatamente cuando se ha llamado al método de instancia hide.
hidden.bs.popover Este evento se dispara cuando el popover ha terminado de ocultarse al usuario (esperará a que se completen las transiciones CSS).
inserted.bs.popover Este evento se dispara después del evento show.bs.popover cuando la plantilla del popover se ha añadido al DOM.
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
  // do something...
})
Traducción mantenida por Esdocu. Visita esdocu.com para ver más documentaciones traducidas.