跨浏览器的`element.style.width`的一致性

时间:2014-02-06 04:09:07

标签: javascript css cross-browser

如果我有一些HTML

<div id="container">
  <div class="foo" style="width:75%;">Bar!</div>
</div>

如果我写这个JavaScript(假设jQuery是为了问题的话)

alert( $("#container .foo")[0].style.width );

它应警告“75%”。这个输出在每个“现代”浏览器中是否一致?如果没有,哪些最流行的非标准浏览器(甚至是IE)将无法返回正确的值?

**编辑**

请!只有两个带问号的陈述......这就是问题!

现在,让我添加一些可能有助于误导答案的内容......

  1. 我知道所有浏览器都可以使用element.style
  2. 我知道element.style.width也可用。
  3. 使用jQuery 1.3.2,调用$("#container .foo").css('width')会返回"75%" ,这至少不是真的,因为至少版本为1.6.4 (我们甚至超出了主要版本);最新的jQuery版本现在总是以像素为单位输出宽度。
  4. 因此,考虑到给定的HTML,将使元素的style.width始终在所有浏览器中返回真实的,声明的大小(即以百分比表示),或者是否有任何流氓,非标准的将返回计算宽度(以像素为单位)?

1 个答案:

答案 0 :(得分:2)

是的,所有主流浏览器都支持它。看似here,带有旧IE版本的一些注释。

Here您可以在此版本的DOM API中找到所有可用的属性。

修改

关于跨浏览器返回的值的一致性......这取决于您,因为它仅返回 通过此API归因的内容:如果您使用%,您将获得%;如果您使用em,则会获得em,依此类推。

通过其他方式没有意义。假设您在元素中应用了70%的宽度,假设引擎仅使用引擎盖下的像素值。因此它会将内部值转换为父级宽度的70%像素数。一旦您的父级宽度发生变化,存储在像素中的值将永远消失,它将以另一个百分比值进行评估。

tl; dr - 按原样存储才有意义,所以你得到的就是你得到的。

我很确定这种行为。但只是为了确保,我在早期版本的Chrome,Firefox,Opera和IE 8+上确认了这种行为。所以,保持和平伙伴并享受这个功能。