Przejdź do głównej zawartości Przejdź do nawigacji w dokumentach
in English

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 zewnętrznej bibliotece Popper . Musisz dołączyć popper.min.js przed bootstrap.js lub użyć bootstrap.bundle.min.js/ bootstrap.bundle.jsktóry zawiera Poppera, aby podpowiedzi działały!
  • 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 .disabledlub disabledmuszą 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.
Domyślnie ten składnik używa wbudowanego narzędzia do oczyszczania treści, które usuwa wszystkie elementy HTML, które nie są wyraźnie dozwolone. Zobacz sekcję odkażania w naszej dokumentacji JavaScript, aby uzyskać więcej informacji.
Efekt animacji tego komponentu zależy od prefers-reduced-motionzapytania o media. Zobacz zmniejszoną sekcję ruchu w naszej dokumentacji ułatwień dostępu .

Masz to wszystko? Świetnie, zobaczmy, jak działają na kilku przykładach.

Przykład: Włącz podpowiedzi wszędzie

Jednym ze sposobów na zainicjowanie wszystkich podpowiedzi na stronie byłoby wybranie ich według ich data-bs-toggleatrybutów:

var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
  return new bootstrap.Tooltip(tooltipTriggerEl)
})

Przykłady

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 używane 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.

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" title="Tooltip on top">
  Tooltip on top
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" title="Tooltip on right">
  Tooltip on right
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tooltip on bottom">
  Tooltip on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" 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" title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
  Tooltip with HTML
</button>

Z SVG:

Sass

Zmienne

$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:                    0;

$tooltip-arrow-width:               .8rem;
$tooltip-arrow-height:              .4rem;
$tooltip-arrow-color:               $tooltip-bg;

Stosowanie

Wtyczka podpowiedzi generuje treść i znaczniki na żądanie i domyślnie umieszcza podpowiedzi po elemencie wyzwalającym.

Uruchom podpowiedź za pomocą JavaScript:

var exampleEl = document.getElementById('example')
var tooltip = new bootstrap.Tooltip(exampleEl, options)
Przepełnienie autoiscroll

Pozycja etykietki próbuje automatycznie zmienić się, gdy kontener nadrzędny ma overflow: autolub jest overflow: scrollpodobny do naszego .table-responsive, ale nadal zachowuje oryginalne położenie miejsca docelowego. Aby rozwiązać ten problem, ustaw boundaryopcję (dla modyfikatora odwracania za pomocą popperConfigopcji) na dowolny element HTMLElement, aby zastąpić wartość domyślną 'clippingParents', taką jak document.body:

var exampleEl = document.getElementById('example')
var tooltip = new bootstrap.Tooltip(exampleEl, {
  boundary: document.body // or document.querySelector('#boundary')
})

Narzut

Wymagane znaczniki podpowiedzi to tylko dataatrybut i titleelement HTML, który chcesz mieć podpowiedź. Wygenerowany znacznik podpowiedzi jest dość prosty, chociaż wymaga pozycji (domyślnie ustawionej topprzez 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 ustawić ostrość na dowolnych elementach HTML (takich jak <span>s), dodając tabindex="0"atrybut, 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 polegaj wyłącznie na hoverwyzwalaczu podpowiedzi, ponieważ uniemożliwi to wyzwalanie podpowiedzi dla użytkowników klawiatury.

<!-- HTML to write -->
<a href="#" data-bs-toggle="tooltip" 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 disabledatrybutem 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" title="Disabled tooltip">
  <button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>

Opcje

Opcje można przekazywać za pomocą atrybutów danych lub kodu JavaScript. W przypadku atrybutów danych dołącz nazwę opcji do data-bs-, jak w data-bs-animation="". 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 zamiast używać data-bs-customClass="beautifier", użyj data-bs-custom-class="beautifier".

Należy zauważyć, że ze względów bezpieczeństwa opcji sanitize, sanitizeFni allowListnie można podać przy użyciu atrybutów danych.
Nazwa Rodzaj Domyślna Opis
animation logiczne true Zastosuj zanikające przejście CSS do podpowiedzi
container ciąg | element | fałszywy 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.

delay numer | obiekt 0

Opóźnienie pokazywania i ukrywania podpowiedzi (ms) – nie dotyczy wyzwalania 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 }

html logiczne false

Zezwalaj na HTML w podpowiedzi.

Jeśli prawda, znaczniki HTML w podpowiedzi titlebędą renderowane w podpowiedzi. Jeśli false, innerTextwłaściwość zostanie użyta do wstawienia treści do DOM.

Użyj tekstu, jeśli martwisz się atakami XSS.

placement ciąg | funkcjonować 'top'

Jak ustawić podpowiedź - auto | góra | dół | lewo | prawo.
Gdy autozostanie 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 thisjest ustawiony na instancję podpowiedzi.

