根本原因是oxide引擎只扫描同一css文件中@import 'tailwindcss';之后的@theme块,且仅识别带--color-等标准前缀的变量;--primary或跨文件声明均静默失效,不报错也不生成类。

@theme 指令必须写在 @import 'tailwindcss'; 之后,且变量名带标准前缀(如 --color-primary),否则类名静默失效,不报错也不生成。
为什么 @theme 写了却没生成 bg-primary?
根本原因是 Oxide 引擎只扫描同一 CSS 文件中、@import 'tailwindcss'; 之后的 @theme 块,且仅识别带合规前缀的变量名:
-
--color-primary: #3b82f6;✅ 生效,生成bg-primary、text-primary-500等完整变体 -
--primary: #3b82f6;❌ 完全忽略,bg-primary不会出现 -
--my-color: #3b82f6;❌ 同样无效,引擎不匹配该命名模式 - 若
@theme出现在@import之前,或跨文件(比如Button.css里写),也一律不生效
@theme 支持哪些前缀?值怎么写才对?
不同用途的变量必须用对应前缀,值类型也有明确限制:
- 颜色:
--color-开头,推荐 OKLCH(如--color-brand: oklch(0.62 0.15 274);),可自动推导明度阶梯;HEX/RGB/HSL 也可用,但无色阶生成 - 字体:
--font-开头,如--font-sans: 'Inter', sans-serif;→ 生效font-sans - 间距/尺寸:
--spacing-或--size-,如--spacing-6: 1.5rem;→ 生效p-6 - 断点:
--breakpoint-,如--breakpoint-xl2: 1920px;→ 自动生成xl2:变体 - 所有值必须是静态字面量,不能是
var(--x)、不能拼接、不能引用其他变量
和 tailwind.config.js 能共存吗?优先级怎么算?
能共存,但 JS 配置已降级为兜底用途,@theme 具有实际主导权:
-
tailwind.config.js中的theme.extend.colors等字段完全不参与编译——哪怕文件存在、语法正确,Oxide 引擎也直接跳过 -
@theme声明的--color-primary会覆盖 JS 配置里的同名项,不是因为“优先级高”,而是 JS 那部分压根没被读 -
tailwind.config.js仅剩两个作用:指定content扫描路径(当自动检测失败时)、加载插件(如 daisyui) -
@config是纯 CSS 内联配置,必须出现在@import之前,只接受静态值,不支持plugins或darkMode
VSCode 和构建工具为啥不识别新配置?
不是插件坏了,是路径或顺序没对上:
- VSCode Tailwind 插件默认扫描
tailwind.config.js,删了它就得手动设置"tailwindCSS.experimental.configFile"指向主 CSS 文件(如src/index.css) - Vite / Next.js 若没识别到含
@import 'tailwindcss';的入口 CSS,会静默跳过所有 Tailwind 处理 - 项目若残留
postcss-import等 PostCSS 插件,会导致重复解析或冲突,必须彻底移除
最容易被忽略的是作用域隔离:你在 src/components/Button.css 里写的 @theme,不会影响 src/layout/Header.css;想全局生效,必须统一写进主入口 CSS(如 src/index.css),且顺序不能错——@import 在前,@theme 紧随其后。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











