我可以从JavaScript访问无效/自定义CSS属性的值吗?

假设我有以下的CSS:

div { -my-foo: 42; } 

我以后可以在JavaScript中以某种方式知道给定的div-my-foo CSS属性的值是什么?

我不认为你可以访问无效的属性名称,至less它不适用于我的Chrome或Firefox。 CSSStyleDeclaration只是跳过无效的属性。 对于给定的CSS:

 div { width: 100px; -my-foo: 25px; } 

style:CSSStyleDeclaration对象只包含以下关键字:

 0: width cssText: "width: 100px" length: 1 

不过,有趣的是这是DOM-Level-2风格规范所说的:

虽然实现可能无法识别CSS声明块中的所有CSS属性,但希望通过CSSStyleDeclaration接口提供对样式表中所有指定属性的访问。

这意味着CSSStyleDeclaration对象应该在上面的例子中列出了-my-foo属性。 也许有一些浏览器支持它。

我用于testing的代码在http://jsfiddle.net/q2nRJ/1/

注意 :您可以通过parsing原始文本来DIY。 例如:

 document.getElementsByTagName("style")[0].innerText 

但是这对我来说似乎是一个很大的工作,不知道你做这件事的原因,我不能说是否存在一个更好的替代你的问题。

CSS自定义属性

DOM 2级风格

正如Anurag所指出的那样,这是DOM级别2提出的build议,后来被弃用了。 Internet Explorer是唯一实现它的浏览器,并停止在Edge中支持它。 IE预计财产不会以破折号开始,所以my-foo: 42; 应该工作。

CSSvariables样式

较新的浏览器支持CSSvariables。 这些从一个双破折号开始:– --my-foo: 42; (他们可以在其他地方像这个font-size: var(--my-foo);

CSS

 div { --my-foo: 42; my-foo: 42; } 

JS

 // Chrome 49, Firefox 31, Safari 9.1 (future Edge): const cssVariable = bodyStyles.getPropertyValue('--my-foo') // IE: const cssCustomProperty = bodyStyles['my-foo'] 

浏览器支持

目前,Microsoft Edge是唯一不支持这两种方法的浏览器,但是在编写Edge中的CSSvariables时, “正在积极开发” 。