Подсказки (Tooltip) в Radix UI — это интерактивные элементы, которые предоставляют дополнительную информацию при наведении, фокусе или касании. Важнейшая цель при реализации подсказок — обеспечение доступности (accessibility, a11y), чтобы информация была доступна не только мышью, но и клавиатурой, а также программам чтения с экрана (screen readers). Radix UI предоставляет встроенные механизмы для соответствия ARIA-стандартам.
Компонент подсказки в Radix UI строится из нескольких ключевых частей:
TooltipProvider Оборачивает приложение и управляет глобальными настройками, такими как задержка появления подсказки.
import * as Tooltip from '@radix-ui/react-tooltip';
<Tooltip.Provider delayDuration={300}>
{/* Внутренние подсказки */}
</Tooltip.Provider>
delayDuration — задержка перед отображением подсказки
(в мс).TooltipRoot Основной контейнер подсказки, объединяющий три элемента: триггер, контент и возможные дополнительные элементы (arrow).
<Tooltip.Root>
<Tooltip.Trigger>Наведи на меня</Tooltip.Trigger>
<Tooltip.Content>Текст подсказки</Tooltip.Content>
</Tooltip.Root>
aria-describedby связывает триггер с содержимым
подсказки.TooltipTrigger Элемент, который инициирует появление подсказки. Может быть кнопкой, ссылкой или любым интерактивным элементом.
tabIndex={0}.aria-expanded и
aria-haspopup.TooltipContent Отображаемый текст подсказки.
Поддерживает стилизацию и позиционирование через props
side, align, sideOffset.
<Tooltip.Content side="top" align="center" sideOffset={5}>
Подсказка с верхней стороны
<Tooltip.Arrow />
</Tooltip.Content>
side — направление появления: top,
right, bottom, left.align — выравнивание относительно триггера:
start, center, end.sideOffset — смещение от триггера в пикселях.TooltipArrow Опциональный элемент, визуально указывающий на триггер. ARIA на него не накладывается, но улучшает визуальную связность.
Radix UI использует ARIA-атрибуты для корректного взаимодействия с screen readers:
aria-describedby — связывает триггер с подсказкой,
позволяя читалке озвучивать её содержимое.role="tooltip" выставляется на содержимое
подсказки.<Tooltip.Content role="tooltip">
Дополнительная информация
</Tooltip.Content>
Это обеспечивает совместимость с большинством современных читалок, включая NVDA и VoiceOver.
Подсказки должны работать не только при наведении мышью, но и при фокусе клавиатурой:
TooltipTrigger.Escape.Tab без нарушения логики
отображения подсказки.<Tooltip.Trigger tabIndex={0}>Фокусируй меня</Tooltip.Trigger>
Задержка появления и исчезновения важна для комфортного восприятия:
delayDuration — задержка перед открытием
подсказки.skipDelayDuration — время до закрытия при быстром
перемещении курсора.Интерактивные подсказки: если нужно, чтобы
пользователь мог взаимодействовать с содержимым подсказки (например,
ссылками или кнопками внутри), используется prop asChild и
компонент Tooltip.Content оборачивается в интерактивный
контейнер.
<Tooltip.Content side="top">
<div>
<p>Можно кликать по ссылкам внутри подсказки</p>
<a href="#">Перейти</a>
</div>
</Tooltip.Content>
На сенсорных устройствах подсказки ведут себя иначе:
styled-components).keyframes или framer-motion.<Tooltip.Content className="tooltip-fade">
Появляющаяся подсказка
</Tooltip.Content>
.tooltip-fade {
animation: fadeIn 0.2s ease-out;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(-5px); }
to { opacity: 1; transform: translateY(0); }
}
Эти принципы обеспечивают, что подсказки в Radix UI будут одновременно визуально привлекательными, интерактивными и полностью доступными для всех пользователей.