Arrow в Radix UI является элементом, который используется в компонентах типа Tooltip, Popover, Dropdown Menu и других, где необходимо визуально указать на источник содержимого. Он обеспечивает ясность интерфейса и улучшает пользовательский опыт, визуально связывая всплывающий элемент с целевым элементом на странице.
Radix UI реализует Arrow как отдельный дочерний компонент, который следует размещать внутри родительского элемента, например, Popover или Tooltip. Основные свойства компонента:
Пример базовой структуры:
import * as Tooltip from '@radix-ui/react-tooltip';
<Tooltip.Root>
<Tooltip.Trigger>Наведи на меня</Tooltip.Trigger>
<Tooltip.Content side="top" align="center">
Подсказка с стрелкой
<Tooltip.Arrow />
</Tooltip.Content>
</Tooltip.Root>
В данном примере стрелка автоматически располагается по центру верхнего края подсказки, указывая на триггер.
Radix UI поддерживает позиционирование стрелки через свойства родительского компонента (side, align) и дополнительные стили.
"top",
"bottom", "left", "right"."start", "center", "end".Пример:
<Tooltip.Content side="bottom" align="start" sideOffset={10}>
Подсказка с настраиваемой стрелкой
<Tooltip.Arrow offset={5} />
</Tooltip.Content>
Здесь стрелка отстоит от края на 5 пикселей, а контент смещён вниз на 10 пикселей.
Стрелка в Radix UI — это фактически элемент <div>
с CSS-трансформацией, которая формирует треугольник. Настройка внешнего
вида возможна через стили или классы:
<Tooltip.Arrow
style={{
fill: 'white',
stroke: 'black',
strokeWidth: 1,
width: 12,
height: 6,
}}
/>
Radix UI Arrow интегрируется с CSS-анимациями или сторонними
библиотеками стилей. Например, можно добавить плавное появление стрелки
при наведении с помощью keyframes:
@keyframes fadeInArrow {
0% { transform: scale(0); opacity: 0; }
100% { transform: scale(1); opacity: 1; }
}
.arrow-animated {
animation: fadeInArrow 0.3s ease-out forwards;
}
<Tooltip.Arrow className="arrow-animated" />
Это позволяет создавать современный и отзывчивый интерфейс, сохраняя все преимущества Radix UI по управлению позиционированием.
offset может
быть функцией, возвращающей разные значения в зависимости от положения
контента, что важно для адаптивных интерфейсов.--radix-tooltip-arrow-height и
--radix-tooltip-arrow-width.<Tooltip.Arrow
style={{
'--radix-tooltip-arrow-height': '10px',
'--radix-tooltip-arrow-width': '20px',
backgroundColor: 'red',
}}
/>
Arrow синхронизируется с поведением родительского компонента. При
динамическом изменении позиции контента (например, при ограничении места
на экране), стрелка корректно подстраивается, сохраняя направление и
выравнивание. Важно учитывать, что для сложных сценариев
позиционирования лучше использовать свойства
collisionPadding и avoidCollisions, которые
предоставляет родительский компонент.
Хотите, я могу подготовить отдельный подробный блок с практическими примерами всех сторон стрелки и их комбинаций с выравниванием, чтобы статья стала максимально наглядной и полезной для учебника?