不支持。tailwind css 禁止手写嵌套选择器(如 .card .header h2),因其 jit 引擎仅扫描 html 中原子类名,忽略手动编写的 css 规则;实现嵌套效果须用 @layer components 与 group 组合,且 v4 已彻底移除嵌套 @apply 支持。

不支持。Tailwind CSS 明确禁止手写嵌套选择器(如 .card .header h2),这不是功能缺失,而是设计契约的硬性限制。
为什么 .card .header h2 这类写法会失效
Tailwind 的 JIT 引擎只扫描 HTML 中出现的原子类名,从不解析你手写的 CSS 选择器。你在 styles.css 里写 .card .header h2 { @apply text-xl; },结果是:
- 构建时完全忽略这条规则——它不会生成任何对应 CSS
-
@apply在嵌套上下文中直接报错:Cannot apply unknown utility class - 加了
md:前缀也不会生效,因为该选择器根本不在content配置路径里,JIT 跳过扫描 - 热更新后样式消失,不是缓存问题,是 PostCSS 根本没把它当 Tailwind 代码处理
想实现“嵌套效果”,必须用 @layer + group 组合
真正可控、可维护的替代方案只有两条主线,且必须配合使用:
-
@layer components定义语义化组件块,比如.card、.card-header,每个类都用@apply扁平声明 -
group/group-hover:实现父容器 hover 触发子元素变化,例如:<div class="group"><span class="group-hover:rotate-12"> <li>三层及以上 DOM 嵌套?只能再套一层 <code>group,但别超过两层——否则结构臃肿、调试困难,建议改用data-[state=expanded]:+ JS 控制 - 所有
group-hover:类必须显式加transition,否则无动画效果,这个细节极易漏掉 -
.card { @media (min-width: 768px) { &__title { @apply text-xl; } } }→ 报错,PostCSS 插件不进入嵌套作用域解析 - SCSS 或 Vue
<style scoped></style>中的嵌套,会先被预处理器转成带属性选择器的扁平 CSS(如.card[data-v-abc] .card__title[data-v-abc]),而@apply只认原始类名 - 正确做法:把响应式逻辑提到顶层,用
@layer utilities+@media包裹完整类定义,或直接在 HTML 写md:text-xl
原生 CSS 嵌套语法(&)不能和 @apply 混用
即使你启用了 postcss-nested,也绝不能在嵌套块里写 @apply:
最常被忽略的一点:Tailwind v4 已彻底移除对嵌套 @apply 的实验性支持。如果你看到旧项目“能跑”,大概率是 v3.3 的 patch 或自定义插件在撑着,升级后必崩。











