使用 CSS 我可以检查浏览器是否支持 "CSS Properties and Values API" (Houdini) @属性 规则

Using CSS can I check if a browser supports the "CSS Properties and Values API" (Houdini) @property rule

一些浏览器开始引入 CSS Houdini API, I was wondering if there were any ways to identify if the CSS Properties and Values API 是否仅支持 CSS?

使用 Javascript 我可以检查 API 是否存在:✅

typeof window.CSS.registerProperty !== 'undefined'

CSS 是否有任何等价物?我正在试验 @support 规则,但这只接受属性和值——而不是 'at-rules'。因此可以理解,以下内容 有效。 ❌

@property --my-color {
  syntax: '<color>';
  inherits: false;
  initial-value: #c0ffee;
}

@supports ( @property : --my-color ) {
  body { background:DarkSeaGreen ; }
}

@supports not ( @property : --my-color ) {
  body { background:Crimson; }
}

☝️ CodePen Example

显然我们此时能做的最好的事情就是假装 paint worklet 的支持表示样式表中 CSS Typed OM @property 的支持:不像 @property , <property-accepting-image>: paint(<ident>) 可用于 @supports 块。

Una Kravets 在她的 @property dev.to article:

中使用了这个
@supports (background: paint(something)) {
  /* [Typed OM `@property` should be supported here] */
}

她还指出,从版本 78 到 v84,这在(过去)Chromiums 中是不可靠的。

根据https://ishoudinireadyyet.com/浏览器的当前状态,使用此建议应该是安全的:

新采用Houdini的UA似乎有可能在样式表中释放对paint API和CSS OM的支持,即Chromium v​​84场景不会再次发生。 (如果会的话,我敢打赌 Typed OM 将在 paint worklet 之前发布,因此在该版本中将(不必要地)忽略该条件。)