Преминете към основното съдържание Преминете към навигацията с документи
Check
in English

Попови

Документация и примери за добавяне на изскачащи елементи на Bootstrap, като тези в iOS, към всеки елемент на вашия сайт.

Преглед

Неща, които трябва да знаете, когато използвате popover плъгина:

  • Popovers разчитат на библиотеката на трета страна Popper за позициониране. Трябва да включите popper.min.js преди bootstrap.jsили да използвате такъв bootstrap.bundle.min.js, който съдържа Popper.
  • Popovers изискват плъгина popover като зависимост.
  • Popovers са включени поради причини, свързани с производителността, така че трябва да ги инициализирате сами .
  • Нулевата дължина titleи contentстойностите никога няма да показват изскачане.
  • Посочете container: 'body', за да избегнете проблеми с рендирането в по-сложни компоненти (като нашите входни групи, групи бутони и т.н.).
  • Задействането на изскачащи съобщения върху скрити елементи няма да работи.
  • Изскачащи съобщения за .disabledили disabledелементи трябва да се задействат върху обвиващ елемент.
  • Когато се задействат от анкери, които преминават през множество линии, изскачащите екрани ще бъдат центрирани между общата ширина на котвите. Използвайте .text-nowrapна вашия <a>s, за да избегнете това поведение.
  • Popovers трябва да бъдат скрити, преди съответните им елементи да бъдат премахнати от DOM.
  • Popovers могат да бъдат задействани благодарение на елемент в DOM в сянка.
По подразбиране този компонент използва вградения дезинфектант на съдържание, който премахва всички HTML елементи, които не са изрично разрешени. Вижте раздела за дезинфектанти в нашата JavaScript документация за повече подробности.
Анимационният ефект на този компонент зависи от prefers-reduced-motionмедийната заявка. Вижте раздела за намалено движение в нашата документация за достъпност .

Продължете да четете, за да видите как работят изскачащите екрани с някои примери.

Примери

Активиране на изскачащи прозорци

Както бе споменато по-горе, трябва да инициализирате изскачащи съобщения, преди да могат да бъдат използвани. Един от начините за инициализиране на всички изскачащи прозорци на страница е да ги изберете по техния data-bs-toggleатрибут, така:

const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))

Демо на живо

Използваме JavaScript, подобен на горния фрагмент, за да изобразим следния изскачащ прозорец на живо. Заглавията се задават чрез , data-bs-titleа основното съдържание се задава чрез data-bs-content.

Чувствайте се свободни да използвате titleили data-bs-titleвъв вашия HTML. Когато titleсе използва, Popper ще го замени автоматично с data-bs-title, когато елементът се визуализира.
html
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" data-bs-title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>

Четири посоки

Налични са четири опции: отгоре, отдясно, отдолу и отляво. Упътванията се отразяват, когато използвате Bootstrap в RTL. Задайте data-bs-placementпромяна на посоката.

html
<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>

Персонализиранcontainer

Когато имате някои стилове на родителски елемент, които пречат на изскачащ прозорец, ще искате да посочите персонализиран container, така че HTML на изскачащия елемент да се показва вместо това в този елемент. Това е често срещано при адаптивни таблици, входни групи и други подобни.

const popover = new bootstrap.Popover('.example-popover', {
  container: 'body'
})

Друга ситуация, в която ще искате да зададете изрично персонализиране container, са изскачащите окни в модален диалогов прозорец , за да сте сигурни, че самият изскачащ прозорец е добавен към модала. Това е особено важно за изскачащи елементи, които съдържат интерактивни елементи – модалните диалози ще задържат фокуса, така че освен ако изскачащият прозорец не е дъщерен елемент на модала, потребителите няма да могат да фокусират или активират тези интерактивни елементи.

const popover = new bootstrap.Popover('.example-popover', {
  container: '.modal-body'
})

Персонализирани изскачащи изображения

Добавен във v5.2.0

Можете да персонализирате външния вид на изскачащите екрани с помощта на CSS променливи . Ние задаваме персонализиран клас, за data-bs-custom-class="custom-popover"да обхванем нашия персонализиран външен вид и да го използваме, за да заменим някои от локалните CSS променливи.

