иконка discount

Скидка 15% по промокоду

кибер понедельник до 01.12иконка discount
CYBER2025
логотип PurpleSchool
логотип PurpleSchool

Всплывающая подсказка в 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)

Нюанс с доступностью часто недооценивают. Давайте посмотрим, с какими проблемами вы можете столкнуться:

  1. Дублирование информации
    Когда вы дублируете видимый текст в title, часть скринридеров может:

    • прочитать и текст, и title,
    • в итоге пользователь услышит одно и то же дважды.
  2. Недоступность для клавиатуры
    Пользователь, который перемещается по странице с клавиатуры (через Tab), может не увидеть системную подсказку:

    • в некоторых браузерах подсказки по title отображаются только при наведении мыши;
    • для фокуса клавиатуры подсказка может не появляться.
  3. Сложность чтения
    Некоторые скринридеры читают 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 не добавляет никакой реальной ценности:

  1. Элемент уже хорошо описан и понятен:

    • кнопка с понятной подписью «Сохранить» внутри формы сохранения;
    • ссылка «Подробнее», за которой следует ясный контекст.
  2. Нет дополнительной информации, которую нужно показать:

    • текст элемента самодостаточен;
    • пояснения рядом уже есть.
  3. Вы планируете полноценные кастомные подсказки:

    • библиотека тултипов на 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 осмысленно

Я предлагаю такой чек-лист:

  1. Есть ли дублирование видимого текста?

    • Если да и нет дополнительных деталей, удалите title.
  2. Содержит ли title критичную информацию?

    • Если да, перенесите ее в видимый текст или альтернативные атрибуты.
  3. Понятен ли текст сам по себе?

    • Представьте, что пользователь видит только подсказку: она должна быть ясной и логичной.
  4. Корректна ли локализация?

    • Проверьте, что title переведен так же, как и основной интерфейс.
  5. Не слишком ли длинный текст?

    • Подумайте, можно ли сделать его короче без потери смысла.

Отладка и тестирование

При тестировании 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 услышит пользователь со скринридером. Так можно дать более подробное описание для ассистивных технологий и оставить более короткую подсказку для визуального интерфейса.
ARIA роль - полное руководство для разработчиковСтрелочка вправо

Постройте личный план изучения Html до уровня Middle — бесплатно!

Html — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Все гайды по Html

Тег section в HTML - семантическая разметка структуры страницыТег nav в HTML - полное руководство по семантической навигацииТег main в HTML - подробное руководство по использованиюТег header в HTML - полное практическое руководствоТег footer в HTML - назначение семантика и практические примерыТег figure в HTML - как правильно оформлять иллюстрации и подписиТег figcaption в HTML - подробное руководство с примерамиТег aside в HTML - назначение правильная семантика и примеры
Текстовая область HTML textarea - практическое руководствоВыпадающий список HTML select - полное руководство для разработчиковОпция списка HTML option - как работает и как правильно использоватьАтрибут method в HTML - как правильно отправлять данные формыЗаголовок группы HTML legend - как правильно использовать и оформлятьТег input в HTML - типы атрибуты валидация и примерыТег формы form в HTMLГруппа полей HTML fieldsetАтрибут action в HTML - как правильно задавать адрес отправки формы
Открыть базу знаний

Лучшие курсы по теме

изображение курса

HTML и CSS

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.9
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий