我可以从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时, “正在积极开发” 。