.custom-popover {
  --bs-popover-max-width: 200px;
  --bs-popover-border-color: var(--bs-primary);
  --bs-popover-header-bg: var(--bs-primary);
  --bs-popover-header-color: var(--bs-white);
  --bs-popover-body-padding-x: 1rem;
  --bs-popover-body-padding-y: .5rem;
}
html
<button type="button" class="btn btn-secondary"
        data-bs-toggle="popover" data-bs-placement="right"
        data-bs-custom-class="custom-popover"
        data-bs-title="Custom popover"
        data-bs-content="This popover is themed via CSS variables.">
  Custom popover
</button>

Отхвърляне при следващо щракване

Използвайте focusтригера, за да отхвърлите изскачащи съобщения при следващото щракване на потребителя върху елемент, различен от превключващия елемент.

Изисква се специфично маркиране за отхвърляне при следващо щракване

За правилното поведение между различни браузъри и различни платформи трябва да използвате <a>маркера, а не маркера <button>, и също трябва да включите tabindexатрибут.

html
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
const popover = new bootstrap.Popover('.popover-dismiss', {
  trigger: 'focus'
})

Деактивирани елементи

Елементите с disabledатрибута не са интерактивни, което означава, че потребителите не могат да задържат курсора или да щракнат върху тях, за да задействат изскачащ прозорец (или подсказка). Като заобиколно решение ще искате да задействате popover от обвивка <div>или <span>, в идеалния случай направена с възможност за фокусиране от клавиатурата, като използвате tabindex="0".

За забранени изскачащи тригери може също да предпочетете data-bs-trigger="hover focus"изскачащия прозорец да се показва като незабавна визуална обратна връзка за вашите потребители, тъй като те може да не очакват да щракнат върху деактивиран елемент.

html
<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>

CSS

Променливи

Добавен във v5.2.0

Като част от развиващия се подход на Bootstrap към CSS променливите, изскачащите вече използват локални CSS променливи .popoverза подобрено персонализиране в реално време. Стойностите за CSS променливите се задават чрез Sass, така че персонализирането на Sass все още се поддържа.

  --#{$prefix}popover-zindex: #{$zindex-popover};
  --#{$prefix}popover-max-width: #{$popover-max-width};
  @include rfs($popover-font-size, --#{$prefix}popover-font-size);
  --#{$prefix}popover-bg: #{$popover-bg};
  --#{$prefix}popover-border-width: #{$popover-border-width};
  --#{$prefix}popover-border-color: #{$popover-border-color};
  --#{$prefix}popover-border-radius: #{$popover-border-radius};
  --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};
  --#{$prefix}popover-box-shadow: #{$popover-box-shadow};
  --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};
  --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};
  @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);
  --#{$prefix}popover-header-color: #{$popover-header-color};
  --#{$prefix}popover-header-bg: #{$popover-header-bg};
  --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};
  --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};
  --#{$prefix}popover-body-color: #{$popover-body-color};
  --#{$prefix}popover-arrow-width: #{$popover-arrow-width};
  --#{$prefix}popover-arrow-height: #{$popover-arrow-height};
  --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);
  

Sass променливи

$popover-font-size:                 $font-size-sm;
$popover-bg:                        $white;
$popover-max-width:                 276px;
$popover-border-width:              $border-width;
$popover-border-color:              var(--#{$prefix}border-color-translucent);
$popover-border-radius:             $border-radius-lg;
$popover-inner-border-radius:       subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow:                $box-shadow;

$popover-header-font-size:          $font-size-base;
$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;

Използване

Активиране на изскачащи прозорци чрез JavaScript:

const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)

Направете изскачащите екрани да работят за потребители на клавиатури и помощни технологии

