为什么scrollWidth只包含左内边距?

2024-01-19

所以,我有一个 DIV#Wrapper它有固定的宽度。在该 DIV 中,我还有另一个 DIV#Panel它也有固定的宽度:

<div id="Wrapper">
    <p>...</p>
    <div id="Panel">Panel</div>
    <p>...</p>
</div>  

有时,Panel 的宽度比 Wrapper 的宽度大,在这种情况下,我想通过 JavaScript 加宽 Wrapper,以便它完美地包裹 Panel。

现场演示: http://jsfiddle.net/H6rML/ http://jsfiddle.net/H6rML/

我打算使用.scrollWidth在包装器上确定面板的宽度。然而,问题是 Wrapper 有水平填充,并且.scrollWidth由于某种原因只包括包装器的左填充。所以:

Wrapper.scrollWidth === Wrapper.LeftPadding + Panel.Width

所以,给定:

#Wrapper {
    width: 200px;
    padding: 10px;        
}

#Panel {
    width: 300px;
}

Wrapper.scrollWidth回报310px,这不是很有用。如果.scrollWidth不包含任何填充,只返回面板的宽度,我可以使用它(我会手动将填充添加到该值)。如果两个填充都包含在内,我也可以使用它。但为什么只包含左侧填充呢? (顺便说一句,这种行为似乎是跨浏览器的。)

一些附加说明:

  1. 我无法直接设置包装器上的宽度。在我的实际代码中,我在 Wrapper 上方几个级别的祖先元素上设置宽度,并使用自定义 API 来设置宽度。这就是为什么我需要检索完整的320px value.

  2. 我想要一个不依赖于包装器内容的解决方案。在我的演示中,它是一个面板,但在其他情况下,可能会有不同的元素溢出,甚至是多个元素。这就是为什么我和.scrollWidth在包装纸上。

有没有办法获取值320px无需手动添加正确的填充.scrollWidth value?


顺便说一句,根据标准,应包含正确的填充:

scrollWidth 属性必须返回运行这些的结果 脚步:

  1. 如果该元素没有任何关联的 CSS 布局框,则返回零并终止这些步骤。

  2. 如果该元素是根元素并且文档不处于怪异模式,则返回 max(文档内容宽度,innerWidth 的值)。

  3. 如果该元素是 HTML body 元素并且文档处于怪异模式,则返回 max(文档内容宽度,innerWidth 的值)。

  4. 返回“padding-left”属性的计算值,加上“padding-right”的计算值,再加上元素的内容宽度。

Source: http://www.w3.org/TR/cssom-view/ http://www.w3.org/TR/cssom-view/

为什么浏览器不做出相应的行为?


为了进一步提高帖子的清晰度,让我总结一下两个主要问题:

(1) 如果标准规定正确的填充应包含在.scrollWidth值,那么为什么浏览器不做出相应的行为呢?

(2) 是否可以检索到正确的值(320px就我而言),而无需手动添加正确的填充?


这个问题已经在另一个帖子里回答了

这个问题的答案位于这里:当子元素水平溢出时,为什么父元素的右内边距会被忽略? https://stackoverflow.com/questions/10054870/when-a-child-element-overflows-horizontally-why-is-the-right-padding-of-the-par


我不确定我是否理解正确,但从我读到的内容来看,我假设您想根据 #Panel 更改 #Wrapper 的宽度。在这种情况下,也许你可以尝试以下方法:

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

为什么scrollWidth只包含左内边距? 的相关文章

  • 保持未知数量的 div 居中,每行最多 4 个

    我有一个简单的问题 但我自己无法解决 简而言之 有一个未知电话我必须在页面中放置的元素数量 最多 每行 4 个元素 但仍居中 此图片给您一个提示 我为了示例而设置它 详细 在上图中我涵盖了不同的场景 例如 如果总共有 5 个元素 则应使用第
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • HTML 中部分着色的阿拉伯语单词

    我不会说阿拉伯语 但我需要我们网站上对阿拉伯语的具体支持 我需要将部分阿拉伯语单词放在 span 与单词其他部分的风格不同 当我输入两个字符时 and 它们被组合成word 但是当我使用 HTML 标记时 span span 这些字母在输出
  • 如何在使用页面锚点导航时设置“激活”类以在 Angular 2 中引导导航栏?

    我正在使用 Angular 2 和 Bootstrap 4 创建一个单页网站 我创建了一个始终位于页面顶部的导航栏组件 并且我正在使用页面锚点导航 id 请注意 我还没有创建路由模块 到目前为止还没有必要这样做 导航栏代码如下
  • Babel 7 Jest Core JS“TypeError:wks不是函数”

    将我的项目升级到 Babel 7 后 通过 Jest 运行测试会抛出以下错误 测试在 Babel 6 中运行没有任何问题 但在 Babel 7 中失败并出现以下错误 TypeError wks is not a function at Ob
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • Electron - 为什么在关闭事件时将 BrowserWindow 实例设置为 null

    The 电子文档 https electronjs org docs api browser window 提供以下代码示例来创建新窗口 const BrowserWindow require electron let win new Br
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 如何在jquery中以相反的顺序迭代元素? [复制]

    这个问题在这里已经有答案了 我是jquery的新手 我想知道如何使用each 在jquery中以相反的顺序迭代表单元素 任何帮助 将不胜感激 尝试这个 input get reverse each function
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 带有相对路径的 LESS CSS 背景

    我在使用 LESS 作为我的网站的样式表时遇到了问题 就我个人而言 我宁愿在CSS中使用相对路径而不是绝对路径 这只是我的习惯 但是现在当我使用带有导入功能的LESS时 我遇到了如下所示的问题 我有一个main less根文件夹中的文件 i
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构

随机推荐