Гид по технологиям

Как добавить подсказку (tooltip) к изображению в HTML

5 min read Веб-разработка Обновлено 05 Jan 2026
Подсказка над изображением в HTML
Подсказка над изображением в HTML

Ноутбук на столе, на экране крупное изображение

Интерактивные сайты удерживают внимание пользователей — а подсказки (tooltips) над изображениями полезны для карт, графиков и фотогалерей. В этой статье показано, как реализовать простую подсказку над изображением с отображением координат курсора с помощью HTML, CSS и JavaScript, а также как улучшить её для мобильных и сценариев с доступностью.

К чему стремиться

Цель: при наведении курсора на изображение показывать компактную подсказку рядом с курсором, в которой можно выводить любые данные (например, X/Y пиксели внутри изображения). Решение должно:

  • работать в современных браузерах (Chrome, Firefox, Safari, Edge);
  • корректно позиционировать подсказку внутри контейнера изображения;
  • поддерживать клавиатурный и тач-доступ;
  • иметь простую настройку стилей и текста.

Быстрая реализация — пошагово

Ниже — пошаговая реализация, которая соответствует базовому сценарию из исходного примера.

  1. Создайте файл index.html с базовой структурой:


  
    
    Image Tooltip Example
  
  

  
  1. Внутри body добавьте контейнер, который будет включать изображение и подсказку:
  1. Вставьте изображение в контейнер (убедитесь, что файл image.jpg находится рядом с index.html):
Ваше изображение
  1. Добавьте элемент подсказки под изображением в том же контейнере:
  1. В добавьте базовые стили для контейнера и подсказки:
  1. Добавьте скрипт в конце body. Ниже — простая версия, затем — улучшенная, более надёжная:
  1. Откройте index.html в браузере и наведите курсор на изображение — должна появиться подсказка с координатами.

Важно: в простой реализации используются getBoundingClientRect() и clientX/clientY для надёжного расчёта координат внутри изображения независимо от прокрутки страницы.

Полный пример файла index.html (готово к использованию)

Ниже — объединённый, улучшенный пример с поддержкой клавиатуры и сенсорных экранов, а также с плавной анимацией.



  
    
    Image Tooltip Example
    
  
  
    
Ваше изображение

Тонкости позиционирования и координат

  • clientX/clientY — координаты относительно видимой области окна (viewport). Полезны для позиционирования подсказки.
  • getBoundingClientRect() даёт позицию и размеры элемента в viewport; вычесть rect.left/rect.top — получим координаты курсора внутри изображения.
  • offsetX/offsetY дают координаты внутри события при работе с элементом, но в некоторых случаях (например, при вложенных элементах или при SVG) они работают не всегда одинаково; getBoundingClientRect() универсальнее.

Доступность и UX

  • Добавьте role=”tooltip” и aria-hidden, обновляйте их при показе/скрытии.
  • Сделайте изображение фокусируемым (tabindex=”0”), обработайте focus/blur, чтобы подсказка была доступна клавиатурным пользователям.
  • Для тач-устройств используйте touchstart/touchmove/touchend и продумайте, когда скрывать подсказку (например, при двойном тапе или по таймауту).
  • Не используйте pointer-events у подсказки, если она должна быть интерактивной (напр., содержать ссылку); в таком случае обрабатывайте клики аккуратно.

Улучшения и альтернативные подходы

  1. Использовать библиотеку подсказок (Popper.js, Tippy.js) для сложного позиционирования и оптимизации под разные сценарии.
  2. Рендерить подсказку внутри SVG или canvas, если изображение — интерактивная карта или диаграмма с собственными координатами.
  3. Для больших изображений с масштабированием учитывать текущую трансформацию (scale) и DPI: координаты в пикселях могут отличаться от CSS-пикселов.
  4. Встраивать данные меток в data-атрибуты элементов (data-x, data-y, data-info) и показывать контекстную информацию вместо простых координат.

Когда этот подход не подойдёт

  • Если изображение рисуется на canvas и пересчитывается часто — удобнее подписывать события непосредственно на canvas с учётом внутренней системы координат.
  • Если требуется сложная логика отображения подсказок (перекрытия, избегание краёв, динамическое содержимое) — лучше использовать проверенную библиотеку.

Чек-листы и критерии приёмки

Критерии приёмки

  • Подсказка появляется при наведении и исчезает при уходе курсора.
  • Подсказка корректно показывает X и Y внутри изображения.
  • Подсказка не уходит за границы контейнера (если применять ограничения).
  • Подсказка доступна с клавиатуры (фокус) и корректно обрабатывает события тач‑устройств.

Разработчик — чек-лист

  • Код не блокирует основную нить браузера.
  • Обработка событий очищается при удалении элемента.
  • Проверено в нескольких браузерах и на мобильных.

QA — чек-лист

  • Наведение мышью: подсказка появляется и позиционируется корректно.
  • Прокрутка страницы: позиция подсказки остаётся корректной.
  • Тач: подсказка появляется на первом тапе и скрывается на втором/по таймауту.
  • Клавиатура: фокус даёт подсказку.

Дизайнер — чек-лист

  • Цвета соответствуют контрастным требованиям (WCAG).
  • Размер шрифта и отступы — читаемы на мобильных.
  • Анимация не отвлекает и не длится дольше 200ms.

Тесты и приёмка

Тестовые сценарии

  • Сценарий 1: Навести курсор в центр изображения — ожидается подсказка с приблизительно центральными координатами.
  • Сценарий 2: Навести курсор в левый верхний угол — X и Y около 0.
  • Сценарий 3: Прокрутить страницу, снова навести — координаты внутри изображения корректны.
  • Сценарий 4: На мобильном — тапнуть и сдвинуть палец, подсказка обновляет координаты.

Критерии приёмки

  • Прохождение всех тестовых сценариев на целевых браузерах.
  • Нет визуальных артефактов при быстром перемещении курсора.

Шпаргалка — кратко

  • Для надёжных координат: use rect = el.getBoundingClientRect(); x = clientX - rect.left.
  • Для позиционирования внутри контейнера: убедитесь, что контейнер position: relative.
  • Для доступности: role=”tooltip”, aria-hidden, tabindex для фокусируемых элементов.

Заключение

Вы теперь знаете, как реализовать подсказку над изображением, показывающую X/Y координаты курсора, и как улучшить её для реальных продуктов: поддержка клавиатуры, тача, корректное позиционирование и обработка границ. Для сложных кейсов рассмотрите использование проверенных библиотек или рендер подсказок в канве/векторе.

Изображение с подсказкой на курсоре

Краткое напоминание: начинайте с простой реализации, затем добавляйте улучшения по мере необходимости — это облегчает отладку и делает интерфейс надёжным и доступным.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

IndentationError в Python: как исправить
Python

IndentationError в Python: как исправить

XLOOKUP в Excel: руководство и примеры
Excel

XLOOKUP в Excel: руководство и примеры

Удалённый доступ к файлам через OneDrive
Облако

Удалённый доступ к файлам через OneDrive

Как создать эффективное интро для YouTube
Видеоконтент

Как создать эффективное интро для YouTube

Chrome Actions — быстрые команды в адресной строке
браузер

Chrome Actions — быстрые команды в адресной строке

Raspberry Pi камера: подключение и использование
Аппаратное обеспечение

Raspberry Pi камера: подключение и использование