За да позволите на потребителите на клавиатурата да активират вашите изскачащи съобщения, трябва да ги добавяте само към HTML елементи, които традиционно са фокусирани от клавиатурата и са интерактивни (като връзки или контроли на формуляр). Въпреки че произволни HTML елементи (като <span>s) могат да бъдат фокусирани чрез добавяне на tabindex="0"атрибута, това ще добави потенциално досадни и объркващи табулатори на неинтерактивни елементи за потребителите на клавиатурата и повечето помощни технологии в момента не обявяват съдържанието на изскачащия прозорец в тази ситуация . Освен това, не разчитайте само на hoverтова като на задействане на вашите изскачащи съобщения, тъй като това ще ги направи невъзможни за задействане от потребители на клавиатура.

Въпреки че можете да вмъкнете богат, структуриран HTML в изскачащи съобщения с htmlопцията, силно препоръчваме да избягвате добавянето на прекомерно количество съдържание. Начинът, по който изскачащите елементи работят в момента, е, че след като се покажат, тяхното съдържание е свързано с тригерния елемент с aria-describedbyатрибута. В резултат на това цялото съдържание на popover ще бъде обявено на потребителите на помощни технологии като един дълъг, непрекъснат поток.

Освен това, въпреки че е възможно да включите интерактивни контроли (като елементи на формуляр или връзки) във вашия изскачащ прозорец (като добавите тези елементи към allowListразрешените атрибути и тагове), имайте предвид, че в момента изскачащият прозорец не управлява реда на фокусиране на клавиатурата. Когато потребител на клавиатура отвори изскачащ прозорец, фокусът остава върху задействащия елемент и тъй като изскачащият елемент обикновено не следва незабавно задействането в структурата на документа, няма гаранция, че придвижването напред/натисканетоTABще премести потребител на клавиатура в самия изскачащ прозорец. Накратко, простото добавяне на интерактивни контроли към изскачащ прозорец вероятно ще направи тези контроли недостъпни/неизползваеми за потребители на клавиатури и потребители на помощни технологии или най-малкото ще направи нелогичен цялостен ред на фокусиране. В тези случаи обмислете използването на модален диалог вместо това.

Настроики

Тъй като опциите могат да се предават чрез атрибути на данни или JavaScript, можете да добавите име на опция към data-bs-, както в data-bs-animation="{value}". Уверете се, че сте променили типа регистър на името на опцията от „ camelCase ” на „ kebab-case ”, когато предавате опциите чрез атрибути на данни. Например използвайте data-bs-custom-class="beautifier"вместо data-bs-customClass="beautifier".

От Bootstrap 5.2.0 всички компоненти поддържат експериментален резервиран атрибут на данни, data-bs-configкойто може да съдържа проста конфигурация на компонент като JSON низ. Когато даден елемент има атрибути data-bs-config='{"delay":0, "title":123}'и data-bs-title="456", крайната titleстойност ще бъде 456и отделните атрибути на данни ще заменят стойностите, дадени на data-bs-config. В допълнение, съществуващите атрибути на данни могат да съдържат JSON стойности като data-bs-delay='{"show":0,"hide":150}'.

