Tooltips

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

Обзор

Что следует знать при использовании плагина всплывающих подсказок:

  • Всплывающие подсказки зависят от сторонней библиотеки Popper для позиционирования. Вы должны включить popper.min.js перед bootstrap.js или использовать тот, bootstrap.bundle.min.js который содержит Popper.
  • Всплывающие подсказки доступны по соображениям производительности, поэтому вы должны инициализировать их самостоятельно.
  • Всплывающие подсказки с заголовками нулевой длины никогда не отображаются.
  • Укажите container: 'body', чтобы избежать проблем с рендерингом в более сложных компонентах (таких как наши группы ввода, группы кнопок и т.д.).
  • Запуск всплывающих подсказок для скрытых элементов не будет работать.
  • Всплывающие подсказки для элементов .disabled or 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))

Всплывающие подсказки по ссылкам

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

Текст-заполнитель для демонстрации некоторых встроенных ссылок со всплывающими подсказками. Теперь это просто заполнитель, а не убийца. Содержимое, размещенное здесь, просто имитирует наличие реального текста. И все это только для того, чтобы дать вам представление о том, как будут выглядеть всплывающие подсказки при использовании в реальных ситуациях. Надеюсь, теперь вы увидели, как эти всплывающие подсказки по ссылкам могут работать на практике, когда вы используете их на своем собственном сайте или проекте.

<p class="muted">Текст-заполнитель для демонстрации некоторых <a href="#" data-bs-toggle="tooltip" data-bs-title="Default tooltip">встроенных ссылок</a> с подсказками. Теперь это просто наполнитель, а не убийца. Содержимое, размещенное здесь только для имитации присутствия <a href="#" data-bs-toggle="tooltip" data-bs-title="Another tooltip">реального текста</a>. И все это просто для того, чтобы дать вам представление о том, как будут выглядеть всплывающие подсказки при использовании в реальных ситуациях. Надеюсь, теперь вы увидели, как <a href="#" data-bs-toggle="tooltip" data-bs-title="Another one here too">эти всплывающие подсказки по ссылкам</a> могут работать на практике, если вы используете их на <a href="#" data-bs-toggle="tooltip" data-bs-title="The last tip!">свой собственный</a> сайт или проект.</p>
Результат:

Текст-заполнитель для демонстрации некоторых встроенных ссылок с подсказками. Теперь это просто наполнитель, а не убийца. Содержимое, размещенное здесь только для имитации присутствия реального текста. И все это просто для того, чтобы дать вам представление о том, как будут выглядеть всплывающие подсказки при использовании в реальных ситуациях. Надеюсь, теперь вы увидели, как эти всплывающие подсказки по ссылкам могут работать на практике, если вы используете их на свой собственный сайт или проект.

Не стесняйтесь использовать либо title, либо data-bs-title в вашем HTML. Когда title используется, Popper автоматически заменит его на data-bs-title при рендеринге элемента.

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

Добавлено в версии 5.2.0

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

сайт/ресурсы/scss/_component-examples.scss

.custom-tooltip {
  --bs-tooltip-bg: var(--bd-violet-bg);
  --bs-tooltip-color: var(--bs-white);
}
<button type="button" class="btn btn-secondary"
        data-bs-toggle="tooltip" data-bs-placement="top"
        data-bs-custom-class="custom-tooltip"
        data-bs-title="Эта верхняя всплывающая подсказка оформлена с помощью переменных CSS..">
  Пользовательская всплывающая подсказка
</button>
Результат:

Инструкции

Наведите указатель мыши на кнопки ниже, чтобы увидеть четыре направления всплывающих подсказок: сверху, справа, снизу и слева. Направления зеркально отображаются при использовании Bootstrap в RTL.

<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="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">
  Всплывающая подсказка справа
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="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">
  Всплывающая подсказка слева
</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>">
  Подсказка с HTML
</button>
Результат:

С SVG:

CSS

Переменные

Добавлено в версии 5.2.0

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

scss/_tooltip.scss

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

scss/_variables.scss

$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; // Устарело в Bootstrap 5.2.0 для переменных CSS.
// 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!">Наведите на меня курсор</a>

<!-- Generated markup by the plugin -->
<div class="tooltip bs-tooltip-auto" role="tooltip">
  <div class="tooltip-arrow"></div>
  <div class="tooltip-inner">
    Какой-то текст всплывающей подсказки!
  </div>
</div>
Результат:
Наведите на меня курсор

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

