我刚刚意识到
之间存在差异<foo>.css('marginTop')
(我认为是标准的jquery-notation)和
<foo>.css('margin-top')
(我认为这是非标准的)。
如果有margin-top:3em; (例如),第一个符号给我3em,第二个符号给我48px(像素为3em)。 我喜欢这种行为,但我在API中找不到任何关于它的东西(或者我是盲目的?)
为什么会这样,我在哪里可以找到有关它的信息?
P.S。:准确地说:当然还有其他属性,但是边缘工作也是如此......
谢谢!
答案 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中,所以它回归到currentStyle
,runtimeStyle
和文档更改的奇怪而脆弱的组合以试图获取计算出来的风格。
答案 1 :(得分:1)
差异与同一事物的CSS和JavaScript符号有关。它不会出现在jQuery API中,而是出现在CSS引用中。
CSS使用margin-top,而JavaScript使用marginTop进行相同的操作。 CSS中的默认值(margin-top)是0px。因此,你得到48px而不是3em。