Обърнете внимание, че от съображения за сигурност опциите sanitize, sanitizeFn, и allowListне могат да бъдат предоставени с помощта на атрибути на данни.
Име Тип По подразбиране Описание
allowList обект Стойност по подразбиране Обект, който съдържа разрешени атрибути и тагове.
animation булево true Приложете CSS избледняващ преход към изскачащия прозорец.
boundary низ, елемент 'clippingParents' Граница на ограничение за препълване на изскачащия прозорец (отнася се само за модификатора на PrevenOverflow на Popper). По подразбиране той е 'clippingParents'и може да приеме препратка към HTMLElement (само чрез JavaScript). За повече информация вижте документите на Popper's detectOverflow .
container низ, елемент, невярно false Добавя изскачащия прозорец към конкретен елемент. Пример: container: 'body'. Тази опция е особено полезна, тъй като ви позволява да позиционирате изскачащия прозорец в потока на документа близо до задействащия елемент - което ще попречи на изскачащия прозорец да се отдалечи от задействащия елемент по време на преоразмеряване на прозореца.
content низ, елемент, функция '' Стойност на съдържанието по подразбиране, ако data-bs-contentатрибутът не присъства. Ако е дадена функция, тя ще бъде извикана с нейната thisпрепратка към елемента, към който е прикрепен изскачащият елемент.
customClass низ, функция '' Добавете класове към изскачащия прозорец, когато се покаже. Имайте предвид, че тези класове ще бъдат добавени в допълнение към всички класове, посочени в шаблона. За да добавите няколко класа, разделете ги с интервали: 'class-1 class-2'. Можете също така да подадете функция, която трябва да върне единичен низ, съдържащ допълнителни имена на класове.
delay номер, обект 0 Забавяне на показването и скриването на изскачащия прозорец (ms)—не се отнася за тип ръчно задействане. Ако е предоставен номер, забавянето се прилага и за скриване/показване. Структурата на обекта е: delay: { "show": 500, "hide": 100 }.
fallbackPlacements низ, масив ['top', 'right', 'bottom', 'left'] Дефинирайте резервни разположения, като предоставите списък с разположения в масив (по ред на предпочитанията). За повече информация вижте документите за поведение на Popper .
html булево false Разрешете HTML в изскачащия прозорец. Ако е true, HTML таговете в изскачащия прозорец titleще бъдат изобразени в изскачащия прозорец. Ако е невярно, innerTextсвойството ще се използва за вмъкване на съдържание в DOM. Използвайте текст, ако се притеснявате от XSS атаки.
offset число, низ, функция [0, 0] Отместване на изскачащия прозорец спрямо неговата цел. Можете да подадете низ в атрибути на данни със стойности, разделени със запетая, като: data-bs-offset="10,20". Когато функция се използва за определяне на отместването, тя се извиква с обект, съдържащ разположението на popper, препратката и popper rects като първи аргумент. Задействащият елемент DOM възел се предава като втори аргумент. Функцията трябва да върне масив с две числа: приплъзване , разстояние . За повече информация вижте офсетните документи на Popper .
placement низ, функция 'top' Как да позиционирате изскачащия прозорец: автоматично, отгоре, отдолу, отляво, отдясно. Когато autoе посочено, то динамично ще преориентира изскачащия прозорец. Когато функция се използва за определяне на разположението, тя се извиква с изскачащия DOM възел като първи аргумент и задействащия елемент DOM възел като втори. Контекстът thisе зададен на изскачащия екземпляр.
popperConfig нула, обект, функция null За да промените конфигурацията на Popper по подразбиране на Bootstrap, вижте конфигурацията на Popper . Когато се използва функция за създаване на конфигурацията на Popper, тя се извиква с обект, който съдържа конфигурацията на Popper по подразбиране на Bootstrap. Помага ви да използвате и обедините настройките по подразбиране с вашата собствена конфигурация. Функцията трябва да върне конфигурационен обект за Popper.
sanitize булево true Активирайте или деактивирайте санирането. Ако е активирано 'template', 'content'и 'title'опциите ще бъдат дезинфекцирани.
sanitizeFn нула, функция null Тук можете да предоставите своя собствена функция за дезинфекция. Това може да бъде полезно, ако предпочитате да използвате специална библиотека за извършване на дезинфекция.
selector низ, невярно false Ако е предоставен селектор, изскачащите обекти ще бъдат делегирани на посочените цели. На практика това се използва и за прилагане на изскачащи изображения към динамично добавени DOM елементи ( jQuery.onподдръжка). Вижте този брой и информативен пример .
template низ '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Основен HTML за използване при създаване на изскачащ прозорец. Popover's titleще бъдат инжектирани в .popover-inner. .popover-arrowще се превърне в стрелата на popover. Най-външният обвиващ елемент трябва да има .popoverклас и role="popover".
title низ, елемент, функция '' Стойност на заглавието по подразбиране, ако titleатрибутът не присъства. Ако е дадена функция, тя ще бъде извикана с нейната thisпрепратка към елемента, към който е прикрепен изскачащият елемент.
trigger низ 'hover focus' Как се задейства popover: щракване, задържане на мишката, фокусиране, ръчно. Можете да подадете няколко тригера; отделете ги с интервал. 'manual'показва, че изскачането ще бъде задействано програмно чрез методите и .popover('show'); тази стойност не може да се комбинира с друг тригер. сам по себе си ще доведе до изскачащи съобщения, които не могат да бъдат задействани чрез клавиатурата, и трябва да се използва само ако има алтернативни методи за предаване на същата информация за потребителите на клавиатурата..popover('hide').popover('toggle')'hover'