selector ciąg | fałszywy 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.onobsługa). Zobacz to 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 titlezostanie wstrzyknięta do .tooltip-inner.

.tooltip-arrowstanie się strzałką w podpowiedzi.

Najbardziej zewnętrzny element opakowania powinien mieć .tooltipklasę i role="tooltip".

title ciąg | element | funkcjonować ''

Domyślna wartość tytułu, jeśli titleatrybut nie jest obecny.

Jeśli podana zostanie funkcja, zostanie wywołana z thisreferencją ustawioną na element, do którego dołączona jest podpowiedź.

trigger strunowy 'hover focus'

Jak uruchamia się podpowiedź - kliknij | najedź | skupić | podręcznik. Możesz przekazać wiele wyzwalaczy; oddziel je spacją.

'manual'wskazuje, że etykietka zostanie wywołana programowo za pomocą metod i .show(); tej wartości nie można łączyć z żadnym innym wyzwalaczem..hide().toggle()

'hover'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.

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
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 .
customClass ciąg | funkcjonować ''

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.

sanitize logiczne true Włącz lub wyłącz sanityzację. Jeśli zostanie aktywowany 'template', 'title'opcje zostaną oczyszczone. Zobacz sekcję odkażania w naszej dokumentacji JavaScript .
allowList obiekt Domyślna wartość Obiekt zawierający dozwolone atrybuty i tagi
sanitizeFn null | funkcjonować 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.
offset tablica | ciąg | funkcjonować [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: .[skidding, distance]

Więcej informacji można znaleźć w dokumentacji offsetowej Poppera .

popperConfig null | obiekt | funkcjonować 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.

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

var tooltip = new bootstrap.Tooltip(element, {
  popperConfig: function (defaultBsPopperConfig) {
    // var 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 .

pokazać

Odsłania opis elementu. Wraca do wywołującego przed wyświetleniem podpowiedzi (tj. przed shown.bs.tooltipwystą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.

tooltip.show()

ukryć

Ukrywa podpowiedź elementu. Wraca do wywołującego, zanim podpowiedź została faktycznie ukryta (tj. przed hidden.bs.tooltipwystąpieniem zdarzenia). Jest to uważane za „ręczne” wyzwalanie podpowiedzi.

tooltip.hide()

przełącznik

Przełącza podpowiedź elementu. Powraca do wywołującego, zanim podpowiedź została faktycznie pokazana lub ukryta (tj. przed wystąpieniem zdarzenia shown.bs.tooltiplub ). hidden.bs.tooltipJest to uważane za „ręczne” wyzwalanie podpowiedzi.

tooltip.toggle()

dysponować

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.

tooltip.dispose()

włączać

Daje opisowi elementu możliwość pokazania. Etykietki narzędzi są domyślnie włączone.

tooltip.enable()

wyłączyć

Usuwa możliwość wyświetlania podpowiedzi elementu. Etykietka będzie widoczna tylko wtedy, gdy zostanie ponownie włączona.

tooltip.disable()

przełącz Włączone

Przełącza możliwość pokazywania lub ukrywania podpowiedzi elementu.

tooltip.toggleEnabled()

aktualizacja

Aktualizuje pozycję podpowiedzi elementu.

tooltip.update()

uzyskac instancje

Metoda statyczna , która pozwala uzyskać instancję podpowiedzi skojarzoną z elementem DOM

var exampleTriggerEl = document.getElementById('example')
var tooltip = bootstrap.Tooltip.getInstance(exampleTriggerEl) // Returns a Bootstrap tooltip instance

getOrCreateInstance

Metoda statyczna , która pozwala uzyskać instancję podpowiedzi skojarzoną z elementem DOM lub utworzyć nową w przypadku, gdy nie została zainicjowana

var exampleTriggerEl = document.getElementById('example')
var tooltip = bootstrap.Tooltip.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap tooltip instance

Wydarzenia

Typ wydarzenia Opis
show.bs.tooltip To zdarzenie jest wyzwalane natychmiast po showwywołaniu metody wystąpienia.
shown.bs.tooltip To zdarzenie jest wywoływane, gdy etykietka narzędzi jest widoczna dla użytkownika (poczeka na zakończenie przejścia CSS).
hide.bs.tooltip To zdarzenie jest wywoływane natychmiast po hidewywołaniu metody wystąpienia.
hidden.bs.tooltip To zdarzenie jest wywoływane po zakończeniu ukrywania podpowiedzi przed użytkownikiem (poczeka na zakończenie przejścia CSS).
inserted.bs.tooltip To zdarzenie jest uruchamiane po show.bs.tooltipzdarzeniu, gdy szablon podpowiedzi został dodany do DOM.
var myTooltipEl = document.getElementById('myTooltip')
var tooltip = new bootstrap.Tooltip(myTooltipEl)

myTooltipEl.addEventListener('hidden.bs.tooltip', function () {
  // do something...
})

tooltip.hide()