Перейти к основному контенту Перейти к навигации документации

Документация и примеры добавления пользовательских подсказок Bootstrap с помощью CSS и JavaScript, используя CSS3 для анимаций и data-bs-атрибуты для локального хранения заголовков.

Обзор

Что нужно знать при использовании плагина подсказок:

  • Подсказки полагаются на стороннюю библиотеку Popper для позиционирования. Вы должны включить popper.min.js перед bootstrap.js, или использовать bootstrap.bundle.min.js, который содержит Popper.
  • Подсказки являются опциональными по соображениям производительности, поэтому вы должны инициализировать их самостоятельно.
  • Подсказки с заголовками нулевой длины никогда не отображаются.
  • Укажите container: 'body', чтобы избежать проблем с рендерингом в более сложных компонентах (таких как наши группы ввода, группы кнопок и т.д.).
  • Запуск подсказок на скрытых элементах не будет работать.
  • Подсказки для элементов .disabled или disabled должны запускаться на элементе-обертке.
  • При запуске из гиперссылок, которые охватывают несколько строк, подсказки будут центрированы. Используйте white-space: nowrap; на ваших <a> для избежания такого поведения.
  • Подсказки должны быть скрыты до того, как их соответствующие элементы будут удалены из DOM.
  • Подсказки могут быть запущены благодаря элементу внутри shadow DOM.

Все понятно? Отлично, давайте посмотрим, как они работают на некоторых примерах.

По умолчанию этот компонент использует встроенный санитайзер контента, который удаляет любые HTML элементы, которые не разрешены явно. См. раздел о санитайзере в нашей документации по JavaScript для получения дополнительной информации.

Анимационный эффект этого компонента зависит от медиа-запроса prefers-reduced-motion. См. раздел о сокращенном движении в нашей документации по доступности.

Примеры

Включение подсказок

Как упоминалось выше, вы должны инициализировать подсказки перед их использованием. Один из способов инициализировать все подсказки на странице — выбрать их по атрибуту data-bs-toggle, вот так:

const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))

Подсказки на ссылках

Наведите курсор на ссылки ниже, чтобы увидеть подсказки:

Placeholder text to demonstrate some inline links with tooltips. This is now just filler, no killer. Content placed here just to mimic the presence of real text. 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 these tooltips on links can work in practice, once you use them on your own site or project.

html
<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 или data-bs-title в своем HTML. Когда используется title, Popper автоматически заменяет его на data-bs-title при отображении элемента.

Пользовательские подсказки

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

Вы можете настроить внешний вид подсказок, используя CSS переменные. Мы устанавливаем пользовательский класс с data-bs-custom-class="custom-tooltip", чтобы ограничить наш пользовательский внешний вид и использовать его для переопределения локальной CSS переменной.

.custom-tooltip {
  --bs-tooltip-bg: var(--bd-violet-bg);
  --bs-tooltip-color: var(--bs-white);
}
html
<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>

Направления

Наведите курсор на кнопки ниже, чтобы увидеть четыре направления подсказок: сверху, справа, снизу и слева. Направления зеркально отражаются при использовании Bootstrap в 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>

И с добавленным пользовательским 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>

С SVG:

CSS

Переменные

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

В рамках развивающегося подхода Bootstrap к CSS переменным, подсказки теперь используют локальные CSS переменные на .tooltip для расширенной настройки в реальном времени. Значения для CSS переменных устанавливаются через Sass, поэтому настройка Sass также все еще поддерживается.

--#{$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};

Sass переменные

