Олег Марков
Всплывающая подсказка в HTML title
Введение
Атрибут title в HTML часто используют «по инерции» – просто чтобы при наведении мыши появлялась подсказка. На практике за этим простым механизмом стоит больше нюансов, чем кажется. От того, как вы применяете title, зависит доступность интерфейса, поведение в разных браузерах, восприятие подсказок на мобильных устройствах и даже SEO.
Здесь я покажу вам, как работает title, когда его стоит использовать, а когда лучше отказаться от него в пользу других решений. Мы разберем базовые и продвинутые примеры, типичные ошибки и практические рекомендации.
Что такое атрибут title и как он работает
Назначение атрибута title
Атрибут title — это стандартный глобальный атрибут HTML, который можно добавить почти к любому элементу. Его основная задача — дать дополнительную текстовую информацию об элементе. В графическом браузере это чаще всего выражается во всплывающей подсказке при наведении курсора.
С точки зрения спецификации HTML:
titleнесет дополнительное описание, а не основной текст.- Содержимое
titleможет использоваться:- браузером для всплывающей подсказки,
- скринридерами как дополнительная подсказка,
- поисковыми системами как дополнительный сигнал (но не как основной контент).
Важно понимать: наличие всплывающей подсказки — это лишь одно из возможных проявлений title, а не его единственный смысл.
Базовый пример использования title
Давайте разберемся на простом примере ссылки:
<a href="https://example.com" title="Перейти на сайт Example">
Официальный сайт
</a>Комментарии:
<!-- Элемент ссылки -->
<a
href="https://example.com" <!-- URL, на который ведет ссылка -->
title="Перейти на сайт Example" <!-- Текст всплывающей подсказки -->
>
Официальный сайт <!-- Видимый текст ссылки -->
</a>Как это работает в браузере:
- При наведении курсора мыши на текст «Официальный сайт» появляется системная подсказка с текстом «Перейти на сайт Example».
- Если вы откроете страницу на мобильном устройстве, подсказка может вообще не появиться либо появляться по долгому тапу, в зависимости от браузера.
Всплывающая подсказка и поведение браузеров
Смотрите, что важно знать о поведении подсказки:
- Отображение контролируется браузером, а не вами.
- Вы не можете задать стиль, позицию, плавную анимацию или задержку перед показом стандартной подсказки.
- Время отображения ограничено:
- многие браузеры показывают подсказку только несколько секунд и затем скрывают.
- Подсказка появляется не всегда:
- на устройствах с сенсорным экраном поведение нестабильно;
- в некоторых настройках доступности подсказки могут быть отключены.
Из этого вытекает важное правило: нельзя полагаться на title как на единственный источник критически важной информации для пользователя.
Где и как можно использовать title
Глобальный атрибут – почти для всех элементов
title — глобальный атрибут. Это значит, что вы можете использовать его с большинством HTML-элементов:
a— ссылки;button,input,textarea— элементы форм;img— картинки;abbr— аббревиатуры;span,div,pи многие другие.
Пример с картинкой:
<img
src="avatar.jpg"
alt="Фотография пользователя"
title="Нажмите чтобы открыть профиль"
/>Комментарии:
<!-- Изображение пользователя -->
<img
src="avatar.jpg" <!-- Путь к изображению -->
alt="Фотография пользователя" <!-- Альтернативный текст, важен для доступности -->
title="Нажмите чтобы открыть профиль" <!-- Всплывающая подсказка при наведении -->
/>Разница между title и alt для изображений
Очень частый вопрос — чем title отличается от alt у изображения. Давайте разберемся:
alt:- отображается вместо изображения, если оно не загрузилось;
- читается скринридерами как основной текст описания;
- обязателен для доступности, особенно в значимых изображениях.
title:- показывает всплывающую подсказку при наведении (если браузер так реализует);
- может дополнить
alt, но не заменяет его; - не должен содержать информацию, критичную для понимания контента.
Пример корректного сочетания:
<img
src="diagram.png"
alt="Диаграмма роста продаж с 2020 по 2024 год"
title="Наведите чтобы увидеть подробности в отдельном отчете"
/>Комментарий:
<!-- alt описывает саму картинку -->
<!-- title объясняет действие и не дублирует alt полностью -->title у ссылок и кнопок
Ссылки и кнопки — один из самых частых кандидатов на использование title. Но здесь легко ошибиться и продублировать видимый текст, что не имеет смысла.
Пример неудачного использования:
<a href="/contacts" title="Контакты">Контакты</a>Здесь title полностью повторяет текст ссылки. Пользователь и так видит слово «Контакты», а скринридеры могут просто задублировать информацию. В итоге нет ни пользы, ни улучшения UX.
Более осмысленный пример:
<a href="/contacts" title="Откроется страница с формой обратной связи и картой проезда">
Контакты
</a>Здесь title:
- расширяет смысл,
- объясняет, что именно будет на странице «Контакты»,
- при этом видимый текст остается коротким.
Для кнопок:
<button type="button" title="Отменить последние изменения и вернуться к сохраненной версии">
Отменить
</button>Комментарий:
<!-- Короткая подпись на кнопке -->
<!-- Расширенное объяснение действия в title -->Практическое использование title в интерфейсах
Подсказки к иконкам без текста
Очень частый сценарий — иконки без подписи. Например, кнопки управления:
<button type="button" title="Скачать файл">
<!-- Иконка загрузки -->
<svg aria-hidden="true" width="16" height="16">
<!-- ... -->
</svg>
</button>Комментарии:
<!-- title объясняет значение иконки при наведении -->
<!-- aria-hidden="true" скрывает иконку от скринридеров как декоративную -->Но лучше не ограничиваться только title, а добавить текст для экранных читалок:
<button type="button" aria-label="Скачать файл" title="Скачать файл">
<svg aria-hidden="true" width="16" height="16">
<!-- ... -->
</svg>
</button>Комментарий:
<!-- aria-label дает текст для скринридеров -->
<!-- title дает подсказку при наведении мыши -->Так вы делаете кнопку понятной и для мыши, и для клавиатуры, и для ассистивных технологий.
Подсказки к полям форм
Иногда у поля ввода нужно дать дополнительное пояснение, но интерфейс уже перегружен текстом. Тогда title может быть полезен как дополнительный слой подсказки.
<label for="username">Имя пользователя</label>
<input
id="username"
name="username"
type="text"
title="Можно использовать латинские буквы цифры и знак подчеркивания"
/>Комментарии:
<!-- Видимая подпись к полю -->
<label for="username">Имя пользователя</label>
<!-- Поле ввода с дополнительной подсказкой в title -->
<input
id="username"
name="username"
type="text"
title="Можно использовать латинские буквы цифры и знак подчеркивания"
/>Но лучше критичные требования (например, формат логина) выводить также в явном тексте рядом с полем, а не только в title.
Подсказка по аббревиатурам
Элемент abbr специально создан для обозначения аббревиатур. Вместе с title он становится очень удобным:
<p>
В отчете учитывается показатель
<abbr title="Key Performance Indicator">
KPI
</abbr>
за последние 12 месяцев.
</p>Комментарии:
<!-- abbr обозначает аббревиатуру -->
<!-- title содержит ее расшифровку -->Здесь title несет полезную текстовую информацию и логически привязан к элементу.
Подсказка в таблицах
В таблицах бывает полезно пояснить заголовки колонок или значения:
<table>
<thead>
<tr>
<th>Месяц</th>
<th title="Всего продано единиц товара за месяц">
Продажи
</th>
</tr>
</thead>
<tbody>
<tr>
<td>Январь</td>
<td title="Включая онлайн и офлайн продажи">1200</td>
</tr>
</tbody>
</table>Комментарии:
<!-- title на заголовке колонки поясняет показатель -->
<!-- title на ячейке уточняет что входит в число -->Опять же, не стоит прятать критичную информацию только в title. Лучше дублировать важные пояснения в тексте, легендах, сносках.
Ограничения и проблемы использования title
Нельзя стилизовать стандартную подсказку
Стандартная всплывающая подсказка:
- использует системный шрифт и оформление;
- имеет фиксированный фон и рамку, которые вы не можете изменить через CSS;
- позиционируется и отображается так, как решит браузер.
Вы не можете через CSS сделать, например:
/* Это не сработает для стандартной подсказки title */
[title]::tooltip {
background: black;
color: white;
}Если вам нужен кастомный внешний вид подсказки (цвета, отступы, стрелочки, задержка появления), придется реализовывать собственный механизм всплывающих подсказок на JavaScript и CSS. title для этого не подходит.
title и мобильные устройства
На мобильных устройствах title ведет себя непредсказуемо:
- иногда подсказка вообще не показывается;
- иногда появляется при долгом тапе;
- иногда конфликтует с контекстным меню браузера.
Это означает, что на мобильных устройствах пользователь может никогда не увидеть содержимое title.
Поэтому:
- нельзя класть туда информацию, необходимую для понимания интерфейса;
- нельзя строить механику обучения пользователя только через
title.
title и доступность (a11y)
Нюанс с доступностью часто недооценивают. Давайте посмотрим, с какими проблемами вы можете столкнуться:
Дублирование информации
Когда вы дублируете видимый текст вtitle, часть скринридеров может:- прочитать и текст, и
title, - в итоге пользователь услышит одно и то же дважды.
- прочитать и текст, и
Недоступность для клавиатуры
Пользователь, который перемещается по странице с клавиатуры (через Tab), может не увидеть системную подсказку:- в некоторых браузерах подсказки по
titleотображаются только при наведении мыши; - для фокуса клавиатуры подсказка может не появляться.
- в некоторых браузерах подсказки по
Сложность чтения
Некоторые скринридеры читаютtitleтолько по специальным настройкам или отдельным командам. Нельзя рассчитывать, чтоtitleточно будет прочитан.
Практическая рекомендация:
- используйте
aria-label,aria-describedby, четкие подписи и текстовые подсказки; titleрассматривайте только как дополнительный слой, а не как основу доступности.
Пример комбинированного подхода:
<button
type="button"
aria-label="Открыть настройки отображения таблицы"
title="Открыть настройки отображения таблицы"
>
⚙
</button>Комментарий:
<!-- aria-label гарантирует текст для скринридеров -->
<!-- title добавляет подсказку при наведении мышью -->Неиспользование title для SEO-манипуляций
Раньше можно было встретить практику «набивания» title ключевыми словами в надежде на рост позиций в поиске. Сейчас такой подход:
- не дает заметного плюса;
- может ухудшить UX (длинные и бессмысленные подсказки);
- выглядит как спам.
Старайтесь писать в title естественный, полезный текст, который действительно помогает пользователю.
Хорошие практики при работе с title
Не дублируйте уже видимый текст
Если атрибут title полностью дублирует содержимое элемента, он почти бессмысленен. Смотрите, как это выглядит:
<!-- Неудачный пример -->
<button type="button" title="Удалить">Удалить</button>Лучше либо убрать title вовсе, либо расширить его:
<!-- Более осмысленный вариант -->
<button
type="button"
title="Удалить элемент из списка без возможности восстановления"
>
Удалить
</button>Комментарий:
<!-- Видимый текст краткий -->
<!-- title содержит важное уточнение действия -->Держите подсказки короткими и понятными
Слишком длинный текст в title:
- плохо читается во всплывающем формате;
- может обрезаться;
- трудно воспринимается пользователем.
Старайтесь делать текст:
- до 80–100 символов (грубое ориентировочное значение);
- без сложных конструкций;
- без лишних деталей, которые лучше вынести в основной текст.
Пример удачного текста:
<a
href="/report"
title="Откроется подробный отчет за последний месяц в новом окне"
>
Отчет за месяц
</a>Не храните в title критически важную информацию
Вся информация, без которой пользователь не сможет выполнить действие, должна быть:
- видимой (текст, подписи, заголовки);
- доступной из клавиатуры и для скринридеров.
title можно использовать:
- для уточнения действия;
- для второстепенных пояснений;
- для удобства, но не для критичных подсказок.
Пример плохого подхода:
<!-- Плохо: важное условие спрятано только в title -->
<input
type="password"
name="password"
title="Минимум 8 символов одна цифра и одна буква в верхнем регистре"
/>Лучше так:
<label for="password">
Пароль
<span class="hint">
Минимум 8 символов одна цифра и одна заглавная буква
</span>
</label>
<input
id="password"
type="password"
name="password"
title="Минимум 8 символов одна цифра и одна заглавная буква"
/>Комментарии:
<!-- Видимая подсказка внутри label -->
<!-- title дублирует правило в виде всплывающей подсказки -->Следите за локализацией
Если ваш интерфейс многоязычный, атрибуты title нужно переводить так же, как и остальной текст.
Частая ошибка — локализовали все видимые тексты, а title остались на исходном языке. Пользователь может неожиданно увидеть подсказку на другом языке, что снижает доверие и портит восприятие.
Практический совет:
- включайте строки
titleв общую систему локализации; - не забывайте обновлять
titleпри изменении текстов интерфейса.
Когда title лучше не использовать
Случаи, когда можно смело обойтись без title
Есть ситуации, когда title не добавляет никакой реальной ценности:
Элемент уже хорошо описан и понятен:
- кнопка с понятной подписью «Сохранить» внутри формы сохранения;
- ссылка «Подробнее», за которой следует ясный контекст.
Нет дополнительной информации, которую нужно показать:
- текст элемента самодостаточен;
- пояснения рядом уже есть.
Вы планируете полноценные кастомные подсказки:
- библиотека тултипов на JavaScript;
- стилизованные подсказки с HTML-разметкой и логикой.
В этих случаях title чаще всего только мешает.
Не используйте title вместо нормальных тултипов
Если вам нужны:
- красиво оформленные подсказки;
- с разной логикой показа (по клику, при фокусе, при наведении);
- с HTML-разметкой, ссылками, картинками;
то title вам не подойдет. Он:
- показывает только простой текст;
- не умеет HTML;
- не управляется через стили;
- не контролируется по событиям так, как вам нужно.
Здесь уже стоит подключать библиотеку подсказок или написать свою реализацию на JavaScript.
Пример заготовки для своей подсказки (без использования title):
<button
type="button"
class="tooltip-trigger"
aria-describedby="tip-settings"
>
Настройки
</button>
<div id="tip-settings" class="tooltip" role="tooltip">
Здесь вы можете изменить язык формат даты и единицы измерения
</div>Комментарии:
<!-- aria-describedby связывает кнопку с подсказкой -->
<!-- role="tooltip" обозначает подсказку для ассистивных технологий -->
<!-- дальнейшее поведение реализуется через CSS и JavaScript -->Советы по внедрению и проверке title в проекте
Как проверить, что вы используете title осмысленно
Я предлагаю такой чек-лист:
Есть ли дублирование видимого текста?
- Если да и нет дополнительных деталей, удалите
title.
- Если да и нет дополнительных деталей, удалите
Содержит ли title критичную информацию?
- Если да, перенесите ее в видимый текст или альтернативные атрибуты.
Понятен ли текст сам по себе?
- Представьте, что пользователь видит только подсказку: она должна быть ясной и логичной.
Корректна ли локализация?
- Проверьте, что
titleпереведен так же, как и основной интерфейс.
- Проверьте, что
Не слишком ли длинный текст?
- Подумайте, можно ли сделать его короче без потери смысла.
Отладка и тестирование
При тестировании title полезно:
- Проверить поведение в разных браузерах:
- Chrome, Firefox, Safari, Edge.
- Проверить поведение на тач-устройствах:
- как мобильные браузеры показывают (или не показывают) подсказку.
- Проверить с клавиатуры:
- появляется ли подсказка при переходе по Tab.
Также, если есть возможность, протестируйте с популярным скринридером (NVDA, JAWS, VoiceOver), чтобы понять, как ваши title озвучиваются.
Заключение
Атрибут title в HTML — это простой по синтаксису, но непростой по последствиям инструмент. На уровне кода все выглядит элементарно: вы просто добавляете атрибут к нужному элементу. Однако на уровне восприятия пользователем и доступности появляется много нюансов.
Основные моменты, которые важно удерживать в голове:
title— это дополнительное описание, а не основной текст.- Нельзя полагаться на подсказку по
titleкак на единственный источник важной информации. - Поведение всплывающей подсказки зависит от браузера и устройства, и вы почти не можете им управлять.
- Для доступности и UX полезнее в первую очередь опираться на:
- четкие подписи и тексты;
aria-label,aria-describedby;- логичную структуру страницы.
titleстоит использовать там, где он действительно добавляет ценность:- пояснение иконок;
- расшифровка аббревиатур;
- уточнение действий ссылок и кнопок;
- дополнительные пояснения, которые не критичны, но помогают.
Смотрите на title не как на «обязательный атрибут ради галочки», а как на точечный инструмент, который помогает улучшать интерфейс там, где это уместно.
Частозадаваемые технические вопросы и ответы
1. Как обрезать слишком длинный title и показать более короткую подсказку?
Если атрибут title уже используется, но вы хотите показывать сокращенный текст, можно хранить полный текст в data-* атрибуте, а в title писать сокращение:
<button
type="button"
title="Сохранить"
data-full-title="Сохранить документ и закрыть редактор"
>
Сохранить
</button>Дальше по необходимости вы можете с помощью JavaScript подставлять полный текст в кастомный тултип, используя data-full-title, а title оставить минимальным или пустым.
2. Как программно обновить title через JavaScript?
Можно изменить атрибут title у нужного элемента:
<button id="save-btn" title="Сохранить">Сохранить</button>
<script>
// Находим элемент по id
const btn = document.getElementById('save-btn');
// Меняем текст подсказки
btn.title = 'Документ сохранен'; // или btn.setAttribute('title', 'Документ сохранен');
</script>Такой подход удобен, если текст подсказки зависит от состояния (например, до и после сохранения).
3. Как отключить всплывающее окно title, но сохранить сам атрибут для скринридеров?
Обычно подсказка зависит от наличия текстового значения. Минимальный способ скрыть стандартную подсказку — очищать title при наведении мыши и возвращать при уходе:
<button id="btn" title="Скачать отчет">Скачать</button>
<script>
const btn = document.getElementById('btn');
let storedTitle = '';
btn.addEventListener('mouseenter', () => {
storedTitle = btn.title; // Сохраняем текст
btn.title = ''; // Убираем подсказку
});
btn.addEventListener('mouseleave', () => {
btn.title = storedTitle; // Возвращаем текст
});
</script>Скринридеры при этом могут использовать title (особенно если вы вернете его до фокуса с клавиатуры), а стандартная подсказка при наведении мыши показываться не будет.
4. Можно ли вставить HTML-разметку внутрь title?
Нет, атрибут title принимает только текст. Если вы напишете внутри HTML-теги, браузер покажет их как обычный текст, не как разметку. Для подсказок с форматированием, ссылками или картинками нужно создавать собственный тултип (через div, span, role="tooltip" и JavaScript/CSS).
5. Как сделать разные подсказки для мыши и для скринридера?
Используйте комбинацию title и aria-label:
<button
type="button"
title="Нажмите чтобы скачать файл"
aria-label="Скачать ежемесячный финансовый отчет в формате PDF"
/>- Текст из
titleувидит пользователь с мышью. - Текст из
aria-labelуслышит пользователь со скринридером. Так можно дать более подробное описание для ассистивных технологий и оставить более короткую подсказку для визуального интерфейса.
Постройте личный план изучения Html до уровня Middle — бесплатно!
Html — часть карты развития Frontend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Все гайды по Html
Лучшие курсы по теме

HTML и CSS
Антон Ларичев
TypeScript с нуля
Антон Ларичев