Skip to content

CdsTooltip

Всплывающая подсказка коротко поясняет элемент интерфейса при наведении или фокусе: называет кнопку-иконку, показывает полный текст обрезанной строки, объясняет, почему действие недоступно. Появляется и исчезает сама — пользователю не нужно ничего нажимать и закрывать.

Storybook GitLab Figma
Покрытие тестами: 100% — хорошее покрытие
API в спеках
55 / 55 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
50 юнит · 7 браузерных
Покрытие кода
100% строк · 100% ветвей замер v4.0.0-alpha.13
A11y (axe)
11 рекомендаций в 11 историях замер v4.0.0-alpha.11

Подсказка — для короткого текста без взаимодействия. Список действий по клику покажет CdsMenu, а диалог с формой и кнопками — CdsModal.

Внутри подсказки работает CdsOverlay: он считает координаты, переворачивает подсказку, когда у края экрана не хватает места, и держит её рядом с активатором при скролле. Поэтому пропсы позиционирования и открытия у подсказки общие с оверлеем.

Вариации ​

Активатор ​

Элемент, к которому привязана подсказка, задаётся слотом activator: пропсы слота (v-bind="props") вешают на него обработчики наведения и атрибут aria-describedby. Содержимое подсказки — проп text или слот default, когда нужна разметка. Если активатор уже свёрстан и оборачивать его не хочется, положите CdsTooltip внутрь с activator="parent" — так сделаны примеры в «Расположении» и сценариях ниже.

Sandbox Storybook

Расположение ​

Проп location задаёт, с какой стороны от активатора появится подсказка: top по умолчанию, bottom, left, right — и их сочетания с выравниванием (top left, bottom right). Если места не хватает, подсказка сама перевернётся к противоположному краю. Расстояние до активатора настраивает offset.

Sandbox Storybook

Стрелка ​

Стрелка указывает на активатор и следует за фактическим положением подсказки — в том числе после автоматического переворота у края экрана. Проп hide-arrow её скрывает.

Sandbox Storybook

Способ открытия ​

По умолчанию подсказка открывается по наведению курсора и по фокусу с клавиатуры, без задержек. Пропсы open-delay и close-delay добавляют паузу — подсказка не мигает, когда курсор проходит мимо. Проп open-on-click с :open-on-hover="false" переключает открытие на клик.

Sandbox Storybook

Управление показом ​

v-model открывает и закрывает подсказку из кода — так её показывают в ответ на события интерфейса, а не только на наведение.

Sandbox Storybook

Рекомендации ​

Сценарии использования ​

Панель кнопок-иконок ​

Кнопке-иконке подсказка возвращает название действия. CdsTooltip лежит внутри кнопки с activator="parent" — оборачивать разметку не нужно. aria-label при этом обязателен: подсказка появляется при наведении, а название действия должно быть доступно всегда.

Sandbox Storybook

Обрезанный текст ​

Когда место ограничено, длинные названия обрезаются truncate — подсказка показывает полный текст при наведении на строку. Тот же проп text служит и содержимым строки, и содержимым подсказки.

Sandbox Storybook

Недоступное действие ​

Заблокированная кнопка не должна молчать — подсказка объясняет, почему действие закрыто. У кнопки с disabled отключены события мыши, поэтому подсказка вешается на обёртку через activator="parent". Проп disabled самой подсказки выключает её, как только действие становится доступным.

Sandbox Storybook

Подтверждение действия ​

Подсказка может подтверждать мгновенное действие без места под сообщение — например, копирование в буфер обмена. Показом управляет v-model по клику, а :open-on-hover="false" не даёт подсказке открываться от простого наведения. Через полторы секунды таймер закрывает её сам.

Sandbox Storybook

Онбординг ​

