当 css 中提供 height 属性时,scrollHeight 给出错误的值

2023-12-15

我尝试获取 div 的滚动高度,并且得到了正确的结果,但是当我在 css 中为该特定 div 添加 height 属性时,我得到了不同的值。

只需运行fiddle您将在控制台中看到scrollheight属性的值等于268(等于所有子项的高度之和)

但是当我在 css 中添加高度值(例如 height:50px;)时,输出结果为 252(我认为差异是最后一个子元素的边距)。

有人可以回答为什么会有差异吗?

Edit由于问题不清楚,我重新表述了 id。当我指定父 div 的高度时,我得到的滚动高度为 252 像素,而如果我不指定高度或将其设置为“自动”,我得到的滚动高度为 268 像素。我只是想知道为什么在后一种情况下边距也不会崩溃?我并不担心折叠的边距,只是想知道为什么这两种情况下滚动高度不同?

下面给出的答案完全没问题。不过,我还使用 javascript 获得了正确的滚动高度(包括最后一个子元素的下边距)

var h = $(div).height();
$(div).height("auto");
var ch = $(div)[0].scrollHeight;
$(div).height(h);

重新阅读您的问题后,我发现您在问其他问题。但这仍然是我之前发布的相同答案。

总高度计算正确254px。当您显式设置小于该值的高度时,浏览器仅计算238px。这 - 就像你的猜测 - 没有16px底部的边距,发生的原因是“边距塌陷"。由于这条规则,最后一个边距被丢弃:

父母和第一个/最后一个孩子

折叠的边距最终位于父级之外。

因此,要修复它,您可以使用:

overflow: hidden;

或者您可以使用填充(此填充会“重建”您的边距行为,请参阅下面的说明):

p {
    padding: 8px;
}
p:first-child, p:last-child {
    padding-top: 16px;
}

欲了解更多信息,请访问 MDN:利润崩溃.


Edit:这是我在重新阅读您的问题之前的第一个答案。我将把它留在这里,以防有人有类似的问题,也因为它会导致相同的解决方案。

这解决了:为什么兄弟姐妹的高度/边距不符合预期?

您的身高计算正确。你所面临的称为:边距塌陷.

这意味着您所有的顶部和底部边距<p>-标签被“合并”。在您的情况下,有 7 行,这意味着:

  • 18px是一行的高度
  • 顶部和底部边距均为 16 像素
  • 第一个元素的顶部和最后一个元素的底部按预期显示
  • 所有其他边距都折叠起来

结果是:

  7 * 18px (height)
+ 6 * 16px (margins in-between)
+ 2 * 16px (margin top and bottom)
= 254px (exact the value calculated by the browser)

您可以通过使用轻松避免这种情况padding反而。

欲了解更多信息,请访问 MDN:利润崩溃.

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

当 css 中提供 height 属性时,scrollHeight 给出错误的值 的相关文章

