Tooltips
Documentación y ejemplos para agregar tooltips personalizados de Bootstrap con CSS y JavaScript usando CSS3 para animaciones y atributos data-bs- para almacenamiento local de títulos.
Descripción general
Cosas a saber cuando usas el plugin tooltip:
- Los tooltips dependen de la librería de terceros Popper para el posicionamiento. Debes incluir popper.min.js antes
de
bootstrap.js, o usarbootstrap.bundle.min.jsque contiene Popper. - Los tooltips son opt-in por motivos de rendimiento, así que debes inicializarlos tú mismo.
- Los tooltips con títulos de longitud cero nunca se muestran.
- Especifica
container: 'body'para evitar problemas de renderizado en componentes más complejos (como nuestros grupos de entrada, grupos de botones, etc). - Activar tooltips en elementos ocultos no funcionará.
- Los tooltips para elementos
.disabledodisableddeben activarse en un elemento contenedor. - Cuando se activan desde hipervínculos que abarcan múltiples líneas, los tooltips se
centrarán. Usa
white-space: nowrap;en tus<a>s para evitar este comportamiento. - Los tooltips deben ocultarse antes de que sus elementos correspondientes hayan sido eliminados del DOM.
- Los tooltips pueden activarse gracias a un elemento dentro de un shadow DOM.
¿Entendido todo? Genial, veamos cómo funcionan con algunos ejemplos.
prefers-reduced-motion. Consulta la sección de movimiento reducido de nuestra
documentación de accesibilidad.Ejemplos
Habilitar tooltips
Como se mencionó anteriormente, debes inicializar los tooltips antes de poder usarlos. Una
forma de inicializar todos los tooltips en una página sería seleccionarlos por su atributo
data-bs-toggle, así:
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
Tooltips en enlaces
Pasa el cursor sobre los enlaces de abajo para ver los tooltips:
Texto de marcador de posición para demostrar algunos enlaces inline con tooltips. Esto es ahora solo relleno, nada extraordinario. Contenido colocado aquí solo para imitar la presencia de texto real. Y todo eso solo para darte una idea de cómo se verían los tooltips cuando se usan en situaciones del mundo real. Así que esperamos que ahora hayas visto cómo estos tooltips en enlaces pueden funcionar en la práctica, una vez que los uses en tu propio sitio o proyecto.
<p class="muted">Placeholder text to demonstrate some <a href="#" data-bs-toggle="tooltip" data-bs-title="Default tooltip">inline links</a> with tooltips. This is now just filler, no killer. Content placed here just to mimic the presence of <a href="#" data-bs-toggle="tooltip" data-bs-title="Another tooltip">real text</a>. And all that just to give you an idea of how tooltips would look when used in real-world situations. So hopefully you've now seen how <a href="#" data-bs-toggle="tooltip" data-bs-title="Another one here too">these tooltips on links</a> can work in practice, once you use them on <a href="#" data-bs-toggle="tooltip" data-bs-title="The last tip!">your own</a> site or project.
</p>
title o
data-bs-title en tu HTML. Cuando se usa title, Popper lo reemplazará automáticamente
con data-bs-title cuando el elemento se renderice.Tooltips personalizados
Añadido en v5.2.0Puedes personalizar la apariencia de los tooltips usando variables
CSS. Establecemos una clase personalizada con data-bs-custom-class="custom-tooltip" para
delimitar nuestra apariencia personalizada y la usamos para sobrescribir una variable CSS local.
.custom-tooltip {
--bs-tooltip-bg: var(--bs-primary);
}
<button type="button" class="btn btn-secondary"
data-bs-toggle="tooltip" data-bs-placement="top"
data-bs-custom-class="custom-tooltip"
data-bs-title="This top tooltip is themed via CSS variables.">
Custom tooltip
</button>
Direcciones
Pasa el cursor sobre los botones de abajo para ver las cuatro direcciones de tooltips: top, right, bottom y left. Las direcciones se invierten cuando se usa Bootstrap en RTL.
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="Tooltip on top">
Tooltip on top
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip on right">
Tooltip on right
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip on bottom">
Tooltip on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip on left">
Tooltip on left
</button>
Y con HTML personalizado añadido:
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
Tooltip with HTML
</button>
Con un SVG:
CSS
Variables
Añadido en v5.2.0Como parte del enfoque evolutivo de variables CSS de Bootstrap, los tooltips ahora usan
variables CSS locales en .tooltip para una personalización en tiempo real mejorada. Los valores
de las variables CSS se establecen vía Sass, por lo que la personalización con Sass también sigue siendo
compatible.
--#{$prefix}tooltip-zindex: #{$zindex-tooltip};
--#{$prefix}tooltip-max-width: #{$tooltip-max-width};
--#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};
--#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};
--#{$prefix}tooltip-margin: #{$tooltip-margin};
@include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);
--#{$prefix}tooltip-color: #{$tooltip-color};
--#{$prefix}tooltip-bg: #{$tooltip-bg};
--#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};
--#{$prefix}tooltip-opacity: #{$tooltip-opacity};
--#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};
--#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};
Variables Sass
$tooltip-font-size: $font-size-sm;
$tooltip-max-width: 200px;
$tooltip-color: $white;
$tooltip-bg: $black;
$tooltip-border-radius: $border-radius;
$tooltip-opacity: .9;
$tooltip-padding-y: $spacer * .25;
$tooltip-padding-x: $spacer * .5;
$tooltip-margin: null; // TODO: remove this in v6
$tooltip-arrow-width: .8rem;
$tooltip-arrow-height: .4rem;
// fusv-disable
$tooltip-arrow-color: null; // Deprecated in Bootstrap 5.2.0 for CSS variables
// fusv-enable
Uso
El plugin tooltip genera contenido y markup bajo demanda, y por defecto coloca los tooltips después de su elemento disparador.
Activa el tooltip vía JavaScript:
const exampleEl = document.getElementById('example')
const tooltip = new bootstrap.Tooltip(exampleEl, options)
Overflow auto y scroll
La posición del tooltip intenta cambiarse automáticamente cuando un contenedor
padre tiene overflow: auto o overflow: scroll como nuestro
.table-responsive, pero aún mantiene el posicionamiento de la ubicación original. Para resolver
esto, establece la opción
boundary (para el modificador flip usando la opción popperConfig) en
cualquier HTMLElement para sobrescribir el valor por defecto, 'clippingParents', como por
ejemplo document.body:
const tooltip = new bootstrap.Tooltip('#example', {
boundary: document.body // or document.querySelector('#boundary')
})
Markup
El markup requerido para un tooltip es solo un atributo data y un
title en el elemento HTML al que le quieres poner un tooltip. El markup generado de un tooltip es
bastante simple, aunque sí requiere una posición (por defecto, establecida en top por el plugin).
Hacer que los tooltips funcionen para usuarios de teclado y tecnología de asistencia
Solo deberías agregar tooltips 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 agregando 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 tooltip en
esta situación. Además, no confíes únicamente en hover como disparador de tu tooltip, ya que
esto hará que tus tooltips sean imposibles de activar para los usuarios de teclado.
<!-- HTML to write -->
<a href="#" data-bs-toggle="tooltip" data-bs-title="Some tooltip text!">Hover over me</a>
<!-- Generated markup by the plugin -->
<div class="tooltip bs-tooltip-top" role="tooltip">
<div class="tooltip-arrow"></div>
<div class="tooltip-inner">
Some tooltip text!
</div>
</div>
Elementos deshabilitados
Los elementos con el atributo disabled no son interactivos, lo que significa
que los usuarios no pueden enfocarlos, pasar el cursor por encima ni hacer clic en ellos para activar un
tooltip (o popover). Como solución alternativa, querrás activar el tooltip desde un <div> o
<span> contenedor, idealmente hecho enfocable por teclado usando tabindex="0".
<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-title="Disabled tooltip">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>
Opciones
Como las opciones se pueden pasar vía atributos data o JavaScript, puedes añadir un nombre
de opción a data-bs-, como en data-bs-animation="{value}". Asegúrate de cambiar el
tipo de capitalización del nombre de la opción de “camelCase” a “kebab-case” al pasar las
opciones vía atributos data. Por ejemplo, usa data-bs-custom-class="beautifier" en lugar de
data-bs-customClass="beautifier".
A partir de Bootstrap 5.2.0, todos los componentes soportan un atributo data reservado
experimental data-bs-config que puede albergar una configuración simple del
componente como una cadena JSON. Cuando un elemento tiene los atributos
data-bs-config='{"delay":0, "title":123}' y data-bs-title="456", el valor final de
title será 456 y los atributos data separados sobrescribirán los valores dados en
data-bs-config. Además, los atributos data existentes pueden albergar valores JSON como
data-bs-delay='{"show":0,"hide":150}'.
sanitize, sanitizeFn, y allowList no se pueden proporcionar
usando atributos data.| Nombre | Tipo | Predeterminado | Descripción |
|---|---|---|---|
allowList |
object | Valor por defecto | Objeto que contiene atributos y etiquetas permitidos. |
animation |
boolean | true |
Aplica una transición CSS de fundido al tooltip. |
boundary |
string, element | 'clippingParents' |
Límite de restricción de overflow del tooltip (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. |
container |
string, element, false | false |
Agrega el tooltip a un elemento específico. Ejemplo:
container: 'body'. Esta opción es particularmente útil ya que te permite posicionar el
tooltip en el flujo del documento cerca del elemento disparador, lo que evitará que el tooltip se
aleje del elemento disparador durante un redimensionamiento de la ventana. |
customClass |
string, function | '' |
Añade clases al tooltip 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 con los nombres de clase adicionales. |
delay |
number, object | 0 |
Retrasa la muestra y ocultamiento del tooltip (ms)—no se aplica al tipo de disparo
manual. Si se proporciona un número, el retardo se aplica tanto a ocultar/mostrar. La estructura del
objeto es: delay: { "show": 500, "hide": 100 }. |
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 behavior de Popper. |
html |
boolean | false |
Permite HTML en el tooltip. Si es true, las etiquetas HTML en el
title del tooltip se renderizarán en el tooltip. Si es false, se usará la propiedad
innerText para insertar contenido en el DOM. Usa texto si te preocupan los ataques XSS.
|
offset |
array, string, function | [0, 0] |
Desplazamiento del tooltip 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
del popper, la referencia y los rects del 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. |
placement |
string, function | 'top' |
Cómo posicionar el tooltip: auto, top, bottom, left, right. Cuando se especifica
auto, reorientará dinámicamente el tooltip. Cuando se usa una función para determinar la
colocación, se llama con el nodo DOM del tooltip como primer argumento y el nodo DOM del elemento
disparador como segundo. El contexto this se establece en la instancia del tooltip. |
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. |
sanitize |
boolean | true |
Habilita o deshabilita la sanitización. Si se activa, las opciones
'template', 'content' y 'title' se sanitizarán. |
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. |
selector |
string, false | false |
Si se proporciona un selector, los objetos tooltip se delegarán a los objetivos
especificados. En la práctica, esto se usa para aplicar también tooltips a elementos DOM añadidos
dinámicamente (soporte de jQuery.on). Consulta este issue y un ejemplo informativo. Nota: el
atributo title no debe usarse como selector. |
template |
string |
'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
|
HTML base a usar al crear el tooltip. El title del tooltip se
inyectará en el .tooltip-inner. .tooltip-arrow se convertirá en la flecha
del tooltip. El elemento contenedor más externo debe tener la clase .tooltip y
role="tooltip". |
title |
string, element, function | '' |
Valor de título predeterminado si el atributo title no está presente.
Si se proporciona una función, se llamará con su referencia this establecida en el
elemento al que está adjunto el popover. |
trigger |
string | 'hover focus' |
Cómo se dispara el tooltip: click, hover, focus, manual. Puedes pasar múltiples
disparadores; sepáralos con un espacio. 'manual' indica que el tooltip se disparará
programáticamente vía los métodos .tooltip('show'), .tooltip('hide') y
.tooltip('toggle'); este valor no se puede combinar con ningún otro disparador.
'hover' por sí solo resultará en tooltips que no pueden ser disparados vía teclado, y
solo debe usarse si existen métodos alternativos para transmitir la misma información a los usuarios
de teclado. |
Atributos data para tooltips individuales
Las opciones para tooltips individuales también se pueden especificar mediante el uso de atributos data, como se explicó anteriormente.
Usando una función con popperConfig
const tooltip = new bootstrap.Tooltip(element, {
popperConfig(defaultBsPopperConfig) {
// const 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.
| Método | Descripción |
|---|---|
disable |
Elimina la capacidad de mostrar el tooltip de un elemento. El tooltip solo podrá mostrarse si se vuelve a habilitar. |
dispose |
Oculta y destruye el tooltip de un elemento (Elimina los datos almacenados en el
elemento del DOM). Los tooltips que usan delegación (que se crean usando la opción
selector) no pueden destruirse individualmente en los elementos disparadores
descendientes. |
enable |
Le da al tooltip de un elemento la capacidad de mostrarse. Los tooltips están habilitados por defecto. |
getInstance |
Método estático que te permite obtener la instancia de tooltip asociada con un elemento del DOM, o crear una nueva en caso de que no estuviera inicializada. |
getOrCreateInstance |
Método estático que te permite obtener la instancia de tooltip asociada con un elemento del DOM, o crear una nueva en caso de que no estuviera inicializada. |
hide |
Oculta el tooltip de un elemento. Retorna al llamador antes de que el
tooltip se haya ocultado realmente (es decir, antes de que ocurra el evento
hidden.bs.tooltip). Esto se considera una activación “manual” del tooltip. |
setContent |
Permite cambiar el contenido del tooltip después de su inicialización. |
show |
Muestra el tooltip de un elemento. Retorna al llamador antes de que el
tooltip se haya mostrado realmente (es decir, antes de que ocurra el evento
shown.bs.tooltip). Esto se considera una activación “manual” del tooltip. Los tooltips
con títulos de longitud cero nunca se muestran. |
toggle |
Alterna el tooltip de un elemento. Retorna al llamador antes de que el
tooltip se haya mostrado u ocultado realmente (es decir, antes de que ocurra el evento
shown.bs.tooltip o hidden.bs.tooltip). Esto se considera una activación
“manual” del tooltip. |
toggleEnabled |
Alterna la capacidad de mostrar u ocultar el tooltip de un elemento. |
update |
Actualiza la posición del tooltip de un elemento. |
const tooltip = bootstrap.Tooltip.getInstance('#example') // Returns a Bootstrap tooltip instance
// setContent example
tooltip.setContent({ '.tooltip-inner': 'another title' })
setContent acepta un argumento
object, donde cada clave de propiedad es un selector string válido dentro de la
plantilla del popover, y cada valor de propiedad relacionado puede ser string |
element | function | nullEventos
| Evento | Descripción |
|---|---|
hide.bs.tooltip |
Este evento se dispara inmediatamente cuando se ha llamado al método de instancia
hide. |
hidden.bs.tooltip |
Este evento se dispara cuando el popover ha terminado de ocultarse al usuario (esperará a que se completen las transiciones CSS). |
inserted.bs.tooltip |
Este evento se dispara después del evento show.bs.tooltip cuando la
plantilla del tooltip se ha añadido al DOM. |
show.bs.tooltip |
Este evento se dispara inmediatamente cuando se llama al método de instancia
show. |
shown.bs.tooltip |
Este evento se dispara cuando el popover se ha hecho visible al usuario (esperará a que se completen las transiciones CSS). |
const myTooltipEl = document.getElementById('myTooltip')
const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)
myTooltipEl.addEventListener('hidden.bs.tooltip', () => {
// do something...
})
tooltip.hide()