CSS.supports()
或在CSS中使用@supports
来检测自定义属性的支持情况。支持自定义属性的每个浏览器版本也支持此方法进行特性检测。
if (window.CSS && CSS.supports('color', 'var(--primary)')) {
document.body.innerHTML = 'Supported';
}
@supports (color: var(--primary)) {
body {
background-color: green;
}
}
--primary
自定义属性,因为按照定义,任何以--
开头的属性名称都被视为解析属性声明的有效属性。CSS.supports
的情况下定义CSS
(因此,在调用它之前需要检查CSS.supports
,还是检查window.CSS
就足够了?):CSS
全局变量是在其初始理由中引入的supports
;所有具有CSS
全局变量的浏览器都具有CSS.supports
。 - Chris Morgan我将把这个作为一个例子,说明当你没有其他选择时如何处理这种情况,但在这种情况下BoltClock的答案是正确的方法。
我希望您能定义一个变量,并检查其值是否传递给getComputedStyle
。例如,这在Chrome上显示支持自定义属性?true
(支持自定义CSS属性),但在不支持自定义CSS属性的IE11上显示支持自定义属性?false
:
function areCSSVarsSupported() {
var d = document.createElement('div');
d.id = "test";
document.body.appendChild(d);
var pos = getComputedStyle(d).position;
document.body.removeChild(d);
return pos === "fixed";
}
console.log("Supports custom props? " + areCSSVarsSupported());
:root{
--test-vars: fixed;
}
#test {
position: var(--test-vars);
}