分别了解 offsetWidth、clientWidth、scrollWidth 和 -Height

2024-01-07

StackOverflow 上有几个关于offsetWidth / clientWidth / scrollWidth (and -Height,分别),但没有人给出这些值的全面解释。

此外,网络上有多个来源提供了令人困惑或不正确的信息。

您能否给出完整的解释,包括一些视觉提示? 另外,如何使用这些值来计算滚动条宽度?


CSS 盒子模型相当复杂,尤其是在滚动内容时。虽然浏览器使用 CSS 中的值来绘制框,但如果您只有 CSS,则使用 JS 确定所有尺寸并不简单。

这就是为什么每个元素都有六个 DOM 属性以方便您使用:offsetWidth, offsetHeight, clientWidth, clientHeight, scrollWidth and scrollHeight。这些是代表当前视觉布局的只读属性,并且所有这些属性都是integers(因此可能会出现舍入误差)。

让我们详细了解一下它们:

  • offsetWidth, offsetHeight:虚拟框的大小,包括所有边框。可以通过添加来计算width/height以及填充和边框(如果元素有)display: block
  • clientWidth, clientHeight:框内容的视觉部分,不包括边框或滚动条,但包括填充。不能直接从CSS计算,取决于系统的滚动条大小。
  • scrollWidth, scrollHeight:框所有内容的大小,包括当前隐藏在滚动区域之外的部分。不能直接从CSS计算,要看内容。

试试看:jsFiddle http://jsfiddle.net/y8Y32/25/


Since offsetWidth考虑到滚动条宽度,我们可以用它通过公式计算滚动条宽度

scrollbarWidth = offsetWidth - clientWidth - getComputedStyle().borderLeftWidth - getComputedStyle().borderRightWidth

不幸的是,我们可能会遇到舍入错误,因为offsetWidth and clientWidth始终是整数,而实际大小可能是缩放级别不是 1 的小数。

请注意,这

scrollbarWidth = getComputedStyle().width + getComputedStyle().paddingLeft + getComputedStyle().paddingRight - clientWidth