Проп interactive разрешает взаимодействие с содержимым: наведение на подсказку не закрывает её, а элементы внутри остаются кликабельными. Чтобы курсор успел перейти с активатора на подсказку через зазор между ними, интерактивная подсказка закрывается с задержкой 250 мс; явный close-delay её заменяет. Вместе с open-on-click и v-model из этого собирается подсказка-онбординг: ссылка «Узнать больше» и кнопка, которая закрывает подсказку. Проп width держит ширину текста удобной для чтения.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
activator(string & {}) | Element | "parent" | ComponentPublicInstance | undefined—Элемент, который будет активировать компонент
activatorPropsRecord<string, any> | undefined{}Свойства для элемента активатора
attachstring | boolean | Element | undefined—Указывает, в какой элемент DOM следует переместить содержимое overlay. Может быть прямой ссылкой на элемент, строкой querySelector или значением true для отключения перемещения. По умолчанию используется элемент body. Как правило, не рекомендуется изменять это свойство, за исключением крайних случаев: алгоритм позиционирования по умолчанию должен справляться с большинством сценариев лучше, чем это возможно без перемещения, и может возникнуть непредвиденное поведение, если меню окажется дочерним элементом своего активатора.
closeDelaystring | number | undefined—Время ожидания в миллисекундах перед закрытием компонента. Работает только с параметром open-on-hover.
closeOnBackboolean | undefinedfalseЗакрывает содержимое оверлея при нажатии кнопки «Назад» в браузере или вызове $router.back(), отменяя исходную навигацию. persistent оверлеи отменяют навигацию и анимируются так, как будто по ним щелкнули за пределами оверлея, вместо того чтобы закрываться.
closeOnContentClickboolean | undefined—Скрыть компонент по клику на контент
colorstring | undefined—Цвет фона подсказки.
containedboolean | undefined—Ограничивает размер компонента и сетки в соответствии с его смещенным родительским элементом. Подразумевает использование свойств absolute и attach. (Примечание: родительский элемент должен иметь свойство position: relative.)
contentClassany—Применяет пользовательский класс к отдельному элементу. Это удобно, поскольку содержимое перемещается в начало компонента cds-app (если не указан параметр attach) и не может быть выделено с помощью классов, переданных непосредственно в компонент.
contentPropsany—Применяет кастомные свойства (props) к перемещаемому контенту
disabledboolean | null | undefinednullЗаблокированное состояние
eagerboolean | undefinedtrueПринудительно рендерит содержимое компонента при его использовании. Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO.
heightstring | number | undefined—Высота компонента
hideArrowboolean | undefined—Скрывает стрелку-указатель, направленную на активатор. По умолчанию стрелка отображается.
idstring | undefined—Уникальный идентификатор для связывания подсказки с её активатором. Если не указано, будет сгенерирован автоматически.
interactiveboolean | undefined—Разрешает взаимодействие с содержимым подсказки: наведение курсора на контент не закрывает её. Чтобы курсор успел пересечь зазор между активатором и подсказкой, она закрывается с задержкой 250 мс, если closeDelay не задан явно.
locationAnchor | undefined'top'Указывает точку привязки для позиционирования компонента с использованием ориентиров для выравнивания по горизонтали, по вертикали или по обоим направлениям
locationStrategy"static" | "connected" | LocationStrategyFunction | undefined'connected'Определяет способ позиционирования содержимого оверлея. По умолчанию используется значение static, при котором содержимое центрируется в контейнере. Используйте connected для привязки к элементу-активатору.
maxHeightstring | number | undefined—Максимальная высота компонента
maxWidthstring | number | undefined—Максимальная ширина компонента
minHeightstring | number | undefined—Минимальная высота компонента
minWidthstring | number | undefined0Минимальная ширина компонента
modelValueboolean | undefined—Значение компонента v-model. Если компонент поддерживает свойство multiple, по умолчанию используется пустой массив.
noClickAnimationboolean | undefined—Отключает эффект bounce при нажатии за пределами элемента контента при использовании атрибута persistent.
offsetstring | number | number[] | undefined10Увеличивает расстояние до цели. Если передать два числа, второе значение смещает анкер вбок и в сторону от цели.
opacitystring | number | undefined—Прозрачность элемента «scrim». Применяется только в том случае, если св-во scrim=true.
openDelaystring | number | undefined—Время ожидания в миллисекундах перед открытием компонента. Работает только с параметром open-on-hover.
openOnClickboolean | undefinedfalseПоказать компонент по клику на активатор
openOnFocusboolean | undefined—Показать компонент по фокусу на активатор
openOnHoverboolean | undefinedtrueПоказать компонент по наведению на активатор
originAnchor | "auto" | "overlap" | undefined'auto'Устанавливает точку привязки для содержимого наложения, которая выравнивается по точке привязки «location» на объекте-цели. При значении «auto» используется противоположная сторона точки «location». При значении «overlap» используется та же точка привязки, в результате чего наложение перекрывает объект-цель. Также задает значение CSS-свойства transform-origin для transitions enter/leave.
persistentboolean | undefined—Клик за пределами элемента или нажатие клавиши Esc не приведет к его закрытию.
scrimstring | boolean | undefinedfalseФон при активации overlay. Принимает значения true/false для включения фона и строку для определения цвета.
scrollStrategy"none" | "close" | "block" | "reposition" | ScrollStrategyFunction | undefined'reposition'Стратегия, применяемая при активации компонента и прокрутке страницы пользователем.
stickToTargetboolean | undefined—Позволяет контенту наложения выходить за пределы экрана при прокрутке.
target(string & {}) | Element | "parent" | ComponentPublicInstance | "cursor" | [x: number, y: number] | undefined—Если для параметра locationStrategy задано значение «connected», необходимо указать элемент или массив координат x, y, относительно которых должен располагаться оверлей. По умолчанию в качестве такого элемента используется элемент-активатор.
textstring | undefined—Текст всплывающей подсказки. Используется, если не передан слот default.
themestring | undefined—Тема компонента
transitionstring | boolean | (TransitionProps & { component?: Component | undefined; }) | null | undefinednullАнимация перехода
viewportMarginstring | number | undefined12Устанавливает пользовательские viewport margin для содержимого наложения
widthstring | number | undefined—Ширина компонента
zIndexstring | number | undefined2000Значение z-index для компонента.

События

ИмяТипОписание
update:modelValue[value: boolean]Сработало при показе или скрытии подсказки. Передаёт новое состояние видимости

Слоты

ИмяТипОписание
activator{ isActive: boolean; props: Record<string, any>; targetRef: TemplateRef; }Слот для элемента, который будет выступать в роли активатора для оверлея.
default{ isActive: Ref<boolean, boolean>; }Слот для контента оверлея.

Exposed

ИмяТипОписание
activatorElHTMLElement | undefinedDOM-элемент активатора.
activatorRefTemplateRefTemplate ref для назначения активатора вручную.
animateClick() => voidЗапускает bounce-анимацию контента — как при клике мимо persistent-оверлея.
contentElHTMLElement | undefinedDOM-элемент контента оверлея.
globalTopbooleanЯвляется ли оверлей верхним в глобальном стеке открытых оверлеев.
rootElHTMLElement | undefinedКорневой DOM-элемент оверлея.
scrimElHTMLElement | undefinedDOM-элемент подложки (scrim), затемняющей страницу.
targetElHTMLElement | undefinedDOM-элемент цели позиционирования.
targetRefTemplateRefTemplate ref для назначения цели позиционирования вручную.
updateLocation((e: Event) => void) | undefinedПересчитывает позицию контента относительно цели.