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

CSS嵌套内伪元素重构:能否优化重复的:not(:hover)选择器?

问题

现有如下SCSS代码,其中多个带不同href属性的a.label选择器都重复写了:not(:hover)伪类,能不能重构一下避免这种重复?

代码示例:

a.label {
  &[href*="/abc"]:not(:hover),
  &[href*="/def"]:not(:hover),
  /* ... */
  &[href*="/xyz"]:not(:hover) {
    color: #f50;
  }
}
重构方案

当然可以,有两种常用的重构方式:

方式一:使用:is()选择器(现代浏览器推荐)

利用CSS标准的:is()选择器把多个href属性选择器分组,再统一加上:not(:hover),能大幅减少重复代码:

a.label {
  &:is([href*="/abc"], [href*="/def"], /* ... */ [href*="/xyz"]):not(:hover) {
    color: #f50;
  }
}

方式二:调整嵌套层级(兼容旧浏览器)

把:not(:hover)提到外层嵌套,让所有href选择器共享这个伪类,兼容性更好:

a.label:not(:hover) {
  &[href*="/abc"],
  &[href*="/def"],
  /* ... */
  &[href*="/xyz"] {
    color: #f50;
  }
}

两种写法都能实现和原代码完全一致的效果,可根据项目的浏览器兼容需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:37:05