Tooltips
Обзор
Что следует знать при использовании плагина всплывающих подсказок:
- Всплывающие подсказки зависят от сторонней библиотеки Popper для позиционирования. Вы должны включить popper.min.js перед
bootstrap.js
или использовать тот,bootstrap.bundle.min.js
который содержит Popper. - Всплывающие подсказки доступны по соображениям производительности, поэтому вы должны инициализировать их самостоятельно.
- Всплывающие подсказки с заголовками нулевой длины никогда не отображаются.
- Укажите
container: 'body'
, чтобы избежать проблем с рендерингом в более сложных компонентах (таких как наши группы ввода, группы кнопок и т.д.). - Запуск всплывающих подсказок для скрытых элементов не будет работать.
- Всплывающие подсказки для элементов
.disabled
ordisabled
должны запускаться на элементе-оболочке. - При запуске по гиперссылкам, занимающим несколько строк, всплывающие подсказки будут центрироваться. Используйте
white-space: nowrap;
на вашем<a>
компьютере, чтобы избежать такого поведения. - Всплывающие подсказки должны быть скрыты до того, как соответствующие им элементы будут удалены из DOM.
- Всплывающие подсказки могут запускаться благодаря элементу внутри shadow DOM.
Все понял? Отлично, давайте посмотрим, как они работают, на нескольких примерах.
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 также по-прежнему поддерживается.
--#{$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; // Устарело в 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
).
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
}
})
Методы
Метод | Описание |
---|---|
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()