getBoundingClientRect — это встроенный метод
DOM-элемента, который возвращает объект DOMRect с размерами
и положением элемента относительно окна браузера. В контексте
Popper.js этот метод играет ключевую роль при расчёте
позиции всплывающих элементов (попперов), таких как тултипы,
dropdown-меню и модальные окна.
Метод element.getBoundingClientRect() возвращает объект
с следующими свойствами:
x и y — координаты верхнего левого угла
элемента относительно viewport по осям X и Y.width и height — ширина и высота
элемента.top, right, bottom,
left — координаты соответствующих сторон элемента
относительно viewport.Пример:
const rect = referenceElement.getBoundingClientRect();
console.log(rect.top); // расстояние от верхнего края viewport до верхнего края элемента
console.log(rect.right); // расстояние от левого края viewport до правого края элемента
console.log(rect.width); // ширина элемента
Popper.js использует getBoundingClientRect для
определения anchor элемента
(reference element) и расчёта позиции popper.
Метод обеспечивает точное измерение даже при прокрутке страницы или
трансформациях CSS.
Основные применения:
Расчёт координат поппера Popper получает размеры
и положение reference-элемента через getBoundingClientRect,
затем вычисляет координаты для позиционирования всплывающего
элемента.
Поддержка трансформаций и прокрутки В отличие от
свойств типа offsetTop или offsetLeft,
getBoundingClientRect учитывает текущий скролл,
CSS-трансформации и масштабирование, что делает позиционирование
корректным в любых условиях.
Динамическое обновление позиции При изменении
размера окна или содержимого страницы Popper вызывает
getBoundingClientRect повторно для пересчёта позиции. Это
позволяет реализовать адаптивные тултипы и меню.
import { createPopper } from '@popperjs/core';
const referenceElement = document.querySelector('#button');
const popperElement = document.querySelector('#tooltip');
const popperInstance = createPopper(referenceElement, popperElement, {
placement: 'top',
modifiers: [
{
name: 'computeStyles',
options: {
adaptive: true,
},
},
],
});
console.log(referenceElement.getBoundingClientRect());
// => DOMRect { x: 100, y: 50, width: 80, height: 30, ... }
Здесь Popper использует объект DOMRect, возвращаемый
getBoundingClientRect, чтобы определить точку
привязки поппера и применить нужные смещения для точного
позиционирования.
getBoundingClientRect всегда возвращаются относительно
видимой области окна браузера, а не документа.transform: scale, translate, что позволяет
точно позиционировать попперы даже при изменениях визуального масштаба
элемента.margin,
необходимо делать дополнительные вычисления.getBoundingClientRect, а не
offsetTop/offsetLeft, чтобы учесть прокрутку и
трансформации.update() после изменения
размеров или позиции reference-элемента.display: none), метод вернёт
0 для всех координат и размеров. Для корректной работы
поппера нужно убедиться, что reference-элемент видим.getBoundingClientRect — фундаментальный инструмент для
точного позиционирования в Popper.js, обеспечивающий согласованность
координат и размеров вне зависимости от скролла, трансформаций и
динамически изменяемого контента.