在 Internet Explorer 中获取元素的宽度而不进行填充

发布于 2024-12-10 00:11:49 字数 805 浏览 0 评论 0原文

我想让网站上的图像适合其包含元素的大小,因此我有这样的:

if (userHasMicrositePhoto) {
    var width = $('micrositePhotoDiv').getComputedSize().width;
    $('micrositePhoto').src = "flash/userImage.ashx?type=micrositePhoto&id=" + userId + "&width=" + width;
}

我的处理程序文件 userImage.ashx 返回 ID 给出的图像,缩放到作为参数给出的宽度。

这在 Firefox、Chrome 和 Chrome 中运行良好。 co,但在 Internet Explorer 中不起作用 - 返回的图像太大。我认为这是因为 .getComputedSize().width 报告的宽度包括 Internet Explorer 中填充的大小(但在边框或边距上),但仅返回其他浏览器中的可用区域。结果,Internet Explorer给出的宽度太大。

我找不到任何其他可访问的字段,这些字段允许我在 Internet Explorer 中找到“实际”宽度。我尝试使用 .getCompulatedStyle() 获取填充,以便我可以从总宽度中减去它,但这会返回一个字符串,并且我将 micrositePhotoDiv 元素的样式设置为 < code>padding: 0.75em,所以这不起作用。

我需要做什么才能在 Internet Explorer 中获得正确的宽度?

I want to fit images on my site to the size of their containing element, so I have this:

if (userHasMicrositePhoto) {
    var width = $('micrositePhotoDiv').getComputedSize().width;
    $('micrositePhoto').src = "flash/userImage.ashx?type=micrositePhoto&id=" + userId + "&width=" + width;
}

My handler file userImage.ashx returns the image given by the ID, scaled to the width given as a parameter.

This works fine in firefox, chrome & co, but doesn't work in Internet explorer - the image returned is too large. I think this is because .getComputedSize().width reports a width that includes the size of the padding (but on the border or margin) in Internet explorer, but returns only the usable area in other browsers. As a result, the width given by internet explorer is too large.

I can't find any other fields accessable for.getComputedSize() that allows me to find the 'actual' width in Internet Explorer. I tried using .getComputedStyle() to get the padding so I could subtract it from the total width, but this returns a string, and I am styling the micrositePhotoDiv element as padding: 0.75em, so this doesn't work.

What do I need to do to get the right width in internet explorer?

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

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

发布评论

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

评论(2

我的奇迹 2024-12-17 00:11:49

jQuery width() 就是这样做的(请参阅 jQuery 源代码)。

正如您所见,通常 getComputedStyle 返回以像素为单位的宽度,因此您通常可以这样做(旧版 IE 除外):

var width = parseFloat(window.getComputedStyle(elem).width);

jQuery width() does just that (see jQuery source code).

As you saw, usually getComputedStyle returns the width in pixels, so you can often do (except on old IE):

var width = parseFloat(window.getComputedStyle(elem).width);
错々过的事 2024-12-17 00:11:49

您可以将填充设置为 0,但是检查计算样式的大小和位置通常会出现错误,并且很难与大量浏览器协调一致。

在所有浏览器上使用 offsetWidth 或 clientWidth 代替。

You can make the padding 0, but checking computed styles for sizes and positions is often buggy and hard to reconcile acreoss browsers.

Use offsetWidth or clientWidth instead, on all browsers.

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