Javascript / Jquery:.css像素值

时间:2010-02-11 17:34:29

标签: javascript jquery css

我刚刚意识到

之间存在差异
<foo>.css('marginTop')

(我认为是标准的jquery-notation)和

<foo>.css('margin-top')

(我认为这是非标准的)。

如果有margin-top:3em; (例如),第一个符号给我3em,第二个符号给我48px(像素为3em)。 我喜欢这种行为,但我在API中找不到任何关于它的东西(或者我是盲目的?)

为什么会这样,我在哪里可以找到有关它的信息?

P.S。:准确地说:当然还有其他属性,但是边缘工作也是如此......

谢谢!

2 个答案:

答案 0 :(得分:6)

该文档说“jQuery可以同样解释多字属性的CSS和DOM格式”,但实际上它是通过粗略的,准备好的黑客来做到这一点,并不总是可预测的行为。

特别是,如果您提供DOM样式camelCaseName,它将首先尝试访问内联样式声明style.camelCaseName。然后,如果失败(通常是因为样式未设置为内联),则会回退到尝试将getComputedStyle转换为camelCaseName(*)的hyphen-separated-name。计算出的样式与声明的样式不同:浏览器可以解析计算样式中的各种相对声明,例如将长度转换为像素单位。

然而,反向不成立!如果您提供CSS样式hyphen-separated-name,它会直接跳转到计算样式(*)代码,而不会尝试转换为camelCaseName并查看内联样式。

我认为我不想依赖这种行为......它对我来说闻起来有点儿麻烦。如果您可以将内联样式声明保留在要测量的元素之外,则无论您使用哪种名称类型,都应该能够确保始终获得计算出的样式。但话说回来,jQuery并没有把它作为一个记录在案的承诺。这就是试图隐藏一个看似简单的“Do Do I Mean”界面背后的复杂模型的本质。

(*):除了在没有getComputedStyle功能的IE中,所以它回归到currentStyleruntimeStyle和文档更改的奇怪而脆弱的组合以试图获取计算出来的风格。

答案 1 :(得分:1)

差异与同一事物的CSS和JavaScript符号有关。它不会出现在jQuery API中,而是出现在CSS引用中。

CSS使用margin-top,而JavaScript使用marginTop进行相同的操作。 CSS中的默认值(margin-top)是0px。因此,你得到48px而不是3em。

有关详细信息,请参阅http://www.w3schools.com/css/css_reference.asp