Popovery
Dokumentacja i przykłady dodawania wyskakujących okienek Bootstrap, takich jak te znalezione w iOS, do dowolnego elementu w witrynie.
Przegląd
Co należy wiedzieć podczas korzystania z wtyczki popover:
- Popovery polegają na zewnętrznej bibliotece Popper do pozycjonowania. Musisz dołączyć popper.min.js przed bootstrap.js lub użyć
bootstrap.bundle.min.js
/bootstrap.bundle.js
który zawiera Poppera, aby popovery działały! - Popovery wymagają wtyczki podpowiedzi jako zależności.
- Popovery są włączane ze względu na wydajność, więc musisz je zainicjować samodzielnie .
- Zerowa długość
title
icontent
wartości nigdy nie pokażą popovera. - 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 okienek popover na ukrytych elementach nie będzie działać.
- Wyskakujące okienka dla
.disabled
lubdisabled
elementy muszą być wyzwalane na elemencie opakowania. - Po uruchomieniu z kotwic, które zawijają się w wielu liniach, popovery będą wyśrodkowane między całkowitą szerokością kotwic. Użyj
.text-nowrap
na swoim<a>
s, aby uniknąć tego zachowania. - Popovery muszą być ukryte, zanim odpowiadające im elementy zostaną usunięte z DOM.
- Popovery mogą być wyzwalane dzięki elementowi wewnątrz cienia DOM.
prefers-reduced-motion
zapytania o media. Zobacz
zmniejszoną sekcję ruchu w naszej dokumentacji ułatwień dostępu .
Czytaj dalej, aby zobaczyć, jak działają popovery na kilku przykładach.
Przykład: Włącz popovery wszędzie
Jednym ze sposobów na zainicjowanie wszystkich okienek popover na stronie byłoby wybranie ich według ich data-bs-toggle
atrybutów:
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
})
Przykład: Korzystanie z container
opcji
Jeśli masz jakieś style w elemencie nadrzędnym, które kolidują z popoverem, będziesz chciał określić niestandardowy container
, aby zamiast tego pojawiał się kod HTML popovera w tym elemencie.
var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
container: 'body'
})
Przykład
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
Cztery kierunki
Dostępne są cztery opcje: wyrównanie do góry, do prawej, do dołu i do lewej. Kierunki są odzwierciedlane podczas używania Bootstrap w RTL.
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
Popover on top
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
Popover on right
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
Popover on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
Popover on left
</button>
Odrzuć przy następnym kliknięciu
Użyj focus
wyzwalacza, aby odrzucić okienka popover przy następnym kliknięciu przez użytkownika innego elementu niż element przełączania.
Konkretne znaczniki wymagane do odrzucenia przy następnym kliknięciu
Aby zapewnić prawidłowe działanie w różnych przeglądarkach i platformach, należy użyć <a>
tagu, a nie<button>
tagu, a także dołączyć tabindex
atrybut.
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
var popover = new bootstrap.Popover(document.querySelector('.popover-dismiss'), {
trigger: 'focus'
})
Elementy niepełnosprawne
Elementy z disabled
atrybutem nie są interaktywne, co oznacza, że użytkownicy nie mogą na nich najeżdżać ani klikać, aby wywołać okienko wyskakujące (lub podpowiedź). Aby obejść ten problem, będziesz chciał wywoływać popover z otoki <div>
lub <span>
, najlepiej, gdy jest to możliwe przy użyciu klawiatury, używając tabindex="0"
.
W przypadku wyłączonych wyzwalaczy okienek popover możesz również preferować data-bs-trigger="hover focus"
wyświetlanie okienka popover jako natychmiastowej wizualnej informacji zwrotnej dla użytkowników, ponieważ mogą oni nie oczekiwać kliknięcia wyłączonego elementu.
<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>
Sass
Zmienne
$popover-font-size: $font-size-sm;
$popover-bg: $white;
$popover-max-width: 276px;
$popover-border-width: $border-width;
$popover-border-color: rgba($black, .2);
$popover-border-radius: $border-radius-lg;
$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow: $box-shadow;
$popover-header-bg: shade-color($popover-bg, 6%);
$popover-header-color: $headings-color;
$popover-header-padding-y: .5rem;
$popover-header-padding-x: $spacer;
$popover-body-color: $body-color;
$popover-body-padding-y: $spacer;
$popover-body-padding-x: $spacer;
$popover-arrow-width: 1rem;
$popover-arrow-height: .5rem;
$popover-arrow-color: $popover-bg;
$popover-arrow-outer-color: fade-in($popover-border-color, .05);
Stosowanie
Włącz popovery przez JavaScript:
var exampleEl = document.getElementById('example')
var popover = new bootstrap.Popover(exampleEl, options)
Sprawianie, że popovery działają dla użytkowników klawiatury i technologii wspomagających
Aby umożliwić użytkownikom klawiatury aktywowanie okienek popover, należy dodawać je tylko do elementów HTML, które tradycyjnie dają się skoncentrować na klawiaturze i które są interaktywne (takich 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 ogłasza zawartości popover w tej sytuacji . Ponadto nie należy polegać wyłącznie na hover
wyzwalaczu popoverów, ponieważ uniemożliwi to ich wyzwalanie użytkownikom klawiatury.
Chociaż możesz wstawiać sformatowany, ustrukturyzowany kod HTML w popoverach za pomocą tej html
opcji, zdecydowanie zalecamy unikanie dodawania nadmiernej ilości treści. Sposób, w jaki obecnie działają popovery, polega na tym, że po wyświetleniu ich zawartość jest powiązana z elementem wyzwalającym z aria-describedby
atrybutem. W rezultacie cała zawartość popovera zostanie ogłoszona użytkownikom technologii wspomagających jako jeden długi, nieprzerwany strumień.
Dodatkowo, chociaż możliwe jest również uwzględnienie interaktywnych kontrolek (takich jak elementy formularzy lub linki) w popoverze (poprzez dodanie tych elementów do allowList
dozwolonych atrybutów i tagów), należy pamiętać, że obecnie popover nie zarządza kolejnością fokusów klawiatury. Gdy użytkownik klawiatury otworzy okienko popover, fokus pozostaje na elemencie wyzwalającym, a ponieważ okienko popover zwykle nie następuje bezpośrednio za wyzwalaczem w strukturze dokumentu, nie ma gwarancji, że przejście do przodu/naciśnięcieTABprzeniesie użytkownika klawiatury do samego popovera. Krótko mówiąc, zwykłe dodanie interaktywnych kontrolek do popovera może sprawić, że te kontrolki będą nieosiągalne/nieużyteczne dla użytkowników klawiatury i użytkowników technologii wspomagających, lub przynajmniej spowoduje nielogiczną ogólną kolejność fokusów. W takich przypadkach rozważ użycie modalnego okna dialogowego.
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"
.
sanitize
,
sanitizeFn
i
allowList
nie można podać przy użyciu atrybutów danych.
Nazwa | Rodzaj | Domyślna | Opis |
---|---|---|---|
animation |
logiczne | true |
Zastosuj zanikające przejście CSS do popover |
container |
ciąg | element | fałszywy | false |
Dołącza popover do określonego elementu. Przykład: |
content |
ciąg | element | funkcjonować | '' |
Domyślna wartość treści, jeśli Jeśli podana zostanie funkcja, zostanie wywołana z |
delay |
numer | obiekt | 0 |
Opóźnienie pokazywania i ukrywania popovera (ms) - nie dotyczy wyzwalania ręcznego Jeśli podano numer, opóźnienie jest stosowane zarówno do ukrywania, jak i pokazywania Struktura obiektu to: |
html |
logiczne | false |
Wstaw kod HTML do popovera. 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. |
placement |
ciąg | funkcjonować | 'right' |
Jak ustawić popover - auto | góra | dół | lewo | prawo. Gdy funkcja jest używana do określenia położenia, jest wywoływana z węzłem DOM popover jako pierwszym argumentem i węzłem DOM elementu wyzwalającego jako drugim. Kontekst |
selector |
ciąg | fałszywy | false |
Jeśli podano selektor, obiekty popover zostaną delegowane do określonych celów. W praktyce jest to używane, aby umożliwić dynamicznej zawartości HTML dodawanie okienek popover. Zobacz to i przykład informacyjny . |
template |
strunowy | '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>' |
Podstawowy kod HTML do użycia podczas tworzenia popovera. Popover Popover
Najbardziej zewnętrzny element opakowania powinien mieć |
title |
ciąg | element | funkcjonować | '' |
Domyślna wartość tytułu, jeśli Jeśli podana zostanie funkcja, zostanie wywołana z |
trigger |
strunowy | 'click' |
Jak uruchamia się popover - kliknij | najedź | skupić | podręcznik. Możesz przekazać wiele wyzwalaczy; oddziel je spacją. manual nie można łączyć z żadnym innym wyzwalaczem. |
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 popovera (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 wyskakującego okienka, gdy jest on wyświetlany. Pamiętaj, że te klasy zostaną dodane do wszystkich klas określonych w szablonie. Aby dodać wiele klas, oddziel je spacjami: 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ę. 'template' W przypadku aktywacji opcje 'content' zostaną 'title' 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, 8] |
Przesunięcie popovera względem jego celu. Możesz przekazać ciąg w atrybutach danych z wartościami oddzielonymi przecinkami, takimi jak: 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: . 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 okienek popover
Opcje dla poszczególnych okienek popover można alternatywnie określić za pomocą atrybutów danych, jak wyjaśniono powyżej.
Korzystanie z funkcji zpopperConfig
var popover = new bootstrap.Popover(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ć
Ujawnia popover elementu. Wraca do dzwoniącego przed faktycznym wyświetleniem popovera (tj. przed shown.bs.popover
wystąpieniem zdarzenia). Jest to uważane za „ręczne” wyzwalanie popover. Popovery, których tytuł i treść mają zerową długość, nigdy nie są wyświetlane.
myPopover.show()
ukryć
Ukrywa popover elementu. Powraca do dzwoniącego, zanim popover został faktycznie ukryty (tj. przed hidden.bs.popover
wystąpieniem zdarzenia). Jest to uważane za „ręczne” wyzwalanie popover.
myPopover.hide()
przełącznik
Przełącza popover elementu. Powraca do dzwoniącego, zanim popover został faktycznie wyświetlony lub ukryty (tj. przed wystąpieniem zdarzenia shown.bs.popover
lub ). hidden.bs.popover
Jest to uważane za „ręczne” wyzwalanie popover.
myPopover.toggle()
dysponować
Ukrywa i niszczy popover elementu (usuwa dane zapisane w elemencie DOM). Popovery korzystające z delegowania (utworzone za pomocą opcji selector
) nie mogą być indywidualnie niszczone w potomnych elementach wyzwalających.
myPopover.dispose()
włączać
Daje możliwość pokazania popoverowi elementu. Popovery są domyślnie włączone.
myPopover.enable()
wyłączyć
Usuwa możliwość wyświetlania popovera elementu. Popover będzie można wyświetlić tylko wtedy, gdy zostanie ponownie włączony.
myPopover.disable()
toggleEnabled
Przełącza możliwość pokazywania lub ukrywania popover elementu.
myPopover.toggleEnabled()
aktualizacja
Aktualizuje pozycję popovera elementu.
myPopover.update()
uzyskac instancje
Metoda statyczna , która pozwala uzyskać instancję popover skojarzoną z elementem DOM
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
getOrCreateInstance
Metoda statyczna , która pozwala uzyskać instancję popover skojarzoną z elementem DOM lub utworzyć nową w przypadku, gdy nie została zainicjowana
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
Wydarzenia
Typ wydarzenia | Opis |
---|---|
pokaż.bs.popover | To zdarzenie jest wyzwalane natychmiast po show wywołaniu metody wystąpienia. |
pokazano.bs.popover | To zdarzenie jest uruchamiane, gdy popover jest widoczny dla użytkownika (poczeka na zakończenie przejścia CSS). |
ukryj.bs.popover | To zdarzenie jest wywoływane natychmiast po hide wywołaniu metody wystąpienia. |
ukryta.bs.popover | To zdarzenie jest uruchamiane po zakończeniu ukrywania popovera przed użytkownikiem (poczeka na zakończenie przejścia CSS). |
wstawiony.bs.popover | To zdarzenie jest uruchamiane po show.bs.popover zdarzeniu, gdy szablon popover został dodany do DOM. |
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
// do something...
})