does not由于 Chrome 已回归,因此可以在 Chrome 中可靠地工作width滚动条已经被减去。 (此外,Chrome 将 padding Bottom 渲染到滚动内容的底部,而其他浏览器则不会)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分别了解 offsetWidth、clientWidth、scrollWidth 和 -Height 的相关文章

  • PHP 联系表单未提交

    您好 我之前曾成功使用过这个非常简单的 php 联系脚本 但当我尝试在新的 HTML 页面上实现它时 表单不会提交 任何人都可以看到任何明显的错误吗 任何帮助将非常感激 这是表单的 html div div
  • ie11 中的 SVG 问题

    我有一个 div 其高度设置为 320 像素 然后它的子元素宽度设置为 100 它的子文件是一个 SVG 文件 我将其宽度设置为容器的 200 在运行良好的 Chrome 和 Firefox 中 我得到了如下所示的漂亮图像 HTML 看起来
  • 如何使用 CSS 绘制一个向左的三角形?

    我已经很久没有建造这个向上的三角形了 我怎样才能改变我的 CSS 使角指向左边 http jsfiddle net 3sP8q http jsfiddle net 3sP8q left corner width 0 height 0 bor
  • 如何将安全中心与 Flexbox 一起使用?

    居中的弹性盒项目可能会出现不良行为当他们溢出容器时 https stackoverflow com questions 33454533 cant scroll to top of flex item that is overflowing
  • 角度斜线被编码

    我和这个人有同样的问题 angularjs slash after hashbang gets encoded https stackoverflow com questions 17530924 angularjs slash after
  • 固定 CSS 导航栏

    我最近解决了困扰我一段时间的 CSS 导航栏问题 现在我遇到了将其固定到顶部的问题 以便当您滚动页面时它会向下滚动 我知道我需要添加的是 Position fixed 但我不知道在哪里添加它 我最近的尝试导致文本被修复 但导航栏的背景却没有
  • CSS3家谱,如何添加妻子

    我正在关注这个guide http thecodeplayer com walkthrough css3 family tree关于如何仅使用 CSS3 制作家谱 但我真的不知道如何结婚 To clarify What the codes
  • 如何使用 JavaScript 提高音频加载速度?

    我已经创建了播放代码 mp3使用 JavaScript 文件 但该文件在 Android 上播放需要很长时间 我想在点击文本图像后快速播放声音 如何提高 Android 的加载速度 我的 JavaScript 代码 if window au
  • 使用 jquery 触发 css3 关键帧

    我写了一个关键帧动画 webkit keyframes cubemove 0 webkit transform translateZ 194px rotateY 0deg 20 webkit transform translateZ 194
  • 使用 Flexbox 时 Apex 图表无法正确调整大小

    最近 我将 Floats 更改为 FlexBox 以便更轻松地使用面板 正如我在其他问题上所建议的那样 虽然大多数事情都按我的预期工作 但更改后我在使用 Apex Charts 时遇到了问题 完整代码在这里 https github com
  • 为什么 HTML 5 没有内置可编辑组合框或本地菜单? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • HTML 中的自定义自关闭/不配对标签?

    以下代码 jsfiddle http jsfiddle net CUZta var div document createElement div div innerHTML
  • 使用 AppleScript 单击 safari 网页按钮

    我想弄清楚如何单击网页中的按钮 例如 点击谷歌网页中的 手气不错 按钮 这是我尝试过的 tell application Safari make new document with properties URL https www goog
  • 不透明动画在 IE 上不起作用

    我有一个动画菜单 其中包含一些级联不透明动画 这些动画在打开菜单和悬停每个按钮时执行 它只是每 100 毫秒向菜单上的每个图标添加 colorHigh 类 你可以看到一个现场演示在这里 http germanalvarez net 5 la
  • 当位置从相对固定变为固定时,div 的宽度会发生变化

    当 div topNav 的位置样式从相对更改为固定时 其宽度会更改几个像素 我找到了一个 jquery 插件 http imakewebthings github com jquery waypoints 它可以优雅地执行我正在寻找的相同
  • 在 X 轴刻度上渲染 HTML

    我想在 D3 图表的 x 轴上渲染 HTML 基本上 我希望轴上的每个标签都是到数据中另一列的超链接 我试过了 x domain data map function d return a href d Name a 但它根本不起作用 我得到
  • css 变换,chrome 中的锯齿状边缘

    我一直在使用 CSS3 转换来旋转网站中带有边框的图像和文本框 问题是 Chrome 中的边框看起来呈锯齿状 就像没有抗锯齿的 低分辨率 游戏一样 在 IE Opera 和 FF 中看起来好多了 因为使用了 AA 仍然清晰可见 但也没有那么
  • 在原始颜色和设置颜色之间设置动画背景

    我有带有随机初始背景颜色的 HTML 元素 我需要在原始 初始 和新元素之间对选定元素的背景颜色进行动画处理 我一直在尝试使用 keyframes blink red 0 background color initial color ini
  • 垂直滚动,与 div/元素/锚点对齐/对齐

    我发现了一些可爱的网站 http www mini jp event campaign big point http www mini jp event campaign big point http www twenty8twelve c
  • Selenium 查看鼠标/指针

    有什么方法可以在运行测试时真正看到硒鼠标吗 要么是 Windows 光标图像 要么是某种点或十字线或任何东西 我正在尝试使用拖放功能selenium and java in an HTML5Web 应用程序 并且能够看到光标以了解它实际在做

