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

Sass中@supports结合:focus-visible伪类的正确语法及问题咨询

解决Sass中@supports结合:focus-visible无效的问题

问题根源

你的代码存在两个核心问题:

  • 旧版本Sass(如LibSass或Dart Sass < 1.23.0)对@supports selector()的支持不完善,无法正确处理其中的&父选择器,导致编译后的@supports条件失效,浏览器直接忽略规则并应用内部样式。
  • 省略selector()函数的写法(@supports not (&:focus-visible))属于错误语法,浏览器会判定该条件无效,同样会跳过@supports直接生效内部样式。

正确写法

使用Sass插值#{&}让父选择器提前展开,再传入selector()函数,同时确保使用兼容的Sass版本(Dart Sass >= 1.23.0):

// 示例嵌套在.button选择器内
.button {
  @supports not selector(#{&}:focus-visible) {
    &:focus {
      outline: 1px solid white;
      outline-offset: 3px;
    }
  }
}

编译后的正确CSS

上述代码会被编译为标准的可识别CSS:

@supports not selector(.button:focus-visible) {
  .button:focus {
    outline: 1px solid white;
    outline-offset: 3px;
  }
}

此时浏览器会正确识别@supports条件:仅在不支持:focus-visible选择器时,才应用:focus的轮廓样式。

额外注意

  • 停止使用已停止维护的LibSass,切换到Dart Sass以获得完整的CSS特性支持。
  • 若无需嵌套,直接编写全局规则时,可省略&直接写选择器:
    @supports not selector(:focus-visible) {
      :focus {
        outline: 1px solid white;
        outline-offset: 3px;
      }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:55:31