使用 box-sizing:border-box 时,jQuery.height() 在 WebKit 和 Firefox 中的行为不同

发布于 2025-01-01 13:20:29 字数 959 浏览 0 评论 0原文

我有一个应用了以下样式的文本区域:

textarea {
    -webkit-box-sizing:border-box;
    -moz-box-sizing:border-box;
}

如果我随后运行以下 javascript/jquery 代码,则使用 Safari(5.0.6) 和 Chrome(16.0.x) 我的文本区域的高度会减半:

$('textarea').each( function() {
    var $this = $(this);
    $this.height( $this.height() );
}

根据 . height(),这是预期的行为,因为 .height() 返回内容高度(无填充、边框),无论 box-sizing 属性如何,但 .height( value ) 设置内容size 占 box-sizing 属性的大小。因此,如果我的文本区域有 content-height:17px 和 padding-height:15px,.height() 将返回 17px。然后,如果我设置 .height(17) 我的文本区域曾经是 32px 高,现在只有 17px 高。

我的实际应用程序正在使用 jQuery.fn.autoResize 1.14 (https://github.com/padolsey /jQuery.fn.autoResize) 在应用了框大小的文本区域上。该代码采用了与我上面描述的类似的特技。

它在 FireFox 10 中工作正常。(也就是说,FireFox 在获取和设置高度时以更对称的方式考虑盒子大小。)

我的问题是:错误在哪里,我应该在哪里寻找/提出解决方法? jQuery.fn.autoResize 插件、jQuery 团队、webkit 还是 FireFox?

I have a textarea with the following style applied:

textarea {
    -webkit-box-sizing:border-box;
    -moz-box-sizing:border-box;
}

If I then run the following javascript/jquery code, my textarea's height gets cut in half using Safari(5.0.6) and Chrome(16.0.x):

$('textarea').each( function() {
    var $this = $(this);
    $this.height( $this.height() );
}

According to the jQuery docs for .height(), this is the expected behavior because .height() returns the content height (no padding, border), regardless of the box-sizing property, but .height( value ) sets the content size accounting for the box-sizing property. So if my textarea has content-height:17px and padding-height:15px, .height() will return 17px. Then, if I set .height(17) my textarea that used to be 32px high is now only 17px high.

My real-world application is using jQuery.fn.autoResize 1.14 (https://github.com/padolsey/jQuery.fn.autoResize) on textareas that have box-sizing applied. That code pulls a similar stunt to what I've described above.

It works fine in FireFox 10. (That is, FireFox accounts for box-sizing in a more symmetrical way when getting and setting height.)

My question is: Where is the bug, and where should I look for/propose a workaround? The jQuery.fn.autoResize plugin, the jQuery team, webkit, or FireFox?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

做个少女永远怀春 2025-01-08 13:20:29

该错误位于 jQuery (http://bugs.jquery.com/ticket/11004) 中使 $(el).height() 不考虑 box-sizing 属性。该修复计划在 v1.8 中发布,但同时您可以使用 $(el).outerHeight() 来获取考虑到填充和边框的框的高度 (http://api.jquery.com/outerHeight/)。

The bug is in jQuery (http://bugs.jquery.com/ticket/11004) that makes $(el).height() not account for the box-sizing property. The fix is scheduled to go out in v1.8, however in the mean time you can use $(el).outerHeight() to get the height of the box accounting for padding and border (http://api.jquery.com/outerHeight/).

嘿看小鸭子会跑 2025-01-08 13:20:29

jQuery 计算中的错误。

解决方案:

var height = $this.outerHeight() - Number($this.css('padding-top').split('px')[0]) - Number($this.css('padding-bottom').split('px')[0]); 

如果有边界 - 也计算它们

Bug in jQuery calculations.

Solution:

var height = $this.outerHeight() - Number($this.css('padding-top').split('px')[0]) - Number($this.css('padding-bottom').split('px')[0]); 

If you have borders - also calculate them

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文