Компонент QTooltip из библиотеки
Quasar предназначен для создания всплывающих подсказок,
которые появляются при наведении или фокусе на элемент. Он не рендерится
сам по себе, а привязывается к другому компоненту через слот
default.
<q-btn label="Наведи на меня">
<q-tooltip>
Это подсказка
</q-tooltip>
</q-btn>
В этом примере подсказка появится при наведении курсора на кнопку. Компонент автоматически определяет позицию относительно целевого элемента.
QTooltip поддерживает следующие параметры управления видимостью:
v-model — двусторонняя привязка для контроля состояния
показа.anchor — определяет сторону целевого элемента, к
которой будет привязана подсказка (top,
bottom, left, right, а также
комбинации типа top-left).self — указывает точку привязки самой подсказки
(top, bottom, left,
right, center).Пример:
<q-btn label="Подсказка снизу" color="primary">
<q-tooltip anchor="bottom" self="center" v-model="showTooltip">
Подсказка отображается снизу
</q-tooltip>
</q-btn>
<script setup>
import { ref } from 'vue'
const showTooltip = ref(false)
</script>
В этом примере показ подсказки можно контролировать через переменную
showTooltip.
Для улучшения UX можно задавать задержку перед показом или скрытием подсказки с помощью свойств:
delay — задержка появления подсказки (в
миллисекундах).persistent — если установлено в true,
подсказка не исчезает при уходе курсора.transition-show и transition-hide —
позволяют задать анимации появления и исчезновения.<q-btn label="Задержка подсказки">
<q-tooltip delay="500" transition-show="jump-down" transition-hide="jump-up">
Подсказка с анимацией
</q-tooltip>
</q-btn>
Задержка делает интерфейс более плавным, предотвращая случайное всплытие при быстром перемещении курсора.
Подсказки в Quasar легко стилизуются через классы и встроенные атрибуты:
color — основной цвет подсказки.text-color — цвет текста.class — для добавления пользовательских
CSS-классов.style — для инлайновых стилей.Пример с кастомной стилизацией:
<q-btn label="Красная подсказка">
<q-tooltip color="red" text-color="white" class="rounded-borders">
Важная подсказка
</q-tooltip>
</q-btn>
<style>
.rounded-borders {
border-radius: 8px;
font-weight: bold;
}
</style>
QTooltip может быть привязан к любому компоненту, который поддерживает слоты, включая:
Пример для иконки:
<q-icon name="info" size="32px">
<q-tooltip anchor="top">Информация о элементе</q-tooltip>
</q-icon>
Подсказка автоматически подстраивается под размер и позицию иконки.
Можно сделать подсказку интерактивной, например, с кнопками или ссылками. Для этого важно использовать слот и управлять событиями внутри подсказки:
<q-btn label="Меню">
<q-tooltip anchor="bottom">
<div>
<q-btn label="Действие 1" size="sm" flat />
<q-btn label="Действие 2" size="sm" flat color="secondary" />
</div>
</q-tooltip>
</q-btn>
Такой подход позволяет добавлять сложный контент без потери функциональности подсказки.
anchor + self).На мобильных устройствах всплывающие подсказки срабатывают при долгом нажатии вместо наведения курсора. Это важно учитывать при проектировании интерфейсов для сенсорных экранов.
<q-btn label="Мобильная подсказка">
<q-tooltip anchor="top">
Нажми и удерживай для просмотра
</q-tooltip>
</q-btn>
Использование touch-hold событий позволяет
контролировать поведение на мобильных устройствах.
Содержимое подсказки может быть динамическим, основанным на данных компонента:
<q-btn label="Покажи количество">
<q-tooltip>{{ itemCount }} элементов</q-tooltip>
</q-btn>
<script setup>
import { ref } from 'vue'
const itemCount = ref(42)
</script>
Изменение переменной itemCount автоматически обновляет
текст подсказки, обеспечивая реактивность.
QTooltip отлично сочетается с компонентами типа QChip, QAvatar, QCardSection, создавая богатый интерактивный интерфейс без необходимости писать собственные всплывающие решения.
<q-chip icon="info" color="primary">
<q-tooltip anchor="bottom">
Дополнительная информация о чипе
</q-tooltip>
</q-chip>
QTooltip обеспечивает гибкий, лёгкий и мощный способ предоставления пользователю контекстной информации. Настройка позиций, задержек, стилей и динамического контента позволяет создавать интерфейсы любого уровня сложности без потери производительности и удобства использования.