offsetheight和clientheight_scrollheight属性

offsetheight和clientheight_scrollheight属性介绍网上介绍clientheight、offsetheight、scrollheight的帖子很多,看后感觉明白了,一细想似乎又不明白了。为了获取更权威的解答,查阅了MDN文档,希望能帮助后来人。为了加深理解,看后,最好做下后边的实验。clientheightclientheight,内容的可视区域,不包含border。clientheight=padding+height-横向滚动轴高度。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

介绍

网上介绍clientheight、offsetheight、scrollheight的帖子很多,看后感觉明白了,一细想似乎又不明白了。为了获取更权威的解答,查阅了MDN 文档,希望能帮助后来人。为了加深理解,看后,最好做下后边的实验。

clientheight

clientheight,内容的可视区域,不包含border。clientheight=padding+height-横向滚动轴高度。

The Element.clientHeight read-only property is zero for elements with
no CSS or inline layout boxes, otherwise it’s the inner height of an
element in pixels, including padding but not the horizontal scrollbar
height, border, or margin.
这里写图片描述

offsetheight

offsetheight,它包含padding、border、横向滚动轴高度。
offsetheight=padding+height+border+横向滚动轴高度

The HTMLElement.offsetHeight read-only property is the height of the element including vertical padding and borders, as an integer.
Typically, an element’s offsetHeight is a measurement in pixels of the element’s CSS height, including border, padding and the element’s horizontal scrollbar (if present, if rendered).
For the document body object, the measurement includes total linear content height instead of the element’s CSS height. Floated elements extending below other linear content are ignored.
这里写图片描述

scrollheight

scrollheight,可滚动高度,就是将滚动框拉直,不再滚动的高度,这个很好理解。scrollHeight通常用在iframe自适应内容高度的情况。

The Element.scrollHeight read-only property is a measurement of the height of an element’s content, including content not visible on the screen due to overflow.
The scrollHeight value is equal to the minimum height the element would require in order to fit all the content in the viewpoint without using a vertical scrollbar. It includes the element’s padding, but not its border or margin.
这里写图片描述

试验

现在我们做试验,来验证上述公式。
我们定义了一个滚动div和非滚动div,这两个div高度、宽度、padding、margin、border都一样,区别就是横向滚动不一样,然后分别,打印出clientHeight、offsetHeight、scrollHeight 在线演示地址

#scrolldiv{ width:150px; height:150px; display:block; overflow-y:auto; padding:5px; border: solid red 2px; margin:30px; box-sizing: content-box; }

效果图
这里写图片描述

验证clientHeight

根据公式,clientHeight=height+padding-横向滚动轴高度,143=150+(5+5)-横向滚动轴高度,得出横向滚动轴高度是17。为了看一下横向滚动轴高度是否是17,看一下第二个没有滚动轴的div的clientHeight正好是160,160-143=17,所以,我们可以肯定横向滚动轴高度是17,并且公式是正确的。

这是我们反推出来的横向滚动轴高度是17,根据浏览器的渲染模型也能正向推算出clientHeight,如图
这里写图片描述

可见内容可视高度是133,padding是5,所以clientHeight=渲染后的高度+padding=133+(5+5)=143,也符合预期。

验证offsetHeight

根据公式,offsetheight=padding+height+border+横向滚动轴高度,得出(5+5)+133+(2+2)+17=164,跟显示出来的高度一样。

scrollHeight这里就不验证了。

这张是没有横向滚动轴的渲染图
这里写图片描述

结论

通过上述实验,我们能得出,实际的可视区域比设置的值要小,因为滚动轴占去一部分。在计算时,clientHeight会剔除滚动轴,而offsetHeight会包含滚动轴。记住这两个公式

clientHeight=height+padding-横向滚动轴高度
offsetheight=padding+height+border+横向滚动轴高度

通过做实验,彻底理解了clientHeight、offsetHeight,实践出真知呀!

注意

在做测试时,一定要将css样式放在javascript之前或者window加载完毕后执行js,否则解析结果跟预期不同。

参考

https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
https://developer.mozilla.org/en-US/docs/Web/API/Element/clientHeight

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197291.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月6日 下午7:43
下一篇 2025年9月6日 下午8:22


相关推荐

  • scanf 函数的返回值

    scanf 函数的返回值1 scanf 函数是有返回值的 它的返回值可以分成三种情况 1 正整数 表示正确输入参数的个数 例如执行 scanf d d amp a amp b 如果用户输入 34 可以正确输入 返回 2 正确输入了两个变量 如果用户输入 3 4 可以正确输入 a 无法输入 b 返回 1 正确输入了一个变量 2 0 表示用户

    2026年3月18日
    2
  • 智谱清言(AI智能对话应用) v3.5.1 安卓手机版

    智谱清言(AI智能对话应用) v3.5.1 安卓手机版

    2026年3月12日
    2
  • 黑马程序猿 ———- Java网络技术之 —正則表達式 (Day06)

    黑马程序猿 ———- Java网络技术之 —正則表達式 (Day06)

    2022年1月25日
    47
  • 寄存器寻址方式

    寄存器寻址方式br 寄存器和寻址方式 br nbsp nbsp nbsp 寄存器 在 8086 8088 里 有三组共 13 个 16 位寄存器 br nbsp nbsp nbsp 寄存器 从名字上看 可以知道 它就象书店的行包寄存处 寄存器的名字就象寄存处发给用户取回自已物件的标志牌子 表示物件的存放地址 br nbsp nbsp nbsp 寄存器的内部给构都相同 只不过是一个二字节或一字节的存储空间 别看他们小 作用可大了 所有电脑的运算 都要从他们过关 因为他们的处理速度快嘛 为了区分和准确运用 就要给他们进行科学的分组和起名 br nbsp nbsp nbsp 第一组 数据寄存器

    2026年3月18日
    1
  • 四种黑盒测试方法_八大心态的总结怎么写

    四种黑盒测试方法_八大心态的总结怎么写一、等价类划分法1.定义2.划分等价类2.1有效等价类2.2无效等价类3.划分等价类的标准4.划分等价类的方法5.设计测试用例6.三角形实例二、边界值分析法1.定义2.与等价划分的区别3.边界值分析方法的考虑4.常见的边界值5.边界值分析6.基于边界值分析方法选择测试用例的原则7.实例说明8、三角形问题的边界值分析测试用例三、错误推测方法1.定义2.错误推测方法的基本思想:四、因果图方法1.定义2.因果图法产生的背景:3.因果图介绍4.因果图概念5.采用因果图法设计测试用例的步.

    2022年10月3日
    2
  • 发html邮件乱码 java,Java发送邮件时标题和发件人乱码

    发html邮件乱码 java,Java发送邮件时标题和发件人乱码#Java发送邮件时标题和发件人乱码最近碰到一个问题,Java发送邮件时,查看邮箱结果,发件人及邮件标题正文全部乱码通过翻阅资料,原因及解决方法如下:“`//SetSubject:头字段message.setSubject(MimeUtility.encodeText(mail,MimeUtility.mimeCharset(“gb2312”),null));//设置邮件发送日期m…

    2022年5月14日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号