首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨浏览器offsetWidth

跨浏览器offsetWidth
EN

Stack Overflow用户
提问于 2013-02-20 22:14:07
回答 4查看 16.3K关注 0票数 7

在不同的浏览器中使用offsetWidth一直存在问题。结果的这种差异导致了一些奇怪的布局。我创建了一个很小的例子来显示我所看到的。

吉斯宾

代码语言:javascript
复制
<table id="tbl">
  <tr>
    <td>Cell 1</td>
    <td>Cell 2</td>
  </tr>
</table>
<button onclick="calc()">Calculate Offset Width</button>

<div>Cell 1 offsetWidth: <span id="c1offWidth"></span></div>

js

代码语言:javascript
复制
function calc(){
  document.getElementById('c1offWidth').innerHTML =
      document.getElementById('tbl').children[0].children[0].offsetWidth;
}

CSS

Erik Meyer的重置CSS

当我在chrome、safari和opera上运行这个程序时,单元格1的偏移宽度返回的值是72。当我在firefox和IE9-10上运行这个程序时,返回的值是77。

我的印象是,这是计算元素宽度的最佳方法,包括填充和边框。

是否有总是返回相同结果的跨浏览器解决方案?我试过使用jQuery,但结果更令人困惑。

编辑,因为每个人都推荐outerWidth,我也为此做了一个jsbin。不同浏览器的结果仍然不同。Chrome返回36,IE9-10和Firefox返回39。

jsbin更新

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-20 22:19:03

因为您用jQuery标记了帖子,所以我假设jQuery解决方案是可以接受的。outerWidth()怎么了?

例如:

代码语言:javascript
复制
function calc()
{
    var the_width = $('#tbl tr:eq(0) td:eq(0)').outerWidth();
    $('#c1offWidth').html(the_width);   
}

使用jQuery给表带来了许多好处(正如您看到的,上面所需的代码减少了)。您还应该考虑使用非侵入性事件处理程序。例如,从您的onclick中删除button属性,并执行以下操作:

代码语言:javascript
复制
$(function() {  
    $('button').click(function() {  
        var the_width = $('#tbl tr:eq(0) td:eq(0)').outerWidth();
        $('#c1offWidth').html(the_width);  
    });
});

请看jsFiddle演示

票数 4
EN

Stack Overflow用户

发布于 2013-08-01 09:27:01

您的示例中的实际问题是不同的浏览器使用不同的默认字体进行呈现。您的单元格的大小由内容定义。如果您为元素设置了一定的宽度(正如在注释中正确说明的那样),您将得到确定的、相等的结果。

不能发表评论..。

票数 4
EN

Stack Overflow用户

发布于 2013-02-20 22:16:22

offsetWidth不是可靠的跨浏览器。我建议改用jQuery的outerWidth()

代码语言:javascript
复制
$("#your-element").outerWidth();

演示

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14990963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档