Система координат на странице
Размеры элементов
Метрики
Метрики — свойства элементов, отражающие размеры и отступы элементов в пикселях.
element.offsetParent — содержит ссылку на первый родительский элемент с
нестатичным позиционированием или BODY, если таких нет.
element.offsetLeft/Top — смещение относительно element.offsetParent
Считаются устаревшими, в разных браузерах может быть разное поведение
element.clientLeft/Top — padding + скроллбар если есть, по сути
равно ширине border
element.scrollLeft/Top — насколько прокручен элемент, т. е. высота скрытой области.
Для document.documentElement.scrollLeft/Top могут быть ошибки в некоторых браузерах,
лучше использовать window.pageX/YOffset
Можно изменять. Также можно установить с помощью методов:
window.scrollTo(pageX,pageY) // абсолютные координаты,
window.scrollBy(x,y) // прокрутить относительно текущего места.
elem.scrollIntoView(options) // прокрутить, чтобы элемент elem стал виден.
// у последнего метода есть параметры, (позволяющие указать плавность
// анимации и позицию вложенного элемента) —
// https://developer.mozilla.org/ru/docs/Web/API/Element/scrollIntoView
element.offsetWidth/Height — ширина вместе с padding, border и
полосой прокрутки
element.clientWidth/Height — ширина + padding, без border и полосы прокрутки
element.scrollWidth/Height — то же, что и element.clientWidth/Height, но с
учётом прокрутки, т. е. как если убрать прокрутку и показать всё содержимое целиком
Element.getBoundingClientRect()
Возвращает TextRectangle, состоящий из полей:
top - смещение относительно верхнего края области просмотра (не документа). Т. е. если страницу
проскроллить, то значение изменится. Чтобы получить значение относительно документа — top + window.pageYOffset
left - нижнего края
width и height — то же, что и element.offsetWidth/Height
bottom === top + height
right === left + width
x и y — то же, что и top и left, но работают только в новых браузерах
Метрики из jQuery
$(element).width/height() — как и element.clientWidth/Height, но без padding
$(element).innerWidth/height() — то же, что и element.clientWidth/Height
$(element).outerWidth/height(includeMargin) — без аргумента как element.offsetWidth/Height
Если передать true, будет включать margin
$(element).offset() — возвращает объект с полями top и left, где
left === element.getBoundingClientRect().left + window.pageXOffset
top === element.getBoundingClientRect().top + window.pageYOffset