Saltar al contenido principal Saltar a la navegación de la documentación

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 usar bootstrap.bundle.min.js que 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 .disabled o disabled deben 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.

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.

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

Pasa el cursor sobre los enlaces de abajo para ver los tooltips:

Texto de marcador de posición para demostrar algunos enlaces en línea con tooltips. Esto es solo relleno, nada extraordinario. El contenido colocado aquí solo sirve para imitar la presencia de texto real. Y todo eso solo para darte una idea de cómo se verían los tooltips al usarlos 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.

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

Puedes usar 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.0

Puedes 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(--bd-violet-bg);
  --bs-tooltip-color: var(--bs-white);
}
html
<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.0

Como 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:                     var(--#{$prefix}body-bg);
$tooltip-bg:                        var(--#{$prefix}emphasis-color);
$tooltip-border-radius:             var(--#{$prefix}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 de tooltip genera contenido y markup bajo demanda, y por defecto coloca los tooltips después de su elemento trigger. Activa el tooltip vía JavaScript:

const exampleEl = document.getElementById('example')
const tooltip = new bootstrap.Tooltip(exampleEl, options)

Los tooltips intentan automáticamente cambiar de posición cuando un contenedor padre tiene overflow: auto o overflow: scroll, pero aún mantiene el posicionamiento de la ubicación original. Establece la opción boundary (para el modificador flip usando la opción popperConfig) en cualquier HTMLElement para sobrescribir el valor predeterminado, '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).

Mantén los tooltips accesibles para usuarios de teclado y tecnologías de asistencia añadiéndolos solo a elementos HTML que tradicionalmente son enfocables por teclado e interactivos (como enlaces o controles de formulario). Aunque otros elementos HTML pueden hacerse enfocables añadiendo tabindex="0", esto puede crear paradas de tabulación molestas y confusas en elementos no interactivos para usuarios de teclado, y la mayoría de las tecnologías de asistencia actualmente no anuncian los tooltips en esta situación. Además, no confíes únicamente en hover como trigger para tus tooltips, ya que esto hará que sea imposible activarlos para 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-auto" 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".

html
<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}'.

El objeto de configuración final es el resultado de combinar data-bs-config, data-bs-, y el objeto js, donde el último par clave-valor dado sobrescribe a los demás.

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
allowList object Valor por defecto An object containing allowed tags and attributes. Those not explicitly allowed will be removed by el sanitizador de contenido.
Ten cuidado al añadir a esta lista. Consulta la Hoja de referencia de prevención de Cross Site Scripting de OWASP para más información.
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. Prefiere texto cuando trabajes con entrada generada por el usuario para prevenir ataques XSS.
offset array, string, function [0, 6] 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 Enable sanitización de contenido. If true, the template, content and title options will be sanitized.
Ten cuidado al deshabilitar la sanitización de contenido. Consulta la Hoja de referencia de prevención de Cross Site Scripting de OWASP para más información. Las vulnerabilidades causadas únicamente por deshabilitar la sanitización de contenido no se consideran dentro del alcance del modelo de seguridad de Bootstrap.
sanitizeFn null, function null Proporciona una función alternativa de sanitización de contenido. 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 '' El título del tooltip. 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 función con popperConfig

const tooltip = new bootstrap.Tooltip(element, {
  popperConfig(defaultBsPopperConfig) {
    // const newPopperConfig = {...}
    // use defaultBsPopperConfig if needed...
    // return newPopperConfig
  }
})

Métodos

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

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 static que te permite obtener la instancia del tooltip asociada a un elemento del DOM.
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' })

El método setContent acepta un argumento object, donde cada clave de propiedad es un selector string válido dentro de la plantilla del tooltip, y cada valor de propiedad relacionado puede ser string | element | function | null

Eventos

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 tooltip ha terminado de ocultarse del 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 tooltip 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()
Traducción mantenida por Esdocu. Visita esdocu.com para ver más documentaciones traducidas.