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

关于postcss-cssnext中@custom-selector未按预期生效的技术咨询

问题原因与解决方法

你遇到的问题是嵌套写法被错误解析了:当你在.wrapper的规则块里直接写:--heading时,PostCSS会把它编译成.wrapper:--heading——这个选择器只会匹配同时拥有.wrapper类且属于:--heading的元素,而不是.wrapper内部的后代标题元素,所以蓝色样式根本没作用到目标h1上,自然还是显示全局的红色。

正确写法有两种:

写法一:直接使用后代选择器(不嵌套)

@use postcss-cssnext;
@custom-selector :--heading h1, h2, h3; 

:--heading{
  color: red;
}

a:active{
     color:hotpink;
}

.wrapper :--heading{
  color: blue;
}

写法二:嵌套时用&明确父选择器的后代关系

@use postcss-cssnext;
@custom-selector :--heading h1, h2, h3; 

:--heading{
  color: red;
}

a:active{
     color:hotpink;
}

.wrapper{
  & :--heading{
    color: blue;
  }
}

两种写法编译后的最终CSS都会是:

h1, h2, h3 {
  color: red;
}

a:active {
  color: hotpink;
}

.wrapper h1, .wrapper h2, .wrapper h3 {
  color: blue;
}

这时.wrapper h1的优先级高于全局的h1,标题就会显示蓝色了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:40:54