В Popper.js стрелка является отдельным элементом, который указывает
на исходный элемент (reference element) и обеспечивает визуальное
соединение всплывающего блока (popper) с триггером. Управление стрелкой
осуществляется через опцию arrow в объекте
модификаторов, а стилизация включает как позиционирование, так
и внешний вид стрелки.
Чтобы Popper.js корректно работал со стрелкой, необходимо:
<div id="tooltip">
Tooltip content
<div id="arrow" data-popper-arrow></div>
</div>
arrow:const popperInstance = Popper.createPopper(referenceElement, tooltip, {
modifiers: [
{
name: 'arrow',
options: {
element: '#arrow', // селектор или DOM-элемент стрелки
padding: 5, // отступ от границ поппера
},
},
],
});
element — элемент стрелки. Может быть
селектором CSS или DOM-узлом.padding — минимальное расстояние от
границ поппера до стрелки, чтобы стрелка не выходила за край.Popper.js автоматически вычисляет положение стрелки с учётом:
placement поппера (top,
bottom, left, right, с вариациями
-start, -end).padding из модификатора
arrow.При этом координаты стрелки задаются через CSS-переменные:
[data-popper-arrow] {
position: absolute;
width: 10px;
height: 10px;
background: black;
transform: rotate(45deg);
}
Popper.js обновляет стиль top,
left, right,
bottom автоматически, чтобы стрелка была
выровнена с reference элементом.
Внешний вид стрелки задаётся стандартными CSS-свойствами:
width, height — размеры стрелки.background — цвет.border-radius — скругление углов, если требуется.transform — вращение (обычно rotate(45deg)
для ромбовидной стрелки).Пример ромбовидной стрелки с цветом и скруглением:
#arrow {
width: 12px;
height: 12px;
background: #333;
transform: rotate(45deg);
border-radius: 2px;
}
Popper.js добавляет атрибут data-popper-placement на
поппер. Это позволяет использовать CSS для изменения внешнего вида
стрелки в зависимости от позиции:
[data-popper-placement^='top'] #arrow {
bottom: -6px;
}
[data-popper-placement^='bottom'] #arrow {
top: -6px;
}
[data-popper-placement^='left'] #arrow {
right: -6px;
}
[data-popper-placement^='right'] #arrow {
left: -6px;
}
^= в селекторе означает «начинается с», что
позволяет учесть вариации top-start,
bottom-end и т.д.-6px корректируется под размер стрелки и
padding.Для создания анимаций стрелки можно использовать CSS-переходы:
#arrow {
transition: all 0.2s ease;
}
[data-popper-placement^='top'] #arrow {
transform: rotate(45deg) translateY(0);
}
[data-popper-placement^='bottom'] #arrow {
transform: rotate(45deg) translateY(-2px);
}
padding модификатора arrow,
чтобы стрелка не была сдвинута к краю.Сочетание правильного модификатора
arrow, корректного
CSS-позиционирования и динамического изменения
стилей через data-popper-placement позволяет
создавать аккуратные и адаптивные стрелки для любых всплывающих
элементов.