Позиционирование tooltip относительно курсора в HTML/CSS

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Создавайте динамическую подсказку с фиксированным положением, в реальном времени обновляя её координаты left и top, последовательно применяя значения pageX и pageY при перемещении курсора:

JS
Скопировать код
document.addEventListener('mousemove', event => {
  const tooltip = document.getElementById('tooltip');
  tooltip.style.left = `${event.pageX}px`;
  tooltip.style.top = `${event.pageY}px`;
  tooltip.style.display = 'block';
});

Таким образом, ваша подсказка будет следовать за указателем, непрерывно обновляя своё положение на экране. Чтобы создать небольшой отступ между курсором и подсказкой, скорректируйте значения pageX и pageY.

Кинга Идем в IT: пошаговый план для смены профессии

Продвинутые настройки подсказок

Смещение и отображение подсказки

Добавим подсказке немного смещения, чтобы минимизировать вероятность наложения на другие элементы интерфейса:

JS
Скопировать код
const xOffset = 10;
const yOffset = 20;

document.addEventListener('mousemove', event => {
  const tooltip = document.getElementById('tooltip');
  tooltip.style.left = `${event.pageX + xOffset}px`;
  tooltip.style.top = `${event.pageY + yOffset}px`;
});

Гарантируем, что подсказка отображается только при необходимости:

CSS
Скопировать код
#tooltip {
  display: none;
  position: fixed;
  z-index: 1000;
}

.element:hover + #tooltip {
  display: block;
}

Ограничение области подсказки

Позаботимся о том, чтобы подсказка не выходила за пределы видимой области экрана:

JS
Скопировать код
document.addEventListener('mousemove', event => {
  const tooltip = document.getElementById('tooltip');
  const rightEdge = window.innerWidth – tooltip.offsetWidth;
  const bottomEdge = window.innerHeight – tooltip.offsetHeight;

  tooltip.style.left = `${Math.min(event.pageX + xOffset, rightEdge)}px`;
  tooltip.style.top = `${Math.min(event.pageY + yOffset, bottomEdge)}px`;
});

Содержимое и отделка подсказки

Обогатим подсказки стильной отделкой и полезной информацией:

JS
Скопировать код
const tooltipContent = "<strong>Информация о цветке:</strong> <em>Ароматный</em>";
tooltip.innerHTML = tooltipContent;

Вот так может выглядеть приятный внешний вид подсказки:

CSS
Скопировать код
#tooltip {
  background-color: #fffced;
  border: 1px solid #f5e6a8;
  border-radius: 6px;
  padding: 8px;
  white-space: nowrap;
}

Интеракция с элементами на странице

Сделаем подсказку взаимодействующей с элементами на странице:

HTML
Скопировать код
<a href="#" data-tooltip-content="Подробнее об этом разделе">О нас</a>
JS
Скопировать код
document.querySelectorAll('[data-tooltip-content]').forEach(element => {
  element.addEventListener('mouseenter', event => {
    const tooltip = document.getElementById('tooltip');
    tooltip.innerHTML = event.target.getAttribute('data-tooltip-content');
    tooltip.style.display = 'block';
  });

  element.addEventListener('mouseleave', () => {
    const tooltip = document.getElementById('tooltip');
    tooltip.style.display = 'none';
  });
});

Визуализация

Вообрази подсказку как бабочку (🦋), всегда следующую за положением курсора:

Markdown
Скопировать код
Курсор (🖱️) движется по экрану:
[🖱️........🌸........🌺........]

Где бы он ни был, "бабочка" (🦋) следует за ним:
[....🦋....🖱️....🦋....🖱️....]

При наведении на 🌸 "бабочка" предоставляет необходимую **информацию**.

Правильное позиционирование подсказки гарантирует её доступность в непосредственной близости от курсора. 🖱️+🦋=💡

Усовершенствование подсказки

Контроль переполнения и управление Z-индексом

Этими свойствами CSS можно улучшить поведение подсказки, сделав её расположение более гармоничным и контент видимым:

CSS
Скопировать код
#tooltip {
  overflow: hidden;
  z-index: 1000;
}

Относительное позиционирование элемента поможет правильно расположить абсолютно позиционированные дочерние элементы.

Эмодзи и символы юникода

Добавьте в подсказки эмодзи или символы юникода для большей наглядности:

HTML
Скопировать код
<div data-tooltip-content="✅ Отметить как выполненное">Задача</div>

Псевдоэлементы CSS

Псевдоэлемент ::after позволяет создавать подсказки без использования JavaScript:

CSS
Скопировать код
.element:hover::after {
  content: attr(data-tooltip-content);
  position: absolute;
  display: block;
  /* Дополнительное оформление */
}

Оптимизация для различных устройств

Подсказки должны эффективно работать и на сенсорных устройствах:

JS
Скопировать код
element.addEventListener('touchstart', showTooltipFunction);
element.addEventListener('touchend', hideTooltipFunction);

Как видите, ваша подсказка обеспечит комфортный опыт использования при работе с любым типом устройств.

Полезные материалы

  1. CSS Tooltip — руководство по созданию подсказок с эффектом наведения.
  2. События мыши — обучение работе с событиями мыши для динамичного позиционирования.
  3. Popper – движок позиционирования — применение Popper.js для динамического расположения элементов.
  4. Tooltip | jQuery UI — создание динамических подсказок с помощью плагина jQuery UI.
  5. Подсказки и переключатели — обеспечение доступности и полезные рекомендации по использованию.