元素项高度(offsetheight、scrollheight和clientheight)
offsetHeight、scrollHeight 和 clientHeight 是 DOM 元素的三个只读属性,用于获取元素在不同上下文中的高度值。它们的区别主要体现在包含的内容区域和是否考虑滚动、边框、内边距等。
下面是对三者的详细对比:
1. offsetHeight
- 定义:元素的整体高度,包括:
- 内容(content)
- 内边距(padding)
- 水平滚动条(如果存在)
- 边框(border)
- 不包括:外边距(margin)
- 单位:像素(px),返回整数
- 用途:常用于获取元素在页面中实际占据的高度(布局高度)
element.offsetHeight
💡 相当于 CSS 中的
height + padding-top + padding-bottom + border-top + border-bottom + 滚动条高度(如果有)
2. clientHeight
- 定义:元素内部可视区域的高度,包括:
- 内容(可见部分)
- 内边距(padding)
- 不包括:
- 边框(border)
- 外边距(margin)
- 滚动条(即使存在也会被排除)
- 溢出内容(不可见部分)
- 用途:常用于判断视口大小或可滚动容器的可视区域
element.clientHeight
💡 如果元素有滚动条,
clientHeight不包含滚动条宽度/高度。
3. scrollHeight
- 定义:元素全部内容的高度(包括不可见的溢出部分),包括:
- 所有内容(即使被 overflow: hidden 或超出可视区)
- 内边距(padding)
- 不包括:
- 边框(border)
- 外边距(margin)
- 滚动条
- 用途:常用于判断是否可以滚动、实现“滚动到底部”等功能
element.scrollHeight
💡 即使内容未溢出,
scrollHeight也至少等于clientHeight。
📊 对比总结表:
| 属性 | 包含内容 | 包含 padding | 包含 border | 包含滚动条 | 包含溢出内容 |
|---|---|---|---|---|---|
offsetHeight |
可见+布局高度 | ✅ | ✅ | ✅(作为内容的一部分) | ❌(仅布局高度) |
clientHeight |
可视区域高度 | ✅ | ❌ | ❌ | ❌ |
scrollHeight |
全部内容高度 | ✅ | ❌ | ❌ | ✅ |
🧪 示例场景
假设一个 <div> 样式如下:
div {
width: 200px;
height: 100px;
padding: 10px;
border: 5px solid black;
overflow: auto;
}
- 内容总高度为 150px(超出可视区)
- 浏览器滚动条高度忽略(或假设为 0)
那么:
clientHeight= 100 + 10 + 10 = 120px(内容可视区 + padding)offsetHeight= 120 + 5 + 5 = 130px(+ border)scrollHeight= 150 + 10 + 10 = 170px(全部内容 + padding)
注意:实际中
clientHeight不包含滚动条,如果滚动条占用了空间,可视内容区会变小。
✅ 使用建议
- 判断是否滚动到底:
scrollTop + clientHeight >= scrollHeight - 获取元素真实占用空间:用
offsetHeight - 获取可视区域大小:用
clientHeight
希望这能帮你清晰区分这三个常用的高度属性!

浙公网安备 33010602011771号