Popovers
Documentación y ejemplos para agregar popovers de Bootstrap, como los que se encuentran en iOS, a cualquier elemento de su sitio.
Visión general
Cosas que debe saber al usar el complemento popover:
- Los popovers se basan en la biblioteca de terceros Popper para el posicionamiento. ¡Debe incluir popper.min.js antes de bootstrap.js o usar
bootstrap.bundle.min.js
/bootstrap.bundle.js
que contiene Popper para que funcionen los popovers! - Los popovers requieren el complemento de información sobre herramientas como una dependencia.
- Los popovers son opcionales por motivos de rendimiento, por lo que debe inicializarlos usted mismo .
- La longitud cero
title
ycontent
los valores nunca mostrarán un popover. - Especifique
container: 'body'
para evitar problemas de representación 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
ordisabled
deben activarse en un elemento contenedor. - Cuando se activan desde anclas que se envuelven en varias líneas, los popovers se centrarán entre el ancho total de las anclas. Úselo
.text-nowrap
en su<a>
s para evitar este comportamiento. - Los popovers deben ocultarse antes de que sus elementos correspondientes se eliminen del DOM.
- Los popovers se pueden activar gracias a un elemento dentro de un shadow DOM.
prefers-reduced-motion
consulta de medios. Consulte 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 ventanas emergentes en todas partes
Una forma de inicializar todos los popovers en una página sería seleccionarlos por su 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)
})
Ejemplo: Uso de la container
opción
Cuando tiene algunos estilos en un elemento principal que interfieren con una ventana emergente, querrá especificar un personalizado container
para que el HTML de la ventana emergente aparezca dentro de ese elemento.
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: alineación superior, derecha, inferior 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>
Descartar en el siguiente clic
Utilice el focus
activador para descartar popovers en el siguiente clic del usuario en un elemento diferente al elemento de alternancia.
Marcado específico requerido para descartar al siguiente clic
Para un comportamiento adecuado entre navegadores y plataformas, debe usar la <a>
etiqueta, no la <button>
etiqueta, y también debe incluir 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 deshabilitados
Los elementos con el disabled
atributo no son interactivos, lo que significa que los usuarios no pueden pasar el mouse sobre ellos ni hacer clic en ellos para activar una ventana emergente (o información sobre herramientas). Como solución alternativa, querrá activar la ventana emergente desde un envoltorio <div>
o <span>
, idealmente enfocable desde el teclado usando tabindex="0"
.
Para los activadores de ventanas emergentes deshabilitadas, también puede preferir data-bs-trigger="hover focus"
que la ventana emergente aparezca como una respuesta visual inmediata a sus usuarios, ya que es posible que no esperen 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>
Hablar con descaro a
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 ventanas emergentes a través de JavaScript:
var exampleEl = document.getElementById('example')
var popover = new bootstrap.Popover(exampleEl, options)
Cómo hacer que los popovers funcionen para los usuarios de teclados y tecnología de asistencia
Para permitir que los usuarios del teclado activen sus ventanas emergentes, solo debe agregarlas a los elementos HTML que tradicionalmente se pueden enfocar con el teclado e interactivos (como enlaces o controles de formulario). Aunque los elementos HTML arbitrarios (como <span>
s) se pueden enfocar agregando el tabindex="0"
atributo, esto agregará tabulaciones potencialmente molestas y confusas en elementos no interactivos para usuarios de teclado, y la mayoría de las tecnologías de asistencia actualmente no anuncian el contenido de la ventana emergente en esta situación. . Además, no confíe únicamente en hover
el disparador de sus popovers, ya que esto hará que sea imposible que los usuarios del teclado los activen.
Si bien puede insertar HTML enriquecido y estructurado en popovers con la html
opción, le recomendamos encarecidamente que evite agregar una cantidad excesiva de contenido. La forma en que los popovers funcionan actualmente es que, una vez que se muestran, su contenido está vinculado al elemento desencadenante con el aria-describedby
atributo. Como resultado, la totalidad del contenido de la ventana emergente se anunciará a los usuarios de tecnología de asistencia como una secuencia larga e ininterrumpida.
Además, aunque también es posible incluir controles interactivos (como elementos de formulario o enlaces) en su ventana emergente (agregando estos elementos a los allowList
atributos y etiquetas permitidos), tenga en cuenta que actualmente la ventana emergente no administra el orden de enfoque del teclado. Cuando un usuario del teclado abre una ventana emergente, el enfoque permanece en el elemento desencadenante y, como la ventana emergente generalmente no sigue inmediatamente al disparador en la estructura del documento, no hay garantía de que avanzar/presionarTABmoverá a un usuario del teclado al propio popover. En resumen, es probable que el simple hecho de agregar controles interactivos a una ventana emergente haga que estos controles sean inalcanzables o inutilizables para los usuarios de teclados y usuarios de tecnologías de asistencia, o al menos generar un orden de enfoque general ilógico. En estos casos, considere usar un diálogo modal en su lugar.
Opciones
Las opciones se pueden pasar a través de atributos de datos o JavaScript. Para los atributos de datos, agregue el nombre de la opción a data-bs-
, como en data-bs-animation=""
. Asegúrese de cambiar el tipo de caso del nombre de la opción de camelCase a kebab-case al pasar las opciones a través de atributos de datos. Por ejemplo, en lugar de usar data-bs-customClass="beautifier"
, use data-bs-custom-class="beautifier"
.
sanitize
opciones
sanitizeFn
, y
allowList
no se pueden proporcionar mediante atributos de datos.
Nombre | Escribe | Defecto | Descripción |
---|---|---|---|
animation |
booleano | true |
Aplicar una transición de fundido CSS al popover |
container |
cadena | elemento | falso | false |
Agrega el popover a un elemento específico. Ejemplo: |
content |
cadena | elemento | función | '' |
Valor de contenido predeterminado si el Si se proporciona una función, se llamará con su |
delay |
número | objeto | 0 |
Retraso en mostrar y ocultar el popover (ms) - no se aplica al tipo de activación manual Si se proporciona un número, la demora se aplica tanto para ocultar/mostrar La estructura del objeto es: |
html |
booleano | false |
Inserte HTML en la ventana emergente. Si es falso, innerText la propiedad se usará para insertar contenido en el DOM. Use texto si le preocupan los ataques XSS. |
placement |
cadena | función | 'right' |
Cómo colocar el popover - automático | parte superior | fondo | izquierda | Correcto. Cuando se usa una función para determinar la ubicación, se llama con el nodo DOM emergente como primer argumento y el nodo DOM del elemento desencadenante como segundo. El |
selector |
cadena | falso | false |
Si se proporciona un selector, los objetos emergentes se delegarán a los destinos especificados. En la práctica, esto se usa para permitir que se agreguen popovers al contenido HTML dinámico. Vea esto y un ejemplo informativo . |
template |
cuerda | '<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 al crear el popover. Los popover Los popover
El elemento contenedor más externo debe tener la |
title |
cadena | elemento | función | '' |
Valor de título predeterminado si Si se proporciona una función, se llamará con su |
trigger |
cuerda | 'click' |
Cómo se activa el popover: haga clic en | flotar | enfoque | manual. Puede pasar varios disparadores; sepáralos con un espacio. manual no se puede combinar con ningún otro disparador. |
fallbackPlacements |
formación | ['top', 'right', 'bottom', 'left'] |
Defina ubicaciones de respaldo proporcionando una lista de ubicaciones en matriz (en orden de preferencia). Para obtener más información, consulte los documentos de comportamiento de Popper. |
boundary |
cadena | elemento | 'clippingParents' |
Límite de restricción de desbordamiento del popover (se aplica solo al modificador preventOverflow de Popper). De forma predeterminada, es 'clippingParents' y puede aceptar una referencia HTMLElement (solo a través de JavaScript). Para obtener más información, consulte la documentación de detectOverflow de Popper . |
customClass |
cadena | función | '' |
Agregue clases a la ventana emergente cuando se muestre. Tenga en cuenta que estas clases se agregarán además de las clases especificadas en la plantilla. Para agregar varias clases, sepárelas con espacios: También puede pasar una función que debería devolver una sola cadena que contenga nombres de clases adicionales. |
sanitize |
booleano | true |
Activa o desactiva la desinfección. Si está activado 'template' , 'content' y 'title' las opciones se desinfectarán. Consulte la sección de desinfectantes en nuestra documentación de JavaScript . |
allowList |
objeto | Valor por defecto | Objeto que contiene atributos y etiquetas permitidos |
sanitizeFn |
nulo | función | null |
Aquí puede proporcionar su propia función de desinfección. Esto puede ser útil si prefiere usar una biblioteca dedicada para realizar la desinfección. |
offset |
matriz | cadena | función | [0, 8] |
Desplazamiento del popover relativo a su destino. Puede pasar una cadena en atributos de datos con valores separados por comas como: Cuando se usa una función para determinar el desplazamiento, se llama con un objeto que contiene la ubicación del popper, la referencia y los rects del popper como su primer argumento. El nodo DOM del elemento desencadenante se pasa como segundo argumento. La función debe devolver una matriz con dos números: . Para obtener más información, consulte los documentos de compensación de Popper . |
popperConfig |
nulo | objeto | función | null |
Para cambiar la configuración predeterminada de Popper de Bootstrap, consulte Configuración de Popper . Cuando se usa una función para crear la configuración Popper, se llama con un objeto que contiene la configuración Popper predeterminada de Bootstrap. Le ayuda a usar y fusionar el valor predeterminado con su propia configuración. La función debe devolver un objeto de configuración para Popper. |
Atributos de datos para ventanas emergentes individuales
Las opciones para ventanas emergentes individuales se pueden especificar alternativamente mediante el uso de atributos de datos, como se explicó anteriormente.
Uso de la función conpopperConfig
var popover = new bootstrap.Popover(element, {
popperConfig: function (defaultBsPopperConfig) {
// var newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Métodos
Transiciones y métodos asíncronos
Todos los métodos de API son asíncronos e inician una transición . Vuelven a la persona que llama tan pronto como se inicia la transición, pero antes de que finalice . Además, se ignorará una llamada de método en un componente en transición. .
Consulte nuestra documentación de JavaScript para obtener más información .
mostrar
Revela el popover de un elemento. Vuelve a la persona que llama antes de que se haya mostrado realmente el popover (es decir, antes de shown.bs.popover
que ocurra el evento). 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()
ocultar
Oculta el popover de un elemento. Vuelve a la persona que llama antes de que se haya ocultado realmente el popover (es decir, antes de quehidden.bs.popover
que ocurra el evento). Esto se considera una activación "manual" del popover.
myPopover.hide()
palanca
Alterna el popover de un elemento. Vuelve a la persona que llama antes de que se muestre u oculte el popover (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()
disponer
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 selector
opción ) no se pueden destruir individualmente en elementos desencadenantes descendientes.
myPopover.dispose()
habilitar
Le da al popover de un elemento la capacidad de mostrarse. Los popovers están habilitados de forma predeterminada.
myPopover.enable()
deshabilitar
Elimina la capacidad de mostrar el popover de un elemento. El popover solo se podrá mostrar si se vuelve a habilitar.
myPopover.disable()
alternar Habilitado
Alterna la capacidad de mostrar u ocultar la ventana emergente de un elemento.
myPopover.toggleEnabled()
actualizar
Actualiza la posición del popover de un elemento.
myPopover.update()
obtener Instancia
Método estático que le permite obtener la instancia de popover asociada con 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 le permite obtener la instancia de popover asociada con un elemento DOM, o crear uno nuevo en caso de que no se haya inicializado
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
Eventos
Tipo de evento | Descripción |
---|---|
mostrar.bs.popover | Este evento se activa inmediatamente cuando show se llama al método de instancia. |
mostrado.bs.popover | Este evento se activa cuando el popover se hace visible para el usuario (esperará a que se completen las transiciones de CSS). |
ocultar.bs.popover | Este evento se activa inmediatamente cuando hide se llama al método de instancia. |
oculto.bs.popover | Este evento se activa cuando el popover ha terminado de ocultarse para el usuario (esperará a que se completen las transiciones de CSS). |
insertado.bs.popover | Este evento se activa después del show.bs.popover evento cuando la plantilla de ventana emergente se ha agregado al DOM. |
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
// do something...
})