DOM 中的宽度、高度及各种长度详解
在网页开发中,DOM 元素的尺寸不仅包括宽度和高度,还包括各种与元素位置、偏移和滚动相关的长度属性。本文将详细介绍 DOM 中与宽度、高度及各种长度相关的属性和方法,并介绍如何在网页布局中有效使用这些属性。
1. DOM 元素的宽度和高度
1.1 offsetWidth
和 offsetHeight
offsetWidth
和 offsetHeight
返回元素的总宽度和高度,包括内容区、内边距(padding)、边框(border),以及滚动条的宽度。
const width = element.offsetWidth;
const height = element.offsetHeight;
console.log(`Offset Width: ${width}px`);
console.log(`Offset Height: ${height}px`);
1.2 clientWidth
和 clientHeight
clientWidth
和 clientHeight
返回元素内容区的宽度和高度,包含内边距,但不包括边框、滚动条和外边距。
const clientWidth = element.clientWidth;
const clientHeight = element.clientHeight;
console.log(`Client Width: ${clientWidth}px`);
console.log(`Client Height: ${clientHeight}px`);
1.3 scrollWidth
和 scrollHeight
scrollWidth
和 scrollHeight
返回元素内容的完整宽度和高度,包括被滚动视口遮挡的部分。
const scrollWidth = element.scrollWidth;
const scrollHeight = element.scrollHeight;
console.log(`Scroll Width: ${scrollWidth}px`);
console.log(`Scroll Height: ${scrollHeight}px`);
1.4 getBoundingClientRect()
getBoundingClientRect()
返回一个 DOMRect
对象,描述元素的宽度、高度及相对于视口的位置。
const rect = element.getBoundingClientRect();
console.log(`Width: ${rect.width}px`);
console.log(`Height: ${rect.height}px`);
console.log(`Top: ${rect.top}px`);
console.log(`Left: ${rect.left}px`);
2. DOM 元素的各种长度属性
2.1 offsetLeft
和 offsetTop
offsetLeft
和 offsetTop
用于获取元素相对于其最近的已定位父元素的水平和垂直偏移量。对于不太复杂的页面布局,这些属性非常有用。
const offsetLeft = element.offsetLeft;
const offsetTop = element.offsetTop;
console.log(`Offset Left: ${offsetLeft}px`);
console.log(`Offset Top: ${offsetTop}px`);
2.2 scrollLeft
和 scrollTop
scrollLeft
和 scrollTop
返回或设置元素的水平和垂直滚动位置。它们表示的是元素内容被滚动到的偏移量,通常用于处理滚动事件或程序化滚动。
// 获取当前滚动位置
const scrollLeft = element.scrollLeft;
const scrollTop = element.scrollTop;
console.log(`Scroll Left: ${scrollLeft}px`);
console.log(`Scroll Top: ${scrollTop}px`);
// 设置滚动位置
element.scrollLeft = 100;
element.scrollTop = 200;
2.3 clientLeft
和 clientTop
clientLeft
和 clientTop
返回元素内容区与其边框内边缘之间的水平和垂直距离。通常,这些值表示元素的边框宽度。
const clientLeft = element.clientLeft;
const clientTop = element.clientTop;
console.log(`Client Left (Border Width): ${clientLeft}px`);
console.log(`Client Top (Border Width): ${clientTop}px`);
2.4 pageXOffset
和 pageYOffset
pageXOffset
和 pageYOffset
返回文档在当前视口中的水平和垂直滚动距离。这些属性通常与 window.scrollX
和 window.scrollY
互换使用。
const pageXOffset = window.pageXOffset;
const pageYOffset = window.pageYOffset;
console.log(`Page X Offset: ${pageXOffset}px`);
console.log(`Page Y Offset: ${pageYOffset}px`);
2.5 scrollWidth
和 scrollHeight
scrollWidth
和 scrollHeight
除了可以用在具体的元素上获取内容的总宽高,还可以用在 document
上,获取整个文档的滚动宽度和高度。这在需要处理整个页面的滚动时非常有用。
const documentScrollWidth = document.documentElement.scrollWidth;
const documentScrollHeight = document.documentElement.scrollHeight;
console.log(`Document Scroll Width: ${documentScrollWidth}px`);
console.log(`Document Scroll Height: ${documentScrollHeight}px`);
3. 网页宽度、高度及相关长度属性
3.1 window.innerWidth
和 window.innerHeight
返回浏览器窗口内部的宽度和高度,即可视区域的尺寸,不包括工具栏、滚动条等非内容部分。
const viewportWidth = window.innerWidth;
const viewportHeight = window.innerHeight;
console.log(`Viewport Width: ${viewportWidth}px`);
console.log(`Viewport Height: ${viewportHeight}px`);
3.2 document.documentElement.clientWidth
和 document.documentElement.clientHeight
获取网页的布局视口宽度和高度,通常用于在需要考虑滚动条宽度时获取准确的视口尺寸。
const layoutViewportWidth = document.documentElement.clientWidth;
const layoutViewportHeight = document.documentElement.clientHeight;
console.log(`Layout Viewport Width: ${layoutViewportWidth}px`);
console.log(`Layout Viewport Height: ${layoutViewportHeight}px`);
3.3 document.body.scrollWidth
和 document.body.scrollHeight
获取整个网页的宽度和高度,包括滚动区域,适合用于处理内容较多且需要滚动的页面。
const pageWidth = document.body.scrollWidth;
const pageHeight = document.body.scrollHeight;
console.log(`Page Width: ${pageWidth}px`);
console.log(`Page Height: ${pageHeight}px`);
3.4 window.outerWidth
和 window.outerHeight
获取浏览器窗口的整体宽度和高度,包括窗口的装饰部分(如边框、工具栏等)。
const outerWidth = window.outerWidth;
const outerHeight = window.outerHeight;
console.log(`Outer Width: ${outerWidth}px`);
console.log(`Outer Height: ${outerHeight}px`);
3.5 window.scrollX
和 window.scrollY
window.scrollX
和 window.scrollY
返回当前视口在 X 轴和 Y 轴上的滚动距离,通常用于获取页面滚动位置的实时信息。
const scrollX = window.scrollX;
const scrollY = window.scrollY;
console.log(`Scroll X: ${scrollX}px`);
console.log(`Scroll Y: ${scrollY}px`);
4. 各种长度属性的实际应用场景
4.1 固定定位与滚动定位
在处理固定定位的元素(如浮动导航栏)时,可以通过 offsetTop
和 scrollTop
来确定元素的初始位置和滚动后的新位置。
const navbar = document.getElementById('navbar');
const stickyOffset = navbar.offsetTop;
window.addEventListener('scroll', () => {
if (window.pageYOffset > stickyOffset) {
navbar.classList.add('sticky');
} else {
navbar.classList.remove('sticky');
}
});
4.2 弹性盒布局的子元素定位
在弹性盒布局中,子元素相对于父元素的偏移可以通过 offsetLeft
和 offsetTop
来确定,便于在复杂布局中调整子元素位置。
const childElement = document.querySelector('.flex-container .child');
const childOffsetLeft = childElement.offsetLeft;
const childOffsetTop = childElement.offsetTop;
console.log(`Child Offset Left: ${childOffsetLeft}px`);
console.log(`Child Offset Top: ${childOffsetTop}px`);
4.3 网页滚动动画
在实现平滑滚动效果时,scrollTop
和 scrollHeight
可以用来计算滚动的目标位置,并通过动画效果平滑地滚动到该位置。
function smoothScrollTo(targetPosition) {
window.scrollTo({
top: targetPosition,
behavior: 'smooth'
});
}
const target = document.getElementById('section');
smoothScrollTo(target.offsetTop);
各种长度属性的简要说明
1. DOM 属性
1.1 document.body.clientWidth
- 说明: 返回
BODY
对象的宽度,不包括滚动条、边框、外边距等。 - 用途: 获取网页的可见区域宽度。
1.2 document.body.clientHeight
- 说明: 返回
BODY
对象的高度,不包括滚动条、边框、外边距等。 - 用途: 获取网页的可见区域高度。
1.3 document.documentElement.clientWidth
- 说明: 返回整个文档的可见区域宽度,包含滚动条的宽度。
- 用途: 获取视口的宽度。
1.4 document.documentElement.clientHeight
- 说明: 返回整个文档的可见区域高度,包含滚动条的高度。
- 用途: 获取视口的高度。
1.5 document.body.offsetWidth
- 说明: 返回
BODY
对象的宽度,包括边框和滚动条。 - 用途: 获取包括边线在内的网页可见区域宽度。
1.6 document.body.offsetHeight
- 说明: 返回
BODY
对象的高度,包括边框和滚动条。 - 用途: 获取包括边线在内的网页可见区域高度。
1.7 document.body.scrollWidth
- 说明: 返回
BODY
对象内容的总宽度,包括滚动部分。 - 用途: 获取网页正文的完整宽度。
1.8 document.body.scrollHeight
- 说明: 返回
BODY
对象内容的总高度,包括滚动部分。 - 用途: 获取网页正文的完整高度。
1.9 document.body.scrollTop
- 说明: 获取或设置网页被卷去的内容的垂直距离。
- 用途: 用于获取或设置页面的垂直滚动位置。
1.10 document.body.scrollLeft
- 说明: 获取或设置网页被卷去的内容的水平距离。
- 用途: 用于获取或设置页面的水平滚动位置。
1.11 window.screenTop
- 说明: 返回当前窗口相对于屏幕顶部的垂直位置。
- 用途: 用于定位窗口在屏幕上的垂直位置。
1.12 window.screenLeft
- 说明: 返回当前窗口相对于屏幕左侧的水平位置。
- 用途: 用于定位窗口在屏幕上的水平位置。
1.13 window.screen.height
- 说明: 返回屏幕的总高度。
- 用途: 用于获取设备屏幕的分辨率高度。
1.14 window.screen.width
- 说明: 返回屏幕的总宽度。
- 用途: 用于获取设备屏幕的分辨率宽度。
1.15 window.screen.availHeight
- 说明: 返回屏幕可用工作区的高度,不包括操作系统保留的任务栏等区域。
- 用途: 获取屏幕实际可用的高度。
1.16 window.screen.availWidth
- 说明: 返回屏幕可用工作区的宽度,不包括操作系统保留的任务栏等区域。
- 用途: 获取屏幕实际可用的宽度。
2. jQuery 函数
2.1 $(window).height()
- 说明: 获取当前窗口的可视区域高度。
- 用途: 用于动态获取视口的高度。
2.2 $(document).height()
- 说明: 获取当前文档的总高度。
- 用途: 用于动态获取文档的高度,包括滚动部分。
2.3 $(document.body).height()
- 说明: 获取
BODY
元素的高度。 - 用途: 用于获取文档
BODY
部分的高度。
2.4 $(document.body).outerHeight(true)
- 说明: 获取
BODY
元素的总高度,包括内边距(padding)、边框(border)和外边距(margin)。 - 用途: 用于获取
BODY
的完整高度。
2.5 $(window).width()
- 说明: 获取当前窗口的可视区域宽度。
- 用途: 用于动态获取视口的宽度。
2.6 $(document).width()
- 说明: 获取当前文档的总宽度。
- 用途: 用于动态获取文档的宽度,包括滚动部分。
2.7 $(document.body).width()
- 说明: 获取
BODY
元素的宽度。 - 用途: 用于获取文档
BODY
部分的宽度。
2.8 $(document.body).outerWidth(true)
- 说明: 获取
BODY
元素的总宽度,包括内边距(padding)、边框(border)和外边距(margin)。 - 用途: 用于获取
BODY
的完整宽度。
3. HTML 精确定位属性
3.1 scrollHeight
- 说明: 获取对象的滚动高度,即包括被滚动部分在内的总高度。
- 用途: 用于处理内容高度超出视口时的滚动情况。
3.2 scrollLeft
- 说明: 获取或设置对象的水平滚动距离。
- 用途: 用于控制或获取对象的水平滚动位置。
3.3 scrollTop
- 说明: 获取或设置对象的垂直滚动距离。
- 用途: 用于控制或获取对象的垂直滚动位置。
3.4 scrollWidth
- 说明: 获取对象的滚动宽度,即包括被滚动部分在内的总宽度。
- 用途: 用于处理内容宽度超出视口时的滚动情况。
3.5 offsetHeight
- 说明: 获取对象相对于父坐标(
offsetParent
)的高度,包括内边距、边框。 - 用途: 用于布局计算时获取元素的实际显示高度。
3.6 offsetLeft
- 说明: 获取对象相对于父坐标(
offsetParent
)的左侧位置。 - 用途: 用于定位元素在父元素中的水平位置。
3.7 offsetTop
- 说明: 获取对象相对于父坐标(
offsetParent
)的顶部位置。 - 用途: 用于定位元素在父元素中的垂直位置。
3.8 event.clientX
- 说明: 获取事件相对于文档的水平坐标。
- 用途: 用于处理鼠标事件,确定点击或移动的位置。
3.9 event.clientY
- 说明: 获取事件相对于文档的垂直坐标。
- 用途: 用于处理鼠标事件,确定点击或移动的位置。
3.10 event.offsetX
- 说明: 获取事件相对于事件源容器的水平坐标。
- 用途: 用于精确获取点击事件在容器内的位置。
3.11 event.offsetY
- 说明: 获取事件相对于事件源容器的垂直坐标。
- 用途: 用于精确获取点击事件在容器内的位置。
3.12 document.documentElement.scrollTop
- 说明: 获取或设置文档垂直方向的滚动值。
- 用途: 用于控制或获取页面的垂直滚动位置。
3.13 event.clientX + document.documentElement.scrollLeft
3.14 event.clientY + document.documentElement.scrollTop
- 说明: 获取事件相对于文档的坐标加上滚动的值。
- 用途: 用于计算事件在文档中的实际位置,考虑到滚动因素。