随机推荐

  • 使用 -Ylog-classpath 运行 sbt

    当我运行 sbtcompile 时出现这样的错误 missing or invalid dependency detected while loading class file DefaultReads class error Could
  • PHP 将 Excel (.xls) 转换为 pdf [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何 php java 开源软件转换器或 php 库可以将 xls 文件转换为 pdf 文档 概
  • 如何使用R将年度数据转换为月度数据?

    我有2000年至2015年15年的逐年GDP数据 我想将这些数据转换为月度数据 其中只有月份和年份 我只想将当年的值复制到所有月份 我怎样才能在 R 中做到这一点2010 年的值是 1708 我想为 2010 年的所有月份复制相同的值 我的
  • 最长的数字循环周期

    我试图找到小于 1000 的数字 该数字除以 1 时会产生最长的重复数字串 我有一个十进制数字列表 必须找到具有最长重复序列的数字 这是我到目前为止所拥有的 numbers 2 999 decimal representations num
  • 由于 Android 不活动,15 分钟后自动注销

    如何在android中使用计时器因用户不活动而在15分钟后自动注销 我在 loginActivity java 中使用以下代码 public class BackgroundProcessingService extends Service
  • 错误:无法显示子报表。子报告在预览中有效 - 但在部署时无效

    我有一个运行多个子报告的主报告 我的一个子报告在预览中运行得非常好 但是当我部署该报告并从浏览器运行它时 我只是得到 错误 无法显示子报表 我做了一些研究 但仍然不确定问题是什么 我在不同的浏览器中尝试过 主报告和子报告的数据源都使用相同的
  • 类型错误:无法读取未定义的属性“measureInWindow”

    环境 Windows 10 Node js 10 x Expo 35 0 0 React 16 8 React native 0 62 0 React navigation 3 0 7 开发了一个简单的应用程序来测试 Android 应用程
  • 如何创建提交登录表单的书签

    我意识到从安全角度来看这并不是很好 但请幽默一下 有没有办法创建一个提交表单 例如登录表单 的书签 例如 这有效 但前提是当前浏览器窗口中加载了页面 javascript function document body innerHTML
  • 如何在android中生成release key

    我已经完成了简单的地图应用程序 这里我从 debug keystore 获得了 api 密钥 它在模拟器上工作正常 当我尝试将其作为 apk 文件获取并在设备上运行时 它没有显示地图 我想我需要为其创建发布密钥 我如何为其生成发布密钥以及如
  • 使用向导时如何将输入框值绑定到支持 bean 属性中的映射值

    我正在使用 Primefaces 向导组件 在一个选项卡上 我根据以前的选项卡输入 用户类型 动态创建输入框 输入框文本标签源自列表 在我的支持 bean 中 我有一个映射 其中包含作为键的输入标签和作为值的输入框输入 单击下一步 我希望使
  • 反应本机应用程序中的 canOverrideExistingModule 问题

    大家好 我尝试使用react native camera模块创建一个相机应用程序 当我尝试在我的设备 Android 手机 上运行此应用程序时 出现以下错误 任何人都可以为我提供解决方案吗 转到文件 MainApplication java
  • IIS url 重写 - css 和 js 被错误地重写

    我的 urlrewrites 存在问题 每当我指向要重写的页面时 它都无法显示 因为它还将规则应用于我的网页中引用的 css 和 js 文件 为了尝试解决这个问题 我放入了 css 和 js 的完全限定路径 这在未应用重写的任何页面上都呈现
  • 创建对变量的引用(类似于 PHP 的“=&”)?

    在 PHP 中 可以创建一个引用变量 以便两个命名变量可以查看相同的值 a 1 b a echo a 1 echo b 1 b 2 echo a 2 我希望在 Python 中实现类似的目标 具体来说 我想创建对对象属性的引用 例如 cla
  • C - 使用 scanf 读取特殊字符,例如 'ã'

    是否有可能使scanf读取所有特殊字符 我知道你可以使用scanf n s string 强制 scanf 接受空格 但是我可以对特殊字符做同样的事情吗 例如 当我尝试输入 N o 时 结果只是 N 就像scanf遇到 unicode 字符
  • 如何在 Visual Studio 中安装 C# 类库?

    我正在尝试使用我找到的类库关于这里的另一个问题 https stackoverflow com a 281381 1934286 总的来说 我对 C Visual Studio 和 OOP 还很陌生 所以如果这不是正确的问题 请原谅我 我点
  • GIT 无法生成 Askpass 克隆 Git 存储库时没有此类文件或目录 [重复]

    这个问题在这里已经有答案了 我参考了很多网站来解决 VS 2017 TFS 中的 Git 存储库克隆问题 但无法修复 请帮我 以下是 Visual Studio 版本详细信息 微软 Visual Studio 专业版 2017 版本 15
  • 构建 xunit.xml 文件后应该使用 xUnitPublisher 还是 xUnitBuilder?

    我正在自动化 dot net core 构建 鉴于 Jenkins 文件中的以下代码片段 我为每个测试项目生成一个 XML 文件 在接下来的步骤中 我想处理这些 XML 文件 詹金斯给出了两个选择 我很困惑该使用哪个选项 我使用 处理 还是
  • 循环使用translate3d制作的轮播

    我有一个带有拖动选项的轮播translate3d 考虑到使用translate3d为了转到下一张幻灯片 我最终翻译到了轮播的末尾 你能帮我找到解决方案吗 下一张幻灯片逻辑 goNext this carousel style transfo
  • 如何访问隐藏在 DS.PromiseArray 中的数组数据

    这是以下内容的后续内容 访问 ember js 中的另一个模型数据 https stackoverflow com questions 19386351 accessing another models data in ember js 我
  • 分别了解 offsetWidth、clientWidth、scrollWidth 和 -Height

    StackOverflow 上有几个关于offsetWidth clientWidth scrollWidth and Height 分别 但没有人给出这些值的全面解释 此外 网络上有多个来源提供了令人困惑或不正确的信息 您能否给出完整的解