$tooltip-font-size:                 $font-size-sm;
$tooltip-max-width:                 200px;
$tooltip-color:                     var(--#{$prefix}body-bg);
$tooltip-bg:                        var(--#{$prefix}emphasis-color);
$tooltip-border-radius:             var(--#{$prefix}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

Использование

Плагин подсказок генерирует содержимое и разметку по требованию и по умолчанию размещает подсказки после их запускающего элемента. Запустите подсказку через JavaScript:

const exampleEl = document.getElementById('example')
const tooltip = new bootstrap.Tooltip(exampleEl, options)

Подсказки автоматически пытаются изменить позицию, когда родительский контейнер имеет overflow: auto или overflow: scroll, но все равно сохраняют позиционирование исходного размещения. Установите опцию boundary (для модификатора flip, используя опцию popperConfig) на любой HTMLElement, чтобы переопределить значение по умолчанию 'clippingParents', например document.body:

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

Разметка

Требуемая разметка для подсказки — это только атрибут data и title на HTML элементе, для которого вы хотите иметь подсказку. Сгенерированная разметка подсказки довольно проста, хотя она требует позицию (по умолчанию установлена в top плагином).

Сохраняйте подсказки доступными для пользователей клавиатуры и вспомогательных технологий, добавляя их только к HTML элементам, которые традиционно фокусируемы клавиатурой и интерактивны (таким как ссылки или элементы управления формами). Хотя другие HTML элементы можно сделать фокусируемыми, добавив tabindex="0", это может создать раздражающие и запутывающие остановки табуляции на неинтерактивных элементах для пользователей клавиатуры, и большинство вспомогательных технологий в настоящее время не объявляют подсказки в этой ситуации. Кроме того, не полагайтесь исключительно на hover как триггер для ваших подсказок, поскольку это сделает их невозможными для запуска пользователями клавиатуры.

<!-- 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-auto" role="tooltip">
  <div class="tooltip-arrow"></div>
  <div class="tooltip-inner">
    Some tooltip text!
  </div>
</div>

Отключенные элементы

Элементы с атрибутом disabled не интерактивны, что означает, что пользователи не могут фокусироваться на них, наводить курсор или нажимать на них, чтобы запустить подсказку (или всплывающее окно). В качестве обходного пути вы захотите запустить подсказку из элемента-обертки <div> или <span>, в идеале сделанного фокусируемым клавиатурой с помощью tabindex="0".

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

Опции

Поскольку опции могут передаваться через атрибуты данных или 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}'.

Окончательный объект конфигурации — это объединенный результат data-bs-config, data-bs- и js object, где последний заданный ключ-значение переопределяет другие.

Обратите внимание, что по соображениям безопасности опции sanitize, sanitizeFn и allowList не могут быть предоставлены с использованием атрибутов data.

НазваниеТипПо умолчаниюОписание
allowListobjectЗначение по умолчаниюОбъект, содержащий разрешенные теги и атрибуты. Те, которые не разрешены явно, будут удалены санитайзером содержимого.
Будьте осторожны при добавлении в этот список. Обратитесь к OWASP's Cross Site Scripting Prevention Cheat Sheet для получения дополнительной информации.
animationbooleantrueПрименить CSS переход исчезновения к подсказке.
boundarystring, element'clippingParents'Граница ограничения переполнения подсказки (применяется только к модификатору preventOverflow Popper). По умолчанию это 'clippingParents' и может принимать ссылку на HTMLElement (только через JavaScript). Для получения дополнительной информации обратитесь к документации detectOverflow Popper.
containerstring, element, falsefalseДобавляет подсказку к определенному элементу. Пример: container: 'body'. Эта опция особенно полезна тем, что позволяет позиционировать подсказку в потоке документа рядом с запускающим элементом, что предотвратит отплытие подсказки от запускающего элемента при изменении размера окна.
customClassstring, function''Добавить классы к подсказке при её показе. Обратите внимание, что эти классы будут добавлены в дополнение к любым классам, указанным в шаблоне. Чтобы добавить несколько классов, разделите их пробелами: 'class-1 class-2'. Вы также можете передать функцию, которая должна вернуть одну строку, содержащую дополнительные имена классов.
delaynumber, object0Задержка показа и скрытия подсказки (мс) — не применяется к типу ручного триггера. Если указано число, задержка применяется как к скрытию, так и к показу. Структура объекта: delay: { "show": 500, "hide": 100 }.
fallbackPlacementsarray['top', 'right', 'bottom', 'left']Определите резервные размещения, предоставив список размещений в массиве (в порядке предпочтения). Для получения дополнительной информации обратитесь к документации поведения Popper.
htmlbooleanfalseРазрешить HTML в подсказке. Если true, HTML теги в title подсказки будут отрендерены в подсказке. Если false, свойство innerText будет использовано для вставки содержимого в DOM. Предпочитайте текст при работе с пользовательским вводом для предотвращения XSS атак.
offsetarray, string, function[0, 6]Смещение подсказки относительно её цели. Вы можете передать строку в атрибутах data с значениями, разделенными запятыми, например: data-bs-offset="10,20". Когда функция используется для определения смещения, она вызывается с объектом, содержащим размещение popper, ссылку и прямоугольники popper в качестве первого аргумента. DOM узел запускающего элемента передается в качестве второго аргумента. Функция должна вернуть массив с двумя числами: skidding, distance. Для получения дополнительной информации обратитесь к документации offset Popper.
placementstring, function'top'Как позиционировать подсказку: auto, top, bottom, left, right. Когда указано auto, она будет динамически переориентировать подсказку. Когда функция используется для определения размещения, она вызывается с DOM узлом подсказки в качестве первого аргумента и DOM узлом запускающего элемента в качестве второго. Контекст this установлен на экземпляр подсказки.
popperConfignull, object, functionnullДля изменения конфигурации Popper по умолчанию Bootstrap, см. конфигурацию Popper. Когда функция используется для создания конфигурации Popper, она вызывается с объектом, который содержит конфигурацию Popper по умолчанию Bootstrap. Это помогает вам использовать и объединять значения по умолчанию с вашей собственной конфигурацией. Функция должна вернуть объект конфигурации для Popper.
sanitizebooleantrueВключить санитизацию содержимого. Если true, опции template, content и title будут санитизированы.
Будьте осторожны при отключении санитизации содержимого. Обратитесь к OWASP's Cross Site Scripting Prevention Cheat Sheet для получения дополнительной информации. Уязвимости, вызванные исключительно отключением санитизации содержимого, не считаются в рамках модели безопасности Bootstrap.
sanitizeFnnull, functionnullПредоставить альтернативную функцию санитизации содержимого. Это может быть полезно, если вы предпочитаете использовать специализированную библиотеку для выполнения санитизации.
selectorstring, falsefalseЕсли предоставлен селектор, объекты подсказок будут делегированы указанным целям. На практике это используется для применения подсказок к динамически добавленным DOM элементам (поддержка jQuery.on). См. эту проблему и информативный пример. Примечание: атрибут title не должен использоваться как селектор.
templatestring'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'Базовый HTML для использования при создании подсказки. title подсказки будет внедрен в .tooltip-inner. .tooltip-arrow станет стрелкой подсказки. Самый внешний элемент-обертка должен иметь класс .tooltip и role="tooltip".
titlestring, element, function''Заголовок подсказки. Если дана функция, она будет вызвана с её ссылкой this, установленной на элемент, к которому прикреплена подсказка.
triggerstring'hover focus'Как запускается подсказка: click, hover, focus, manual. Вы можете передать несколько триггеров; разделите их пробелом. 'manual' указывает, что подсказка будет запускаться программно через методы .tooltip('show'), .tooltip('hide') и .tooltip('toggle'); это значение нельзя комбинировать с любым другим триггером. 'hover' само по себе приведет к подсказкам, которые нельзя запустить через клавиатуру, и должно использоваться только если присутствуют альтернативные методы передачи той же информации для пользователей клавиатуры.

Data-атрибуты для отдельных подсказок

Опции для отдельных подсказок также могут быть указаны с помощью data-атрибутов, как описано выше.

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

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

Методы

Все API методы являются асинхронными и запускают переход. Они возвращаются к вызывающему коду сразу после начала перехода, но до его завершения. Кроме того, вызов метода на компоненте, который уже находится в процессе перехода, будет проигнорирован. Узнайте больше в нашей документации по JavaScript.

МетодОписание
disableУдаляет возможность показа подсказки элемента. Подсказка сможет быть показана только если она будет повторно включена.
disposeСкрывает и уничтожает подсказку элемента (удаляет сохраненные данные на DOM элементе). Подсказки, которые используют делегирование (которые созданы с использованием опции selector), не могут быть индивидуально уничтожены на дочерних запускающих элементах.
enableДает подсказке элемента возможность быть показанной. Подсказки включены по умолчанию.
getInstanceСтатический метод, который позволяет получить экземпляр подсказки, связанный с DOM элементом.
getOrCreateInstanceСтатический метод, который позволяет получить экземпляр подсказки, связанный с DOM элементом, или создать новый, в случае если он не был инициализирован.
hideСкрывает подсказку элемента. Возвращается к вызывающему до того, как подсказка фактически была скрыта (т.е. до того, как произойдет событие hidden.bs.tooltip). Это считается "ручным" запуском подсказки.
setContentДает способ изменить содержимое подсказки после её инициализации.
showПоказывает подсказку элемента. Возвращается к вызывающему до того, как подсказка фактически была показана (т.е. до того, как произойдет событие shown.bs.tooltip). Это считается "ручным" запуском подсказки. Подсказки с заголовками нулевой длины никогда не отображаются.
toggleПереключает подсказку элемента. Возвращается к вызывающему до того, как подсказка фактически была показана или скрыта (т.е. до того, как произойдет событие shown.bs.tooltip или hidden.bs.tooltip). Это считается "ручным" запуском подсказки.
toggleEnabledПереключает возможность показа или скрытия подсказки элемента.
updateОбновляет позицию подсказки элемента.
const tooltip = bootstrap.Tooltip.getInstance('#example') // Returns a Bootstrap tooltip instance

// setContent example
tooltip.setContent({ '.tooltip-inner': 'another title' })

Метод setContent принимает аргумент object, где каждый ключ свойства является валидным string селектором внутри шаблона подсказки, а каждое связанное значение свойства может быть string | element | function | null

События

СобытиеОписание
hide.bs.tooltipЭто событие запускается немедленно, когда был вызван метод экземпляра hide.
hidden.bs.tooltipЭто событие запускается, когда подсказка закончила скрываться от пользователя (будет ждать завершения CSS переходов).
inserted.bs.tooltipЭто событие запускается после события show.bs.tooltip, когда шаблон подсказки был добавлен в DOM.
show.bs.tooltipЭто событие запускается немедленно, когда вызывается метод экземпляра show.
shown.bs.tooltipЭто событие запускается, когда подсказка стала видимой для пользователя (будет ждать завершения CSS переходов).
const myTooltipEl = document.getElementById('myTooltip')
const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)

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

tooltip.hide()