JavaScript`style`属性名称来自哪里?

时间:2017-02-08 19:27:04

标签: javascript css

我一直在学习如何通过javascript更改css选项,例如: document.getElementById("sweetDiv").style.fontSize...style.backgroundColor,其命名约定似乎有意义:它是带连字符的CSS名称的驼峰式版本。

然后我遇到了...style.cssFloat。哼。这根本不遵循这个规则。

由于这个一般规则似乎至少有一个令人惊讶的例外,我可以在哪里找到所有不同的JavaScript css样式选项的列表?为了避免被误解为资源请求,我真正的问题是:在映射到CSS名称时,浏览器如何决定调用JavaScript style对象的属性?这是什么?行为指定?如果有的话,押韵或理由是什么?

(我开始深入研究Mozilla DOM文档,但似乎无法发现这个神秘的列表。)

2 个答案:

答案 0 :(得分:1)

MDN says of cssFloat

  

注意:如果您将JavaScript中的此属性称为element.style对象的成员,则必须将其拼写为cssFloat。另请注意,Internet Explorer 8及更早版本拼写了此styleFloat。这是一个例外,即DOM成员的名称是以破折号分隔的CSS名称的驼峰式名称(并且是由于“float”是JavaScript中的保留字,因为需要将“class”转义为“className”并将“for”转义为“htmlFor”。

这是因为语言中ECMAScript 3 disallowed property access with a dot operator if the property name was a reserved word。例如,执行foo.functionbar.if会引发错误。类似地,float是ES3中的保留字(期望将来可能被语言使用),因此对baz.float形式的任何访问在语法上都是无效的。

为了弥补这一点,浏览器使用cssFloat(或IE8中的styleFloat)来避免使用名为float的属性。这是我所知道的style对象的唯一例外,尽管上面的注释包括DOM规范中其他地方存在的其他一些。对于所有其他属性,只需使用“带连字符的CSS名称的驼峰版本”的常规语法转换。此转换在CSSOM spec中形式化为“IDL属性算法的CSS属性”(反之亦然)。

总之,JavaScript中的每个style属性(即CSSStyleDeclaration类型)中的对象都不需要特定的引用,因为它与CSS规则名称的信息没有什么不同。唯一的例外是cssFloat,您显然已经找到了一个。

如果您对任何给定浏览器中style所有受支持的媒体资源名称的完整列表感兴趣,请执行Object.keys(document.createElement("div").style)

答案 1 :(得分:0)

来自WC3:注意:CSS" float"财产称为" cssFloat"在JavaScript中,因为" float"是JavaScript中的保留字。

因此,99.9%的样式只是样式。无论如何,cssFloat是此规则的特殊例外。

你可以在这里找到详尽的CSS规范:https://www.w3.org/Style/CSS/specs.en.html但要注意,它对读者来说不是很友好。