Атрибути на данни за отделни изскачащи съобщения

Опциите за отделни изскачащи екрани могат алтернативно да бъдат определени чрез използването на атрибути на данни, както е обяснено по-горе.

Използване на функция сpopperConfig

const popover = new bootstrap.Popover(element, {
  popperConfig(defaultBsPopperConfig) {
    // const newPopperConfig = {...}
    // use defaultBsPopperConfig if needed...
    // return newPopperConfig
  }
})

Методи

Асинхронни методи и преходи

Всички API методи са асинхронни и стартират преход . Те се връщат при повикващия веднага щом преходът започне, но преди да приключи . В допълнение, извикване на метод на преходен компонент ще бъде игнорирано .

Вижте нашата JavaScript документация за повече информация .

Метод Описание
disable Премахва възможността за показване на изскачащ прозорец на елемент. Изскачащият прозорец ще може да се показва само ако бъде активиран отново.
dispose Скрива и унищожава popover на елемент (Премахва съхранените данни на DOM елемента). Popover, които използват делегиране (които се създават с помощта на selectorопцията ), не могат да бъдат унищожени поотделно на елементи на задействане на потомък.
enable Дава възможност за показване на popover на елемент. Изскачащите екрани са активирани по подразбиране.
getInstance Статичен метод, който ви позволява да получите изскачащия екземпляр, свързан с DOM елемент.
getOrCreateInstance Статичен метод, който ви позволява да получите изскачащия екземпляр, свързан с DOM елемент, или да създадете нов, в случай че не е инициализиран.
hide Скрива изскачащия прозорец на елемент. Връща се към повикващия, преди изскачащото съобщение да е действително скрито (т.е. преди да hidden.bs.popoverсе случи събитието). Това се счита за „ръчно“ задействане на popover.
setContent Дава начин за промяна на съдържанието на popover след инициализацията му.
show Разкрива изскачане на елемент. Връща се към повикващия, преди изскачащият прозорец действително да е бил показан (т.е. преди да shown.bs.popoverнастъпи събитието). Това се счита за „ръчно“ задействане на popover. Изскачащи съобщения, чието заглавие и съдържание са с нулева дължина, никога не се показват.
toggle Превключва изскачащия прозорец на елемент. Връща се към повикващия, преди изскачащият прозорец действително да е бил показан или скрит (т.е. преди събитието shown.bs.popoverили да hidden.bs.popoverсе появи). Това се счита за „ръчно“ задействане на popover.
toggleEnabled Превключва възможността изскачащият прозорец на елемент да бъде показан или скрит.
update Актуализира позицията на изскачащия прозорец на елемент.
// getOrCreateInstance example
const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance

// setContent example
myPopover.setContent({
  '.popover-header': 'another title',
  '.popover-body': 'another content'
})
Методът setContentприема objectаргумент, където всеки ключ за свойство е валиден stringселектор в изскачащия шаблон и всяка свързана стойност на свойство може да бъде string| element| function| null

събития

Събитие Описание
hide.bs.popover Това събитие се задейства незабавно, когато hideметодът на екземпляра е извикан.
hidden.bs.popover Това събитие се задейства, когато popover приключи да бъде скрит от потребителя (ще изчака CSS преходите да завършат).
inserted.bs.popover Това събитие се задейства след show.bs.popoverсъбитието, когато изскачащият шаблон е добавен към DOM.
show.bs.popover Това събитие се задейства веднага, когато showсе извика методът на екземпляра.
shown.bs.popover Това събитие се задейства, когато изскачащият прозорец е направен видим за потребителя (ще изчака CSS преходите да завършат).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})