Dom7 — это облегчённая и высокопроизводительная библиотека для работы с DOM, изначально созданная для фреймворка Framework7, но полностью совместимая с любым проектом на JavaScript. Одной из важных возможностей Dom7 является работа с размерами элементов на странице, что необходимо для точной верстки, анимаций и динамических интерфейсов.
Dom7 предоставляет несколько методов, которые позволяют получать как размеры элемента, так и его положение на странице.
1. width() и height()
Методы width() и height() возвращают
внутреннюю ширину и высоту элемента без учёта padding и
border. Если коллекция содержит несколько элементов, возвращается размер
первого элемента.
const el = $('.box'); // выбираем элемент
const boxWidth = el.width();
const boxHeight = el.height();
console.log(boxWidth, boxHeight);
Ключевой момент: если элемент скрыт через
display: none, эти методы могут вернуть 0, так
как элемент не имеет размеров в DOM.
2. outerWidth([includeMargins]) и
outerHeight([includeMargins])
Эти методы возвращают полные размеры элемента,
включая padding и border. Аргумент includeMargins позволяет
добавить к результату внешние отступы.
const el = $('.box');
const fullWidth = el.outerWidth(true); // с учётом margin
const fullHeight = el.outerHeight(); // без margin
console.log(fullWidth, fullHeight);
Особенность: при передаче true
учитываются все внешние отступы, что полезно при позиционировании
элементов относительно соседних блоков.
3. offset()
Метод offset() возвращает объект с координатами элемента
относительно документа, а не относительно окна
просмотра.
const el = $('.box');
const position = el.offset();
console.log(position.top, position.left);
Возвращаемый объект имеет два свойства:
top — расстояние от верхнего края документа до верхнего
края элемента.left — расстояние от левого края документа до левого
края элемента.Применение: удобно для вычисления абсолютного положения элемента при прокрутке страницы или позиционировании всплывающих окон.
4. position()
Метод position() возвращает координаты элемента
относительно родительского контейнера с
позиционированием, то есть ближайшего родителя с
position: relative, absolute или
fixed.
const el = $('.box');
const pos = el.position();
console.log(pos.top, pos.left);
Разница с offset() заключается в том, что
position() игнорирует прокрутку документа и вычисляет
положение внутри родителя, что полезно для работы с
внутренними контейнерами.
Элементы с display: none: Методы, возвращающие
размеры (width, height,
outerWidth, outerHeight), не будут корректны
для скрытых элементов. Для получения размеров скрытых элементов часто
используют временное отображение через visibility: hidden
или position: absolute; left: -9999px.
Процентные значения: Методы возвращают размеры в пикселях, даже если CSS задан в процентах или em. Это обеспечивает точность при вычислениях и анимациях.
Коллекции элементов: Если выборка Dom7 содержит
несколько элементов, методы размеров применяются только к
первому элементу коллекции. Для получения размеров
каждого элемента нужно перебрать коллекцию через
.each().
$('.box').each((index, el) => {
const w = $(el).width();
const h = $(el).height();
console.log(`Элемент ${index}: ${w}x${h}`);
});
offset() и
position()| Метод | Относительно чего | Учитывает прокрутку | Включает margin | Включает padding и border |
|---|---|---|---|---|
| offset() | Документ | Да | Нет | Да |
| position() | Родитель | Нет | Нет | Да |
Dom7 позволяет получать размеры окна и области просмотра через объект
window.
const viewportWidth = $(window).width();
const viewportHeight = $(window).height();
console.log(viewportWidth, viewportHeight);
Это полезно для адаптивного интерфейса, чтобы динамически подгонять размеры элементов под текущий viewport.
Размеры элементов часто комбинируются с динамическим изменением стилей. Пример: центрирование элемента внутри родителя.
const parent = $('.container');
const child = $('.modal');
const parentWidth = parent.width();
const parentHeight = parent.height();
const childWidth = child.outerWidth();
const childHeight = child.outerHeight();
child.css({
left: (parentWidth - childWidth) / 2 + 'px',
top: (parentHeight - childHeight) / 2 + 'px'
});
Такой подход позволяет создавать адаптивные и интерактивные интерфейсы без сторонних библиотек.