You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用@supports检测CSS at-rule(如@property)的浏览器支持情况?

如何用CSS检测浏览器是否支持@property规则?

可以实现,但不能直接通过@supports检测@property这个at-rule本身,得通过间接验证其特性的方式来实现。

为什么你之前的写法无效?

  • @supports的核心作用是检测**CSS声明(属性-值对)**的有效性,无法直接识别或检测@property这类at-rule。
  • syntax是@property内部专属的描述符,不属于常规CSS属性,所以单独检测syntax: "<number>"也不生效。

可行的检测方案

利用@property的语法约束特性——支持它的浏览器会严格校验自定义属性的取值类型,而不支持的浏览器会把自定义属性当作无类型的普通变量,接受任何值。结合这一点可以写出准确的检测逻辑:

/* 1. 定义一个带语法约束的测试用@property */
@property --prop-test {
  syntax: "<number>"; /* 限定只能接受数字类型 */
  inherits: false;
  initial-value: 1;
}

/* 2. 利用@supports检测取值是否被语法约束限制 */
@supports not (--prop-test: "invalid-value") {
  /* 支持@property的浏览器会拒绝非数字值,因此该条件成立,隐藏提示横幅 */
  .unsupported-banner {
    display: none;
  }
}

逻辑说明

  • 支持@property的浏览器:会识别--prop-test的数字类型约束,给它赋值字符串"invalid-value"属于无效声明,因此@supports (--prop-test: "invalid-value")返回false,加上not后条件成立,横幅被隐藏。
  • 不支持@property的浏览器:会忽略@property规则,--prop-test就是普通自定义属性,接受任何值,因此@supports (--prop-test: "invalid-value")返回true,not后条件不成立,横幅保持显示。

内容的提问来源于stack exchange,提问作者Saltssaumure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:21:12