随机推荐

  • 计算pandas数据框中每列值的变化

    有没有什么巧妙的方法来计算 pandas 数据框中每列值的变化次数 我不想在每一列上循环 例如 import pandas as pd frame pd DataFrame time 1234567000 1234567005 123456
  • AngularJs指令添加属性,事件不被触发

    大家早上好 我对这个指令有点困惑 我想要的是从 getProperties 函数接收一个 JSON 字符串 例如 class someclass ng change someChange ng click someCLick 该指令将创建
  • Android 寻呼机暂停问题

    我正在使用 Pager 和兼容性库构建一个应用程序 每当我尝试暂停应用程序时 例如 当我回到桌面时 我的应用程序都会强制关闭 我从未遇到过此类错误 因此我不知道如何解决它 我将向您展示我的代码 而我确信您不必查看它 public class
  • 使用Functional Swift 求斐波那契项的总和

    我正在尝试学习函数式 Swift 并开始从 Project Euler 做一些练习 甚至斐波那契数列 问题2 斐波那契数列中的每一项新项都是通过添加前两项而生成的 从 1 和 2 开始 前 10 项将是 1 2 3 5 8 13 21 34
  • 删除R中的多个值

    我有一个大约有 14 000 行和 40 列的数据集 我试图删除数据集第一列中具有以下值的所有行 但是当我执行类似操作时 filter data set data set DMS rem rem lt c 02M177 02M267 02M
  • EJB 3.1 依赖注入失败

    我创建了一个无状态会话 bean 如下所示 WebServlet name ProductController urlPatterns ProductController public class ProductController ext
  • MS Teams 活动源通知不会发送到移动设备

    我已经成功实施了活动提要通知在我的 MS Teams 应用程序 选项卡 中 问题是 我在移动设备上没有收到它们 既没有推送通知 也没有活动源中的项目 Web 和桌面上的活动源填充了相同的项目 但移动设备上没有任何内容 Web 和桌面版本工作
  • 混乱的 CSV 会导致异常

    我想我发现了一个错误 或者也许不是 但 Super CSV 无法很好地处理 我正在使用 MapReader 解析包含 41 列的 CSV 文件 但是 我收到了 CSV 并且为我提供 CSV 的 Web 服务弄乱了一行 标题 行是一个制表符分
  • C# system.speech.recognition 替代词

    我目前正在使用 Microsoft Speech API 将语音听写为文本 但我真正需要的是程序可以使用的替代听写 我将其用于我的荣誉论文 为此我希望知道任何话语的前 10 种解释 2011 年 有人提出了一个非常相似 即使不完全一样 的问
  • 使用大型 txt 文件训练 Gensim word2vec

    我有一个像这样的大txt文件 150MG intrepid bumbling duo deliver good one better offering considerable cv freshly qualified private 我想
  • 为什么我的 SqlPackage DeployReport 返回空报告?

    我正在尝试使用 SqlPackage exe 运行 DeployReport 操作 但它返回一个空报告 这是我没有预料到的 因为我已经删除了多个视图和 SProc 它通过在 Visual Studio 中运行 Compare 操作来显示 根
  • 滚动视图内可扩展高度的 GridView

    我在滚动视图中使用 Expandableheightgrideview 我的问题是 当我尝试在 gridview 中添加内容时 内容未正确展开 当其高度存在时 它会显示 2 个滚动条 它应该是整个页面的一个通用滚动条 内容的底部是隐藏的要在
  • 连接关闭后继续 php 脚本

    我试图在页面 连接关闭后继续执行 PHP 脚本 用户将每隔 1 小时轮询一次脚本 我想返回一些 json 输出并希望在后台继续执行脚本 我使用的是共享主机 无法使用 cron 作业 这是我尝试过的 ob start ignore user
  • 得到两个日期之间的年份?

    我有 2 个日期 例如 2009 11 11 2002 11 11 我想得到他们之间的年份 7 我该怎么做 月份和日期始终相同 我不想使用 有没有合适的方法呢 我强烈建议使用 Sarfraz Ahmed 建议的功能 如果您想手动完成 并且没
  • 如何在 WildFly 20 上设置 Samesite cookie?

    我需要在 WildFly20 服务器响应上将相同的站点 cookie 属性设置为 严格 我需要通过服务器配置来完成此操作 有什么帮助吗 JMart 的答案是正确的 但需要将文件添加到您的网络应用程序 undertow handlers co
  • 使用 SwiftUI 使自定义 UIView 方面比例适合/填充时出现问题

    SwiftUI 中没有公共 API 来响应 View 协议的可调整大小修饰符 只有 SwiftUI 中的 Image 可以与 ressized 一起使用 自定义 UIView 如 GIF 的 UIView 现在无法调整大小 我使用 SDWe
  • 用于哈希更改的 Chrome 扩展程序 WebNavigation 侦听器

    我一直在使用chrome webNavigation onCommitted and onCompleted侦听器成功地检测到页面更改 但现在有一些网站完全加载新页面 仅更改了 URL 哈希部分 这些改变并不会激发这两位听众的兴趣 有什么方
  • 如何比较datetimepicker中的两个日期

    我正在做 Windows 项目 其中有两个 DateTimePicker 控件 一个用于 StartDate 另一个用于 EndDate 在运行时 当用户从该控件中选择 StartDate 和 EndDate 时 它 应该读取文本文件 即
  • 复制/重现 Django 开发环境

    我正在和我的朋友一起开发 Django 项目 该项目依赖于一些 python 模块 我在 virtualenv 中安装了 django 和其他依赖项 django 项目的代码位于一个存储库中 所有朋友都可以访问该存储库 他们可以签出 克隆
  • 当 css 中提供 height 属性时,scrollHeight 给出错误的值

    我尝试获取 div 的滚动高度 并且得到了正确的结果 但是当我在 css 中为该特定 div 添加 height 属性时 我得到了不同的值 只需运行fiddle您将在控制台中看到scrollheight属性的值等于268 等于所有子项的高度