检索 CSS 百分比值(在 Firefox 中)

发布于 2024-12-19 17:38:23 字数 1438 浏览 1 评论 0原文

我在 Firefox 上检索确切的 css 属性值(以“%”为单位)时遇到问题。

假设我们有这个非常简单的标记:

<div id="box">box</div>

和这个css:

#box{
    width:200px;
    height:200px;
    left:10%;
    position:absolute;
    background:red;
}

我想通过js检索左侧位置(在'%'中)

使用mootools显然非常容易(演示-> http://jsfiddle.net/steweb/AWdzB/):

var left = $('box').getStyle('left');

或 jQuery (演示-> http://jsfiddle.net/steweb/RaVyU/):

var left = $('#box').css('left');

或通过普通 js (演示 -> http://jsfiddle.net/steweb/tUAKA/):

function getStyle(el,styleProp){ //from ppk's quirksmode
    var x = document.getElementById(el);
    if (x.currentStyle)
        var y = x.currentStyle[styleProp];
    else if (window.getComputedStyle)
        var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
    return y;
}

var left = getStyle('box','left');

但是如果你尝试在 firefox (8.0.1) 上你会发现结果不正确(应该是 10%,但它是 91px)。问题是:这个新版本的 Firefox 是否有错误?有谁知道这是否是一个已知的错误?我做错了什么吗?

谢谢:)

更新:我也在较旧的 Firefox 版本上尝试过,但它不正确(它总是返回 px 值)..为了完整性,它在 IE 上可以正常工作

I have a problem retrieving the exact css property value (in '%') on firefox.

Suppose we have this extremely simple markup:

<div id="box">box</div>

and this css:

#box{
    width:200px;
    height:200px;
    left:10%;
    position:absolute;
    background:red;
}

and I'd like to retrieve the left position (in '%') by js

It's obv very easy with mootools (demo -> http://jsfiddle.net/steweb/AWdzB/):

var left = $('box').getStyle('left');

or jQuery (demo -> http://jsfiddle.net/steweb/RaVyU/):

var left = $('#box').css('left');

or by plain js (demo -> http://jsfiddle.net/steweb/tUAKA/):

function getStyle(el,styleProp){ //from ppk's quirksmode
    var x = document.getElementById(el);
    if (x.currentStyle)
        var y = x.currentStyle[styleProp];
    else if (window.getComputedStyle)
        var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
    return y;
}

var left = getStyle('box','left');

But if you try it on firefox (8.0.1) you'll see that the result is not correct (should be 10%, but it's 91px). The questions are: is there a bug on this newer version of firefox? Does anyone knows if it's a known bug? Am I doing something wrong?

Thanks :)

Update: I tried it also on older firefox releases, and it's not correct (it always returns px value).. for completeness, it works correctly on IE

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

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

发布评论

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

评论(4

梦里寻她 2024-12-26 17:38:23

这是记录

任何 CSS 属性的使用值都是执行所有计算后该属性的最终值。可以通过调用 window.getCompulatedStyle 来检索已使用的值。尺寸(例如宽度、行高)均以像素为单位...等

为单位...等似乎无法访问给定元素的“指定”CSS值,除非您确切知道适用哪个CSS规则并使用文档解析出此规则.stylesheets 或类似的界面。

This is documented:

The used value of any CSS property is the final value of that property after all calculations have been performed. Used values can be retrieved by calling window.getComputedStyle. Dimensions (e.g. width, line-height) are all in pixels... etc

There seems to be no way to access "specified" css values for a given element, unless you know exactly which css rule applies and parse out this rule using document.stylesheets or similar interface.

温折酒 2024-12-26 17:38:23

正确答案是对我在 bugzilla 上提交的错误的评论

https://bugzilla。 mozilla.org/show_bug.cgi?id=707691#c7

获取元素(或其父元素之一)的正确 % 值(在 Firefox 上也是如此) display 应设置为 none

测试:http://jsfiddle. net/4RKsM/

不清楚的是:为什么在相同的浏览器/版本上(参见 XP/win7 上的 firefox 7 或 mac osx / ubuntu 上的 Opera 11.5)但在不同的操作系统上,行为有什么不同吗?

顺便说一句,@thg435 发布(并在 mdn 上报告)的规范仍在不断变化。

The correct answer is a comment on the bug I filed on bugzilla

https://bugzilla.mozilla.org/show_bug.cgi?id=707691#c7

To get the correct % value (on firefox too) the element's (or one of its parents) display should be set to none

Test : http://jsfiddle.net/4RKsM/

The unclear thing is: why on the same browser/version (see, firefox 7 on XP/win7 or Opera 11.5 on mac osx / ubuntu) but on different os, the behav is different?

Btw, the spec @thg435 posted (and reported on mdn) is still in flux.

伪心 2024-12-26 17:38:23

据我所知,它从未显示过百分比(我使用 ff、opera 和 chrome)。所以我认为这不仅仅是 firefox 的问题。

但是,您可以手动计算它,但如果浏览器窗口很小,它只是接近定义的值。

parseInt($('#box').css('left'))/ $(window).width()*100;

As I know , it has never shown the percentage (I use ff, opera and chrome). So I think it's not only a firefox problem.

However, you can calculate it manually , but it is just close to the definied value , if the browser window is small.

parseInt($('#box').css('left'))/ $(window).width()*100;
予囚 2024-12-26 17:38:23

在chrome上,它取决于位置值fixed和absolute总是给出一个px,而其他值输出输入的内容,例如,如果你给它10%的值,那么它会输出10%,如果你输入100px,那么它会输出100px

on chrome it depends on the the position value fixed and absolute always give a px whilst other values output what was put in for example if you gave it 10% value then it would output 10% and if you put in 100px then it would output 100px

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