2010-08-12 65 views
1

Here is a test case/live example.总结的问题:CSS:为什么设置margin-top只能在Webkit中工作?

WebKit中这仅适用于:

Y.one('#container').setStyle('margin-top', 100); 

这适用于所有的浏览器:

Y.one('#container').setStyle('margin', 100); 

为什么设置的margin-top仅工作在WebKit的?

编辑:修复程序显示在下面的答案之一。你需要在这里有marginTop,然后才能工作。所以,编辑的问题是,为什么在这种情况下你需要marginTop而不是margin-top?

回答

2

这是为我工作在Firefox:

<div id="nav"> 
<a href='#' onclick='document.getElementById("nav").style.marginTop="25px";'>test</a> 
</div> 
+0

我也可以确认IE。 – Robert 2010-08-12 23:26:19

+0

这几乎是答案。我还想要一些W3C参考或者指向这个marginTop vs margin-top的东西。任何人? :) – Jaanus 2010-08-12 23:27:57

+1

http://www.w3schools.com/css/pr_margin-top.asp 向下滚动,它告诉你访问与JavaScript为“object.style.marginTop =”10px“ – Robert 2010-08-12 23:29:57

2

它必须marginTop,因为你不是在一个CSS文件中设置一个CSS属性。您正在设置style对象的marginTop属性。 -是标识符的无效字符。

+1

所以唯一的秘密是,它为什么与Webkit一起工作? – Jaanus 2010-08-12 23:42:32

3

如果您正在访问style属性,则应用驼峰案例by the standard。所以如果webkit支持像element.style["margin-top"]那样的话,那么这是一个怪癖。请记住,您不是直接处理CSS,而只是一个中间层。

总之 - marginTopCSS2Properties接口的一部分,但margin-top不是。

一些图书馆倾向于自动转换属性名称,即将所有hyphenized属性名称转换为camel case形式的Prototype,因此您不必担心它。

+0

我没有知道为什么camel case是唯一的方式(因为它完全可能,已经被WebKit证明),至少我没有提及*官方来源* Flanagan的* JavaScript权威指南*(第372页)指出 - 许多CSS样式属性(如font-family)在其名称中包含连字符。在JavaScript中,连字符被解释为一个负号,所以不可能写出像'element.style.font-family =“sans-serif”[']这样的表达式,属性名是通过删除连字符并立即在每个连字符后面加上大写字母。 – Andris 2010-08-15 12:45:18

相关问题