在Chrome和&之间动态一致地设置样式属性。 FF

时间:2013-08-08 17:51:39

标签: javascript css3 cross-browser

查看http://jsfiddle.net/HW64y/

<div id='box' class='frustratingBox'></div>
.frustratingBox{
    border:5px solid;
    border-color: #000000;
    border-radius:25px;
    width:100px;
    height:100px;
}

关键是尝试在JS中更改单个样式属性:

var FB = document.getElementById('box');
FB.style['border-color'] = "#009900";

问题:我的盒子最终变绿,就像我在Chrome中所期望的那样,但根据FF中的样式表规则仍然是黑色的。导致这种差异的原因是,这些浏览器究竟对其样式对象采取了哪些不同的做法使用Zepto可以轻松修复,但我想正确理解这里发生的事情。

2 个答案:

答案 0 :(得分:3)

样式属性名称在JavaScript中是驼峰式的,所以:

FB.style.borderColor = "#009900";

DOM 2规范包括list of valid style properties,所有这些都遵循驼峰式命名方案。没有转换就没有引用支持CSS属性名称。较新的规格/草案可能改变了这一点,但我找不到一个好的参考。


链接quoo's answer表示style['border-color']实际上是WebKit和Trident支持的非标准,开发人员友好的备用访问方法,但不支持Gecko或Opera。

答案 1 :(得分:2)

而不是像你一样使用样式['border-color'],改变样式的正确方法是使用驼峰案例而不是连字符属性名称。所以正确的语法是

FB.style.borderColor = "#009900";

请参阅: http://jsfiddle.net/33MZK/

显然这是一个错误,请参见此处的讨论:http://mac-os-forge.2317878.n4.nabble.com/CSS-properties-vs-their-JS-bindings-on-the-style-object-td165125.html,此处:http://lists.w3.org/Archives/Public/www-style/2012Feb/0655.html