Tooltips
Documentatie en voorbeelden voor het toevoegen van eigen Bootstrap-tooltips met CSS en JavaScript, met CSS3 voor animaties en data-bs-attributen voor lokale opslag van de titel.
Overzicht
Dingen om te weten bij het gebruik van de tooltip-plugin:
- Tooltips leunen voor de positionering op de externe bibliotheek Popper. Je moet popper.min.js vóór
bootstrap.jsopnemen, of éénbootstrap.bundle.min.jsgebruiken waarin Popper zit. - Tooltips zijn om prestatieredenen opt-in, dus je moet ze zelf initialiseren.
- Tooltips met een titel van lengte nul worden nooit weergegeven.
- Geef
container: 'body'op om weergaveproblemen in complexere componenten (zoals onze input groups, button groups enz.) te voorkomen. - Tooltips activeren op verborgen elementen werkt niet.
- Tooltips voor
.disabled- ofdisabled-elementen moeten via een omhullend element worden geactiveerd. - Wanneer ze vanuit hyperlinks over meerdere regels worden geactiveerd, worden tooltips gecentreerd. Gebruik
white-space: nowrap;op je<a>s om dat gedrag te voorkomen. - Tooltips moeten verborgen zijn voordat de bijbehorende elementen uit de DOM worden verwijderd.
- Tooltips kunnen worden geactiveerd door een element binnen een shadow DOM.
Alles duidelijk? Mooi, laten we met een paar voorbeelden kijken hoe ze werken.
Bootstraps JavaScript reinigt HTML die via opties binnenkomt (bijvoorbeeld de inhoud van een tooltip of popover) met een ingebouwde sanitizer, om het risico op XSS te beperken.
Animaties en overgangen houden rekening met de instelling prefers-reduced-motion. Heeft een bezoeker in het besturingssysteem om minder beweging gevraagd, dan vallen overgangen weg.
Voorbeelden
Tooltips inschakelen
Zoals hierboven vermeld moet je tooltips initialiseren voordat je ze kunt gebruiken. Eén manier om alle tooltips op een pagina te initialiseren is ze via hun data-bs-toggle-attribuut te selecteren, zoals hier:
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))Tooltips op links
Hover over de links hieronder om tooltips te zien:
<p class="muted">Opvultekst om een paar <a href="#" data-bs-toggle="tooltip" data-bs-title="Standaard tooltip">inline links</a> met tooltips te demonstreren. Dit is nu gewoon vulling, niets bijzonders. Content die hier alleen staat om de aanwezigheid van <a href="#" data-bs-toggle="tooltip" data-bs-title="Nog een tooltip">echte tekst</a> na te bootsen. En dat allemaal om je een idee te geven van hoe tooltips eruitzien in praktijksituaties. Hopelijk heb je nu gezien hoe <a href="#" data-bs-toggle="tooltip" data-bs-title="Hier ook nog eentje">deze tooltips op links</a> in de praktijk kunnen werken, zodra je ze op <a href="#" data-bs-toggle="tooltip" data-bs-title="De laatste tip!">je eigen</a> site of project gebruikt.
</p>Gebruik voor dit component altijd data-bs-title in plaats van het gewone title-attribuut: sommige HTML-elementen tonen anders zowel de eigen native tooltip als die van Bootstrap.
Eigen tooltips
Nieuw in v5.2.0
Je kunt het uiterlijk van tooltips aanpassen met CSS-variabelen. We stellen een eigen klasse in met data-bs-custom-class="custom-tooltip" om ons aangepaste uiterlijk af te bakenen, en gebruiken die om een lokale CSS-variabele te overschrijven.
Standaardwaarden: zie site/assets/scss/_component-examples.scss in de Bootstrap-broncode.
<button type="button" class="btn btn-secondary"
data-bs-toggle="tooltip" data-bs-placement="top"
data-bs-custom-class="custom-tooltip"
data-bs-title="Deze tooltip bovenaan is via CSS-variabelen van een thema voorzien.">
Eigen tooltip
</button>Richtingen
Hover over de knoppen hieronder om de vier tooltip-richtingen te zien: boven, rechts, onder en links. De richtingen worden gespiegeld wanneer je Bootstrap in RTL gebruikt.
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="Tooltip bovenaan">
Tooltip bovenaan
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip rechts">
Tooltip rechts
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip onderaan">
Tooltip onderaan
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip links">
Tooltip links
</button>En met eigen HTML toegevoegd:
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>Tooltip</em> <u>met</u> <b>HTML</b>">
Tooltip met HTML
</button>Met een SVG:
CSS
Variabelen
Nieuw in v5.2.0
Als onderdeel van Bootstraps groeiende aanpak met CSS-variabelen gebruiken tooltips nu lokale CSS-variabelen op .tooltip, voor betere aanpassingen in realtime. De waarden voor de CSS-variabelen worden via Sass ingesteld, dus aanpassen via Sass wordt nog steeds ondersteund.
Standaardwaarden: zie scss/_tooltip.scss in de Bootstrap-broncode.
Sass-variabelen
Standaardwaarden: zie scss/_variables.scss in de Bootstrap-broncode.
Gebruik
De tooltip-plugin genereert content en markup op aanvraag, en plaatst tooltips standaard achter hun trigger-element.
Activeer de tooltip via JavaScript:
const exampleEl = document.getElementById('example')
const tooltip = new bootstrap.Tooltip(exampleEl, options)Overflow auto en scroll
De tooltip-positie probeert automatisch te veranderen wanneer een bovenliggende container overflow: auto of overflow: scroll heeft, zoals onze .table-responsive, maar behoudt daarbij wel de oorspronkelijke plaatsing. Om dit op te lossen stel je de boundary-optie in (voor de flip-modifier via de optie popperConfig) op een willekeurig HTMLElement om de standaardwaarde 'clippingParents' te overschrijven, bijvoorbeeld document.body:
Markup
De vereiste markup voor een tooltip is alleen een data-attribuut en een title op het HTML-element dat je een tooltip wilt geven. De gegenereerde markup van een tooltip is vrij eenvoudig, al vereist hij wel een positie (standaard door de plugin op top gezet).
Tooltips laten werken voor gebruikers van toetsenbord en hulptechnologie
Voeg tooltips alleen toe aan HTML-elementen die van oudsher met het toetsenbord te focussen en interactief zijn (zoals links of formulierbesturingselementen). Hoewel willekeurige HTML-elementen (zoals <span>s) focusbaar gemaakt kunnen worden door het attribuut tabindex="0" toe te voegen, levert dat mogelijk irritante en verwarrende tabstops op niet-interactieve elementen op voor toetsenbordgebruikers, en de meeste hulptechnologieën kondigen de tooltip in die situatie momenteel niet aan. Vertrouw daarnaast niet uitsluitend op hover als trigger voor je tooltip, want daarmee wordt je tooltip onbereikbaar voor toetsenbordgebruikers.
<!-- HTML to write -->
<a href="#" data-bs-toggle="tooltip" data-bs-title="Wat tooltip-tekst!">Hover over mij</a>
<!-- Generated markup by the plugin -->
<div class="tooltip bs-tooltip-top" role="tooltip">
<div class="tooltip-arrow"></div>
<div class="tooltip-inner">
Wat tooltip-tekst!
</div>
</div>Uitgeschakelde elementen
Elementen met het disabled-attribuut zijn niet interactief, wat betekent dat gebruikers ze niet kunnen focussen, erover kunnen hoveren of erop kunnen klikken om een tooltip (of popover) te activeren. Als tijdelijke oplossing activeer je de tooltip vanuit een omhullende <div> of <span>, idealiter met tabindex="0" focusbaar gemaakt met het toetsenbord.
<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-title="Uitgeschakelde tooltip">
<button class="btn btn-primary" type="button" disabled>Uitgeschakelde knop</button>
</span>Opties
De meeste plugins kun je aanzetten zonder JavaScript te schrijven, puur met een data-bs-*-attribuut als trigger. Al deze data-attributen zijn genamespaced met bs-, zodat ze niet botsen met andere scripts.
Let op: om veiligheidsredenen kunnen de opties sanitize, sanitizeFn en allowList niet via data-attributen worden meegegeven.
| Naam | Type | Standaard | Omschrijving |
|---|---|---|---|
allowList |
object | Standaardwaarde | Object met toegestane attributen en tags. |
animation |
boolean | true |
Past een CSS-fade-transitie op de tooltip toe. |
boundary |
string, element | 'clippingParents' |
Overflow-begrenzing van de tooltip (geldt alleen voor Poppers preventOverflow-modifier). Standaard is dat 'clippingParents'; het kan een verwijzing naar een HTMLElement accepteren (alleen via JavaScript). Zie voor meer informatie Poppers detectOverflow-documentatie. |
container |
string, element, false | false |
Voegt de tooltip aan een specifiek element toe. Voorbeeld: container: 'body'. Deze optie is vooral handig omdat je de tooltip daarmee in de flow van het document dicht bij het trigger-element kunt positioneren — wat voorkomt dat de tooltip bij het vergroten of verkleinen van het venster van het trigger-element wegdrijft. |
customClass |
string, function | '' |
Voegt klassen aan de tooltip toe wanneer die getoond wordt. Let op: die klassen komen bovenop eventuele klassen in de template. Wil je meerdere klassen toevoegen, scheid ze dan met spaties: 'class-1 class-2'. Je kunt ook een functie meegeven die één string met extra klassenamen teruggeeft. |
delay |
number, object | 0 |
Vertraagt het tonen en verbergen van de tooltip (ms) — geldt niet voor het handmatige triggertype. Bij een getal wordt de vertraging op zowel verbergen als tonen toegepast. De objectstructuur is: delay: { "show": 500, "hide": 100 }. |
fallbackPlacements |
array | ['top', 'right', 'bottom', 'left'] |
Definieer terugvalplaatsingen door een lijst met plaatsingen in een array op te geven (in volgorde van voorkeur). Zie voor meer informatie Poppers gedragsdocumentatie. |
html |
boolean | false |
Staat HTML in de tooltip toe. Bij true worden HTML-tags in de title van de tooltip in de tooltip weergegeven. Bij false wordt de eigenschap innerText gebruikt om content in de DOM te zetten. Gebruik tekst als je je zorgen maakt over XSS-aanvallen. |
offset |
array, string, function | [0, 0] |
Offset van de tooltip ten opzichte van zijn doel. Je kunt in data-attributen een string met door komma's gescheiden waarden meegeven, zoals data-bs-offset="10,20". Wanneer een functie de offset bepaalt, wordt die aangeroepen met als eerste argument een object met de popper-plaatsing, de referentie en de popper-rects. De DOM-node van het trigger-element wordt als tweede argument meegegeven. De functie moet een array met twee getallen teruggeven: skidding, distance. Zie voor meer informatie Poppers offset-documentatie. |
placement |
string, function | 'top' |
Hoe de tooltip gepositioneerd wordt: auto, top, bottom, left, right. Bij auto wordt de tooltip dynamisch geheroriënteerd. Wanneer een functie de plaatsing bepaalt, wordt die aangeroepen met de DOM-node van de tooltip als eerste argument en de DOM-node van het trigger-element als tweede. De this-context wordt op de tooltip-instantie gezet. |
popperConfig |
null, object, function | null |
Zie Poppers configuratie om de standaard Popper-configuratie van Bootstrap te wijzigen. Wanneer een functie de Popper-configuratie maakt, wordt die aangeroepen met een object dat de standaard Popper-configuratie van Bootstrap bevat. Zo kun je die gebruiken en met je eigen configuratie samenvoegen. De functie moet een configuratieobject voor Popper teruggeven. |
sanitize |
boolean | true |
Schakelt de sanitatie in of uit. Als die actief is, worden de opties 'template', 'content' en 'title' gesaneerd. |
sanitizeFn |
null, function | null |
Hier kun je je eigen sanitize-functie meegeven. Dat kan handig zijn als je liever een speciale bibliotheek voor sanitatie gebruikt. |
selector |
string, false | false |
Wanneer er een selector is opgegeven, worden tooltip-objecten aan de opgegeven doelen gedelegeerd. In de praktijk gebruik je dit om tooltips ook op dynamisch toegevoegde DOM-elementen toe te passen (jQuery.on-ondersteuning). Zie dit issue en een verhelderend voorbeeld. Let op: het title-attribuut mag niet als selector gebruikt worden. |
template |
string | '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' |
Basis-HTML die gebruikt wordt bij het maken van de tooltip. De title van de tooltip wordt in de .tooltip-inner geïnjecteerd. .tooltip-arrow wordt het pijltje van de tooltip. Het buitenste omhullende element hoort de klasse .tooltip en role="tooltip" te hebben. |
title |
string, element, function | '' |
Standaard titelwaarde als het title-attribuut ontbreekt. Bij een functie wordt die aangeroepen met de this-referentie gezet op het element waaraan de popover is gekoppeld. |
trigger |
string | 'hover focus' |
Hoe de tooltip wordt geactiveerd: click, hover, focus, manual. Je kunt meerdere triggers meegeven; scheid ze met een spatie. 'manual' geeft aan dat de tooltip programmatisch wordt geactiveerd via de methodes .tooltip('show'), .tooltip('hide') en .tooltip('toggle'); deze waarde kan niet met een andere trigger worden gecombineerd. 'hover' op zichzelf levert tooltips op die niet met het toetsenbord te activeren zijn, en zou alleen gebruikt moeten worden als er alternatieve manieren zijn om dezelfde informatie aan toetsenbordgebruikers over te brengen. |
Data-attributen voor afzonderlijke tooltips
Opties voor afzonderlijke tooltips kun je, zoals hierboven uitgelegd, ook via data-attributen opgeven.
Een functie gebruiken met popperConfig
const tooltip = new bootstrap.Tooltip(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// gebruik defaultBsPopperConfig indien nodig...
// return newPopperConfig
}
})Methodes
Deze methode start een overgang. Roep hem niet opnieuw aan zolang de vorige nog bezig is: dat levert onverwacht gedrag op. Wacht op het bijbehorende gebeurtenis voordat je opnieuw aanroept.
| Methode | Omschrijving |
|---|---|
disable |
Zorgt dat de tooltip van een element niet meer getoond kan worden. De tooltip kan pas weer getoond worden als hij opnieuw wordt ingeschakeld. |
dispose |
Verbergt en vernietigt de tooltip van een element (verwijdert opgeslagen gegevens van het DOM-element). Tooltips die delegatie gebruiken (aangemaakt met de optie selector) kunnen niet afzonderlijk op onderliggende trigger-elementen vernietigd worden. |
enable |
Zorgt dat de tooltip van een element getoond kan worden. Tooltips zijn standaard ingeschakeld. |
getInstance |
Statische methode waarmee je de tooltip-instantie kunt ophalen die bij een DOM-element hoort, of een nieuwe kunt aanmaken als die nog niet was geïnitialiseerd. |
getOrCreateInstance |
Statische methode waarmee je de tooltip-instantie kunt ophalen die bij een DOM-element hoort, of een nieuwe kunt aanmaken als die nog niet was geïnitialiseerd. |
hide |
Verbergt de tooltip van een element. Keert terug naar de aanroeper voordat de tooltip daadwerkelijk verborgen is (dus vóór de gebeurtenis hidden.bs.tooltip). Dit geldt als "handmatig" activeren van de tooltip. |
setContent |
Biedt een manier om de content van de tooltip na initialisatie te wijzigen. |
show |
Toont de tooltip van een element. Keert terug naar de aanroeper voordat de tooltip daadwerkelijk getoond is (dus vóór de gebeurtenis shown.bs.tooltip). Dit geldt als "handmatig" activeren van de tooltip. Tooltips met een titel van lengte nul worden nooit weergegeven. |
toggle |
Schakelt de tooltip van een element. Keert terug naar de aanroeper voordat de tooltip daadwerkelijk getoond of verborgen is (dus vóór de gebeurtenis shown.bs.tooltip of hidden.bs.tooltip). Dit geldt als "handmatig" activeren van de tooltip. |
toggleEnabled |
Schakelt of de tooltip van een element getoond of verborgen kan worden. |
update |
Werkt de positie van de tooltip van een element bij. |
const tooltip = bootstrap.Tooltip.getInstance('#example') // Geeft een Bootstrap-tooltip-instantie terug
// setContent-voorbeeld
tooltip.setContent({ '.tooltip-inner': 'een andere titel' })De methode setContent accepteert een object-argument, waarbij elke property-sleutel een geldige string-selector binnen de popover-template is, en elke bijbehorende property-waarde string | element | function | null kan zijn.
Gebeurtenissen
| Gebeurtenis | Omschrijving |
|---|---|
hide.bs.tooltip |
Deze gebeurtenis wordt direct afgevuurd wanneer de instantiemethode hide is aangeroepen. |
hidden.bs.tooltip |
Deze gebeurtenis wordt afgevuurd wanneer de popover volledig voor de gebruiker verborgen is (wacht tot de CSS-transities voltooid zijn). |
inserted.bs.tooltip |
Deze gebeurtenis wordt na de gebeurtenis show.bs.tooltip afgevuurd, wanneer de tooltip-template aan de DOM is toegevoegd. |
show.bs.tooltip |
Deze gebeurtenis wordt direct afgevuurd wanneer de instantiemethode show wordt aangeroepen. |
shown.bs.tooltip |
Deze gebeurtenis wordt afgevuurd wanneer de popover zichtbaar is gemaakt voor de gebruiker (wacht tot de CSS-transities voltooid zijn). |
const myTooltipEl = document.getElementById('myTooltip')
const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)
myTooltipEl.addEventListener('hidden.bs.tooltip', () => {
// doe iets...
})
tooltip.hide()