Элементы с атрибутом disabled не являются интерактивными, что означает, что пользователи не могут сфокусироваться, навести курсор или щелкнуть по ним, чтобы вызвать всплывающую подсказку (или всплывающее окно). В качестве обходного пути вам захочется запустить всплывающую подсказку из оболочки <div> или <span>, в идеале с возможностью фокусировки на клавиатуре с помощью 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>Кнопка отключена</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 не могут быть предоставлены с использованием атрибутов данных.
Имя Тип По умолчанию Описание
allowList объект Значение по умолчанию Объект, содержащий разрешенные атрибуты и теги.
animation логическое значение true Примените к всплывающей подсказке плавный переход CSS.
boundary строка, элемент 'clippingParents' Граница ограничения переполнения всплывающей подсказки (применяется только к модификатору preventOverflow от Popper). По умолчанию это 'clippingParents' и может принимать ссылку на HTMLElement (только через JavaScript). Для получения дополнительной информации обратитесь к документации Popper по обнаружению потока.
container строка, элемент, false false Добавляет всплывающую подсказку к определенному элементу. Пример: container: 'body'. Эта опция особенно полезна тем, что позволяет расположить всплывающую подсказку в потоке документа рядом с инициирующим элементом, что предотвратит ее отторжение от инициирующего элемента при изменении размера окна.
customClass строка, функция '' Добавляйте классы во всплывающую подсказку, когда она будет показана. Обратите внимание, что эти классы будут добавлены в дополнение к любым классам, указанным в шаблоне. Чтобы добавить несколько классов, разделяйте их пробелами: 'class-1 class-2'. Вы также можете передать функцию, которая должна возвращать единственную строку, содержащую дополнительные имена классов.
delay число, объект 0 Задержка отображения и скрытия всплывающей подсказки (мс) — не применяется к типу ручного запуска. Если указано число, задержка применяется как для скрытия, так и для показа. Структура объекта: delay: { "show": 500, "hide": 100 }.
fallbackPlacements массив ['top', 'right', 'bottom', 'left'] Определите резервные места размещения, предоставив список мест размещения в array (в порядке предпочтения). Для получения дополнительной информации обратитесь к документам Popper по поведению.
html логическое значение false Разрешить использование HTML во всплывающей подсказке. Если true, HTML-теги во всплывающей подсказке title будут отображаться во всплывающей подсказке. Если значение равно false, innerText свойство будет использоваться для вставки содержимого в DOM. Используйте text, если вы опасаетесь XSS-атак.
offset массив, строка, функция [0, 0] Смещение всплывающей подсказки относительно ее целевого объекта. В атрибутах данных можно передать строку со значениями, разделенными запятыми, например: data-bs-offset="10,20". Когда функция используется для определения смещения, она вызывается с объектом, содержащим размещение popper, ссылку и popper rects в качестве первого аргумента. Запускающий элемент DOM node передается в качестве второго аргумента. Функция должна возвращать массив с двумя числами: занос, расстояние. Для получения дополнительной информации обратитесь к offset docs от Popper.
placement строка, функция 'top' Как расположить всплывающую подсказку: авто, сверху, снизу, слева, справа. Если задано значение auto, всплывающая подсказка будет динамически переориентироваться. Когда функция используется для определения места размещения, она вызывается с DOM-узлом всплывающей подсказки в качестве первого аргумента и DOM-узлом инициирующего элемента в качестве второго. Для this контекста задается экземпляр всплывающей подсказки.
popperConfig null, объект, функция null Чтобы изменить конфигурацию поппера Bootstrap по умолчанию, см. раздел Конфигурация поппера. Когда функция используется для создания конфигурации Popper, она вызывается с объектом, который содержит конфигурацию Popper по умолчанию для Bootstrap. Это помогает вам использовать и объединить конфигурацию по умолчанию с вашей собственной конфигурацией. Функция должна возвращать объект конфигурации для Popper.
sanitize логическое значение true Включите или отключите очистку. Если активированы параметры 'template', 'content' и 'title', они будут очищены.
sanitizeFn null, функция null Здесь вы можете указать свою собственную функцию очистки. Это может быть полезно, если вы предпочитаете использовать специальную библиотеку для выполнения очистки.
selector строка, false false Если предусмотрен селектор, объекты всплывающих подсказок будут делегированы указанным целевым объектам. На практике это используется также для применения всплывающих подсказок к динамически добавляемым элементам DOM (jQuery.on поддержка). Смотрите эту проблему и информативный пример. Примечание: title атрибут нельзя использовать в качестве селектора.
template строка '<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".
title строка, элемент, функция '' Заголовок всплывающей подсказки. Если задана функция, она будет вызвана со своей this ссылкой, установленной на элемент, к которому прикреплено всплывающее окно.
trigger строка 'hover focus' Как запускается всплывающая подсказка: щелчок, наведение курсора, фокусировка, вручную. Вы можете передать несколько триггеров; разделяйте их пробелом. 'manual' указывает, что всплывающая подсказка будет запускаться программно с помощью методов .tooltip('show'), .tooltip('hide') и .tooltip('toggle'); это значение нельзя комбинировать с каким-либо другим триггером. 'hover' само по себе приведет к появлению всплывающих подсказок, которые нельзя вызвать с помощью клавиатуры, и их следует использовать только при наличии альтернативных методов передачи той же информации для пользователей клавиатуры.

Атрибуты данных для отдельных всплывающих подсказок

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

Использование функции с 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()