Podpowiedzi
Dokumentacja i przykłady dodawania niestandardowych podpowiedzi Bootstrap z CSS i JavaScript przy użyciu CSS3 do animacji i atrybutów data-bs-attributes do lokalnego przechowywania tytułów.
Przegląd
Co należy wiedzieć podczas korzystania z wtyczki podpowiedzi:
- Podpowiedzi do pozycjonowania opierają się na bibliotece Popper innej firmy. Musisz dołączyć popper.min.js przed
bootstrap.js
lub użyć takiegobootstrap.bundle.min.js
, który zawiera Poppera. - Etykietki narzędzi są dostępne ze względu na wydajność, więc musisz je zainicjować samodzielnie .
- Etykietki narzędzi z tytułami o zerowej długości nigdy nie są wyświetlane.
- Określ
container: 'body'
, aby uniknąć problemów z renderowaniem w bardziej złożonych komponentach (takich jak nasze grupy wejściowe, grupy przycisków itp.). - Wyzwalanie podpowiedzi na ukrytych elementach nie będzie działać.
- Etykietki narzędzi dla elementów
.disabled
lubdisabled
muszą być wyzwalane w elemencie opakowania. - Po uruchomieniu z hiperłączy, które obejmują wiele linii, podpowiedzi zostaną wyśrodkowane. Użyj
white-space: nowrap;
na swoim<a>
s, aby uniknąć tego zachowania. - Etykietki narzędzi muszą być ukryte, zanim odpowiadające im elementy zostaną usunięte z DOM.
- Podpowiedzi mogą być wyzwalane dzięki elementowi wewnątrz cienia DOM.
Masz to wszystko? Świetnie, zobaczmy, jak działają na kilku przykładach.
prefers-reduced-motion
zapytania o media. Zobacz
zmniejszoną sekcję ruchu w naszej dokumentacji ułatwień dostępu .
Przykłady
Włącz podpowiedzi
Jak wspomniano powyżej, przed użyciem podpowiedzi należy zainicjować. Jednym ze sposobów na zainicjowanie wszystkich podpowiedzi na stronie byłoby wybranie ich według ich data-bs-toggle
atrybutów, na przykład:
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
Podpowiedzi dotyczące linków
Najedź na poniższe linki, aby zobaczyć podpowiedzi:
Tekst zastępczy przedstawiający niektóre łącza w tekście z podpowiedziami. To jest teraz tylko wypełniacz, nie zabójca. Treść umieszczona tutaj tylko po to, by naśladować obecność prawdziwego tekstu . A wszystko po to, aby dać ci wyobrażenie o tym, jak będą wyglądać podpowiedzi w rzeczywistych sytuacjach. Miejmy więc nadzieję, że wiesz już, jak te podpowiedzi dotyczące linków mogą działać w praktyce, gdy użyjesz ich we własnej witrynie lub projekcie.
<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
lub
data-bs-title
w swoim kodzie HTML. Gdy
title
jest używany, Popper zastąpi go automatycznie,
data-bs-title
gdy element jest renderowany.
Niestandardowe podpowiedzi
Dodano w wersji 5.2.0Wygląd etykietek narzędzi można dostosować za pomocą zmiennych CSS . Ustawiamy niestandardową klasę w data-bs-custom-class="custom-tooltip"
celu określenia zakresu naszego niestandardowego wyglądu i używamy jej do zastąpienia lokalnej zmiennej CSS.
.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>
Wskazówki
Najedź kursorem na poniższe przyciski, aby zobaczyć cztery wskazówki podpowiedzi: góra, prawo, dół i lewo. Kierunki są odzwierciedlane podczas używania Bootstrap w 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>
A z dodanym niestandardowym kodem HTML:
<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>
Z SVG:
CSS
Zmienne
Dodano w wersji 5.2.0W ramach ewoluującego podejścia Bootstrap do zmiennych CSS, podpowiedzi wykorzystują teraz lokalne zmienne CSS w .tooltip
celu udoskonalenia dostosowywania w czasie rzeczywistym. Wartości zmiennych CSS są ustawiane przez Sass, więc dostosowywanie Sass jest nadal obsługiwane.
--#{$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};
Zmienne Sassa
$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
Stosowanie
Wtyczka podpowiedzi generuje treść i znaczniki na żądanie i domyślnie umieszcza podpowiedzi po elemencie wyzwalacza.
Uruchom podpowiedź za pomocą JavaScript:
const exampleEl = document.getElementById('example')
const tooltip = new bootstrap.Tooltip(exampleEl, options)
Przepełnienie auto
iscroll
Pozycja etykietki próbuje automatycznie zmienić się, gdy kontener nadrzędny ma overflow: auto
lub jest overflow: scroll
podobny do naszego .table-responsive
, ale nadal zachowuje oryginalne położenie miejsca docelowego. Aby rozwiązać ten problem, ustaw boundary
opcję (dla modyfikatora odwracania za pomocą popperConfig
opcji) na dowolny element HTMLElement, aby zastąpić wartość domyślną 'clippingParents'
, taką jak document.body
:
const tooltip = new bootstrap.Tooltip('#example', {
boundary: document.body // or document.querySelector('#boundary')
})
Narzut
Wymagane znaczniki podpowiedzi to tylko data
atrybut i title
element HTML, który chcesz mieć podpowiedź. Wygenerowany znacznik podpowiedzi jest dość prosty, chociaż wymaga pozycji (domyślnie ustawionej top
przez wtyczkę).
Tworzenie podpowiedzi dla użytkowników klawiatury i technologii wspomagających
Etykietki narzędzi należy dodawać tylko do elementów HTML, które tradycyjnie można skoncentrować na klawiaturze i które są interaktywne (takie jak łącza lub kontrolki formularzy). Chociaż można skupić się na dowolnych elementach HTML (takich jak <span>
s) przez dodanie tabindex="0"
atrybutu, doda to potencjalnie denerwujące i mylące tabulatory na nieinteraktywnych elementach dla użytkowników klawiatury, a większość technologii wspomagających obecnie nie wyświetla podpowiedzi w tej sytuacji. Ponadto nie należy polegać wyłącznie na hover
wyzwalaczu podpowiedzi, ponieważ uniemożliwi to wyzwolenie podpowiedzi dla użytkowników klawiatury.
<!-- 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>
Elementy niepełnosprawne
Elementy z disabled
atrybutem nie są interaktywne, co oznacza, że użytkownicy nie mogą się na nich skoncentrować, najechać kursorem ani kliknąć ich, aby wywołać podpowiedź (lub popover). Aby obejść ten problem, zechcesz wywołać etykietkę z otoki <div>
lub <span>
, najlepiej, gdy jest to możliwe przy użyciu klawiatury, używając 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>
Opcje
Ponieważ opcje mogą być przekazywane przez atrybuty danych lub JavaScript, możesz dołączyć nazwę opcji do data-bs-
, jak w data-bs-animation="{value}"
. Pamiętaj, aby zmienić typ wielkości liter w nazwie opcji z „ camelCase ” na „ kebab-case ” podczas przekazywania opcji przez atrybuty danych. Na przykład użyj data-bs-custom-class="beautifier"
zamiast data-bs-customClass="beautifier"
.
Od wersji Bootstrap 5.2.0 wszystkie komponenty obsługują eksperymentalny atrybut zarezerwowanych danych data-bs-config
, który może zawierać prostą konfigurację komponentu w postaci ciągu JSON. Gdy element ma atrybuty data-bs-config='{"delay":0, "title":123}'
i data-bs-title="456"
, ostateczną title
wartością będzie, 456
a oddzielne atrybuty danych zastąpią wartości podane w data-bs-config
. Ponadto istniejące atrybuty danych mogą zawierać wartości JSON, takie jak data-bs-delay='{"show":0,"hide":150}'
.
sanitize
,
sanitizeFn
i
allowList
nie można podać przy użyciu atrybutów danych.
Nazwa | Rodzaj | Domyślna | Opis |
---|---|---|---|
allowList |
obiekt | Domyślna wartość | Obiekt zawierający dozwolone atrybuty i tagi. |
animation |
logiczne | true |
Zastosuj zanikające przejście CSS do podpowiedzi. |
boundary |
ciąg, element | 'clippingParents' |
Granica ograniczenia przepełnienia w podpowiedzi (dotyczy tylko modyfikatora PreventOverflow Poppera). Domyślnie jest 'clippingParents' i może akceptować odwołanie HTMLElement (tylko przez JavaScript). Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Poppera detectOverflow . |
container |
ciąg, element, fałsz | false |
Dołącza podpowiedź do określonego elementu. Przykład: container: 'body' . Ta opcja jest szczególnie przydatna, ponieważ pozwala umieścić etykietkę narzędzia w przepływie dokumentu w pobliżu elementu wyzwalającego — co zapobiega oddalaniu się etykiety narzędzia od elementu wyzwalającego podczas zmiany rozmiaru okna. |
customClass |
ciąg, funkcja | '' |
Dodaj klasy do podpowiedzi, gdy jest wyświetlana. Pamiętaj, że te klasy zostaną dodane do wszystkich klas określonych w szablonie. Aby dodać wiele klas, oddziel je spacjami: 'class-1 class-2' . Możesz także przekazać funkcję, która powinna zwrócić pojedynczy ciąg zawierający dodatkowe nazwy klas. |
delay |
numer, obiekt | 0 |
Opóźnienie pokazywania i ukrywania podpowiedzi (ms) – nie dotyczy wyzwalacza ręcznego. Jeśli podano numer, opóźnienie jest stosowane zarówno do ukrywania, jak i pokazywania. Struktura obiektu to: delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
szyk | ['top', 'right', 'bottom', 'left'] |
Zdefiniuj zastępcze miejsca docelowe, podając listę miejsc docelowych w tablicy (w kolejności preferencji). Aby uzyskać więcej informacji, zapoznaj się z dokumentacją dotyczącą zachowania Poppera . |
html |
logiczne | false |
Zezwalaj na HTML w podpowiedzi. Jeśli prawda, znaczniki HTML w podpowiedzi title będą renderowane w podpowiedzi. Jeśli false, innerText właściwość zostanie użyta do wstawienia treści do DOM. Użyj tekstu, jeśli martwisz się atakami XSS. |
offset |
tablica, ciąg, funkcja | [0, 0] |
Przesunięcie podpowiedzi względem celu. Możesz przekazać ciąg w atrybutach danych z wartościami oddzielonymi przecinkami, takimi jak: data-bs-offset="10,20" . Kiedy funkcja jest używana do określenia przesunięcia, jest wywoływana z obiektem zawierającym położenie poppera, referencję i prostokąty poppera jako pierwszy argument. Węzeł DOM elementu wyzwalającego jest przekazywany jako drugi argument. Funkcja musi zwrócić tablicę z dwiema liczbami: poślizg , odległość . Więcej informacji można znaleźć w dokumentacji offsetowej Poppera . |
placement |
ciąg, funkcja | 'top' |
Jak ustawić podpowiedź: auto, góra, dół, lewo, prawo. Gdy auto jest określony, dynamicznie zmieni orientację podpowiedzi. Gdy funkcja jest używana do określenia położenia, jest wywoływana z węzłem DOM podpowiedzi jako pierwszym argumentem i węzłem DOM elementu wyzwalającego jako drugim. Kontekst this jest ustawiony na instancję podpowiedzi. |
popperConfig |
null, obiekt, funkcja | null |
Aby zmienić domyślną konfigurację Poppera Bootstrapa, zobacz Konfiguracja Poppera . Kiedy funkcja jest używana do utworzenia konfiguracji Poppera, jest wywoływana z obiektem, który zawiera domyślną konfigurację Poppera Bootstrapa. Pomaga w używaniu i łączeniu ustawień domyślnych z własną konfiguracją. Funkcja musi zwrócić obiekt konfiguracyjny dla Poppera. |
sanitize |
logiczne | true |
Włącz lub wyłącz sanityzację. 'template' W przypadku aktywacji opcje 'content' zostaną 'title' oczyszczone. |
sanitizeFn |
null, funkcja | null |
Tutaj możesz podać własną funkcję odkażania. Może to być przydatne, jeśli wolisz korzystać z dedykowanej biblioteki do przeprowadzania sanityzacji. |
selector |
ciąg, fałsz | false |
Jeśli podano selektor, obiekty etykietek narzędzi zostaną delegowane do określonych celów. W praktyce służy to również do zastosowania podpowiedzi do dynamicznie dodawanych elementów DOM ( jQuery.on obsługa). Zobacz to wydanie i przykład informacyjny . |
template |
strunowy | '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' |
Podstawowy kod HTML do użycia podczas tworzenia podpowiedzi. Etykietka title zostanie wstrzyknięta do .tooltip-inner . .tooltip-arrow stanie się strzałką w podpowiedzi. Najbardziej zewnętrzny element opakowania powinien mieć .tooltip klasę i role="tooltip" . |
title |
ciąg, element, funkcja | '' |
Domyślna wartość tytułu, jeśli title atrybut nie jest obecny. Jeśli podana zostanie funkcja, zostanie wywołana z this referencją ustawioną na element, do którego dołączony jest popover. |
trigger |
strunowy | 'hover focus' |
Sposób wyzwalania podpowiedzi: kliknięcie, najechanie, skupienie, ręczne. Możesz przekazać wiele wyzwalaczy; oddziel je spacją. 'manual' wskazuje, że etykietka zostanie wywołana programowo za pomocą metod i .tooltip('show') ; tej wartości nie można łączyć z żadnym innym wyzwalaczem. samo w sobie spowoduje wyświetlenie podpowiedzi, których nie można uruchomić za pomocą klawiatury i należy ich używać tylko wtedy, gdy istnieją alternatywne metody przekazywania tych samych informacji użytkownikom klawiatury..tooltip('hide') .tooltip('toggle') 'hover' |
Atrybuty danych dla poszczególnych podpowiedzi
Opcje dla poszczególnych podpowiedzi można alternatywnie określić za pomocą atrybutów danych, jak wyjaśniono powyżej.
Korzystanie z funkcji zpopperConfig
const tooltip = new bootstrap.Tooltip(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Metody
Metody asynchroniczne i przejścia
Wszystkie metody API są asynchroniczne i rozpoczynają przejście . Wracają do rozmówcy zaraz po rozpoczęciu przejścia, ale przed jego zakończeniem . Ponadto wywołanie metody na składniku przechodzącym zostanie zignorowane .
Zobacz naszą dokumentację JavaScript, aby uzyskać więcej informacji .
metoda | Opis |
---|---|
disable |
Usuwa możliwość wyświetlania podpowiedzi elementu. Etykietka będzie widoczna tylko wtedy, gdy zostanie ponownie włączona. |
dispose |
Ukrywa i niszczy podpowiedź elementu (usuwa dane zapisane w elemencie DOM). Etykietki narzędzi korzystające z delegowania (utworzone za pomocą opcji selector ) nie mogą być indywidualnie niszczone w elementach podrzędnych wyzwalaczy. |
enable |
Daje opisowi elementu możliwość pokazania. Etykietki narzędzi są domyślnie włączone. |
getInstance |
Metoda statyczna , która pozwala uzyskać instancję podpowiedzi skojarzoną z elementem DOM lub utworzyć nową w przypadku, gdy nie została zainicjowana. |
getOrCreateInstance |
Metoda statyczna , która pozwala uzyskać instancję podpowiedzi skojarzoną z elementem DOM lub utworzyć nową w przypadku, gdy nie została zainicjowana. |
hide |
Ukrywa podpowiedź elementu. Wraca do wywołującego, zanim podpowiedź została faktycznie ukryta (tj. przed hidden.bs.tooltip wystąpieniem zdarzenia). Jest to uważane za „ręczne” wyzwalanie podpowiedzi. |
setContent |
Umożliwia zmianę zawartości podpowiedzi po jej zainicjowaniu. |
show |
Odsłania opis elementu. Wraca do wywołującego przed wyświetleniem podpowiedzi (tj. przed shown.bs.tooltip wystąpieniem zdarzenia). Jest to uważane za „ręczne” wyzwalanie podpowiedzi. Etykietki narzędzi z tytułami o zerowej długości nigdy nie są wyświetlane. |
toggle |
Przełącza podpowiedź elementu. Powraca do wywołującego, zanim podpowiedź została faktycznie pokazana lub ukryta (tj. przed wystąpieniem zdarzenia shown.bs.tooltip lub ). hidden.bs.tooltip Jest to uważane za „ręczne” wyzwalanie podpowiedzi. |
toggleEnabled |
Przełącza możliwość pokazywania lub ukrywania podpowiedzi elementu. |
update |
Aktualizuje pozycję podpowiedzi elementu. |
const tooltip = bootstrap.Tooltip.getInstance('#example') // Returns a Bootstrap tooltip instance
// setContent example
tooltip.setContent({ '.tooltip-inner': 'another title' })
setContent
akceptuje
object
argument, w którym każdy klucz właściwości jest prawidłowym
string
selektorem w szablonie popover, a każda powiązana wartość właściwości może być
string
|
element
|
function
|
null
Wydarzenia
Wydarzenie | Opis |
---|---|
hide.bs.tooltip |
To zdarzenie jest wywoływane natychmiast po hide wywołaniu metody wystąpienia. |
hidden.bs.tooltip |
To zdarzenie jest uruchamiane po zakończeniu ukrywania popovera przed użytkownikiem (poczeka na zakończenie przejścia CSS). |
inserted.bs.tooltip |
To zdarzenie jest uruchamiane po show.bs.tooltip zdarzeniu, gdy szablon podpowiedzi został dodany do DOM. |
show.bs.tooltip |
To zdarzenie jest wyzwalane natychmiast po show wywołaniu metody wystąpienia. |
shown.bs.tooltip |
To zdarzenie jest uruchamiane, gdy popover jest widoczny dla użytkownika (poczeka na zakończenie przejścia CSS). |
const myTooltipEl = document.getElementById('myTooltip')
const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)
myTooltipEl.addEventListener('hidden.bs.tooltip', () => {
// do something...
})
tooltip.hide()