Tooltips
Documentación y ejemplos para agregar tooltips de Bootstrap personalizados con CSS y JavaScript utilizando CSS3 para animaciones y data-bs-attributes para el almacenamiento local de títulos.
Resumen
Cosas que debes saber al usar el plugin de tooltip:
- Los tooltips dependen de la biblioteca de terceros Popper para el posicionamiento. Debes incluir popper.min.js antes de
bootstrap.js, o usar unbootstrap.bundle.min.jsque contenga Popper. - Los tooltips son opt-in por razones de rendimiento, por lo 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 (wrapper). - Cuando se activan desde enlaces que se extienden en varias líneas, los tooltips se centrarán. Usa
white-space: nowrap;en tus<a>para evitar este comportamiento. - Los tooltips deben ocultarse antes de que sus elementos correspondientes hayan sido eliminados del DOM.
- Los tooltips se pueden activar gracias a un elemento dentro de un shadow DOM.
¿Entendido todo eso? Genial, veamos cómo funcionan con algunos ejemplos.
Por defecto, este componente utiliza el sanitizador de contenido incorporado, el cual elimina cualquier elemento HTML que no esté explícitamente permitido. Consulta la sección del sanitizador en nuestra documentación de JavaScript para obtener más detalles.
El efecto de animación de este componente depende de la consulta de medios prefers-reduced-motion. Consulta la sección de movimiento reducido en 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 en línea con tooltips. Esto es ahora solo relleno. Contenido colocado aquí solo para imitar la presencia de texto real. 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 these tooltips on links can work in practice, once you use them on your own site or project.
<p class="muted">Texto de marcador de posición para demostrar algunos <a href="#" data-bs-toggle="tooltip" data-bs-title="Tooltip predeterminado">enlaces en línea</a> con tooltips. Esto es ahora solo relleno. Contenido colocado aquí solo para imitar la presencia de <a href="#" data-bs-toggle="tooltip" data-bs-title="Otro tooltip">texto real</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="¡El último consejo!">your own</a> site or project.</p> Siéntete libre de usar tanto title como data-bs-title en tu HTML. Cuando se utiliza title, Popper lo reemplazará automáticamente con data-bs-title cuando el elemento se renderice.
Tooltips personalizados
Agregado 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 usarla para anular una variable CSS local.
.custom-tooltip {
--bs-tooltip-bg: var(--bd-violet-bg);
--bs-tooltip-color: var(--bs-white);
}
<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.">
Tooltip personalizado
</button> Direcciones
Pasa el cursor sobre los botones de abajo para ver las cuatro direcciones de los tooltips: arriba (top), derecha (right), abajo (bottom) e izquierda (left). Las direcciones se reflejan 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 arriba">
Tooltip arriba
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip a la derecha">
Tooltip a la derecha
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip abajo">
Tooltip abajo
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip a la izquierda">
Tooltip a la izquierda
</button>
Y con HTML personalizado agregado:
<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 con HTML
</button>
Con un SVG:
CSS
Variables
Agregado en v5.2.0Como parte del enfoque evolutivo de las variables CSS de Bootstrap, los tooltips ahora usan variables CSS locales en .tooltip para una personalización mejorada en tiempo real. Los valores de las variables CSS se establecen a través de Sass, por lo que la personalización de Sass también es 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 de 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 marcado bajo demanda y, de forma predeterminada, coloca los tooltips después de su elemento activador. Activa el tooltip a través de JavaScript:
const exampleEl = document.getElementById('example')
const tooltip = new bootstrap.Tooltip(exampleEl, options)
Los tooltips intentan cambiar de posición automáticamente cuando un contenedor principal tiene overflow: auto o overflow: scroll, pero conservan la posición original. Establece la opción boundary (para el modificador flip usando la opción popperConfig) en cualquier HTMLElement para anular el valor predeterminado, 'clippingParents', como document.body:
const tooltip = new bootstrap.Tooltip('#example', {
boundary: document.body // or document.querySelector('#boundary')
})
Marcado
El marcado requerido para un tooltip es solo un atributo data y un title en el elemento HTML sobre el que deseas tener un tooltip. El marcado generado de un tooltip es bastante simple, aunque requiere una posición (por defecto, establecida en top por el plugin).
Mantén los tooltips accesibles para los usuarios de teclado y de tecnologías de asistencia agregándolos únicamente a elementos HTML que tradicionalmente son enfocables con el teclado e interactivos (como enlaces o controles de formulario). Si bien otros elementos HTML se pueden hacer enfocables agregando tabindex="0", esto puede crear paradas de tabulación 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 tooltips en esta situación. Además, no confíes únicamente en hover como activador de tus tooltips, ya que esto hará que sea imposible activarlos para los usuarios de teclado.
<!-- HTML to write -->
<a href="#" data-bs-toggle="tooltip" data-bs-title="¡Algo de texto de tooltip!">Pasa el cursor sobre mí</a>
<!-- Generated markup by the plugin -->
<div class="tooltip bs-tooltip-auto" role="tooltip">
<div class="tooltip-arrow"></div>
<div class="tooltip-inner">
¡Algo de texto de tooltip!
</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 sobre ellos ni hacer clic en ellos para activar un tooltip (o popover). Como solución alternativa, querrás activar el tooltip desde un contenedor <div> o <span>, idealmente enfocado con el teclado usando tabindex="0".
<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-title="Tooltip deshabilitado">
<button class="btn btn-primary" type="button" disabled>Botón deshabilitado</button>
</span> Opciones
Como las opciones se pueden pasar a través de atributos de datos 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 mayúsculas y minúsculas del nombre de la opción de “camelCase” a “kebab-case” al pasar las opciones a través de atributos de datos. 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 admiten un atributo de datos 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 de datos separados anularán los valores proporcionados en data-bs-config. Además, los atributos de datos existentes pueden albergar valores JSON como data-bs-delay='{"show":0,"hide":150}'.
El objeto de configuración final es el resultado fusionado de data-bs-config, data-bs- y el js object (objeto js) donde el último par clave-valor proporcionado anula a los demás.
Ten en cuenta que por razones de seguridad las opciones sanitize, sanitizeFn y allowList no se pueden suministrar mediante atributos de datos.
| Nombre | Tipo | Predeterminado | Descripción |
|---|---|---|---|
allowList | object | Valor predeterminado | Un objeto que contiene etiquetas y atributos permitidos. Los que no estén explícitamente permitidos serán eliminados por el sanitizador de contenido. Ten precaución al agregar elementos a esta lista. Consulta la Hoja de trucos para la prevención de Cross Site Scripting de OWASP para obtener más información. |
animation | boolean | true | Aplica una transición de desvanecimiento CSS al tooltip. |
boundary | string, element | 'clippingParents' | Límite de restricción de desbordamiento (overflow constraint boundary) del tooltip (se aplica solo al modificador preventOverflow de Popper). De forma predeterminada, es 'clippingParents' y puede aceptar una referencia de HTMLElement (solo a través de JavaScript). Para obtener 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 colocar el tooltip en el flujo del documento cerca del elemento activador, lo que evitará que el tooltip se aleje del elemento activador durante un cambio de tamaño de la ventana. |
customClass | string, function | '' | Agrega clases al tooltip cuando se muestra. Ten en cuenta que estas clases se agregarán además de las clases especificadas en la plantilla. Para agregar varias clases, sepáralas con espacios: 'class-1 class-2'. También puedes pasar una función que debe devolver una sola cadena que contenga nombres de clases adicionales. |
delay | number, object | 0 | Retraso para mostrar y ocultar el tooltip (ms); no se aplica al tipo de activador manual. Si se suministra un número, el retraso se aplica tanto a ocultar como a mostrar. La estructura del objeto es: delay: { "show": 500, "hide": 100 }. |
fallbackPlacements | array | ['top', 'right', 'bottom', 'left'] | Define ubicaciones de respaldo (fallback placements) proporcionando una lista de ubicaciones en una matriz (en orden de preferencia). Para obtener más información, consulta la documentación de comportamiento de Popper. |
html | boolean | false | Permite HTML en el tooltip. Si es verdadero, las etiquetas HTML en el title del tooltip se renderizarán en el tooltip. Si es falso, se utilizará la propiedad innerText para insertar contenido en el DOM. Prefiere texto cuando manejes entradas generadas por el usuario para prevenir ataques XSS. |
offset | array, string, function | [0, 6] | Desplazamiento (offset) del tooltip relativo a su objetivo. Puedes pasar una cadena en los atributos de datos con valores separados por comas como: data-bs-offset="10,20". Cuando se utiliza una función para determinar el desplazamiento, se llama con un objeto que contiene la ubicación de popper, la referencia y los rectángulos de popper como su primer argumento. El nodo DOM del elemento activador se pasa como segundo argumento. La función debe devolver una matriz con dos números: desplazamiento lateral (skidding), distancia (distance). Para obtener 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 ubicación, se llama con el nodo DOM del tooltip como primer argumento y el nodo DOM del elemento activador 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 la tuya propia. La función debe devolver un objeto de configuración para Popper. |
sanitize | boolean | true | Habilita la sanitización de contenido. Si es verdadero, las opciones template, content y title serán sanitizadas. Ten precaución al deshabilitar la sanitización de contenido. Consulta la Hoja de trucos para la prevención de Cross Site Scripting de OWASP para obtener 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 utilizar una biblioteca 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 utiliza para aplicar también tooltips a elementos DOM agregados dinámicamente (soporte para jQuery.on). Consulta este problema y un ejemplo informativo. Note: 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 utilizar al crear el tooltip. El title del tooltip se inyectará en .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 activa el tooltip: click, hover, focus, manual. Puedes pasar múltiples activadores; sepáralas con un espacio. 'manual' indica que el tooltip se activará mediante programación a través de los métodos .tooltip('show'), .tooltip('hide') y .tooltip('toggle'); este valor no se puede combinar con ningún otro activador. 'hover' por sí solo dará como resultado tooltips que no se pueden activar mediante el teclado, y solo debe usarse si existen métodos alternativos para transmitir la misma información para los usuarios de teclado. |
Atributos de datos para tooltips individuales
Las opciones para tooltips individuales también se pueden especificar mediante el uso de atributos de datos, como se explicó anteriormente.
Uso de 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. Devuelven el control al llamador tan pronto como se inicia la transición, pero antes de que termine. Además, se ignorará cualquier llamada a un método en un componente en transició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 se podrá mostrar si se vuelve a habilitar. |
dispose | Oculta y destruye el tooltip de un elemento (Elimina los datos almacenados en el elemento DOM). Los tooltips que usan delegación (que se crean usando la opción selector) no se pueden destruir individualmente en los elementos activadores descendientes. |
enable | Le da al tooltip de un elemento la capacidad de mostrarse. Los tooltips están habilitados de forma predeterminada. |
getInstance | Método estático que te permite obtener la instancia de tooltip asociada con un elemento DOM. |
getOrCreateInstance | Método estático que te permite obtener la instancia de tooltip asociada con un elemento DOM, o crear una nueva en caso de que no haya sido inicializada. |
hide | Oculta el tooltip de un elemento. Devuelve el control 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 | Ofrece una forma de cambiar el contenido del tooltip después de su inicialización. |
show | Revela el tooltip de un elemento. Devuelve el control 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. Devuelve el control 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') // Devuelve una instancia de tooltip de Bootstrap
// Ejemplo de setContent
tooltip.setContent({ '.tooltip-inner': 'otro título' })
El método setContent acepta un argumento object, donde cada propiedad clave 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 llama 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 agregado 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 para el 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()