content 字段不可删除,否则类名扫描失效导致样式不生效;它用于开发热更新监听和生产构建时提取类名,路径需严格匹配文件类型且显式声明子目录。

tailwind.config.js 中的 content 字段必须保留,但仅此一项;删掉其他字段不会导致构建失败,但删掉 content 会导致类名扫描失效——不是报错,是静默漏类。
为什么删了 content 会“看起来正常但样式不生效”
v4 的 Oxide 引擎完全不读 theme、plugins、darkMode 等字段,但它仍依赖 content 数组做两件事:开发时热更新监听、生产构建时提取 HTML/JSX 中用到的类名。一旦缺失,bg-primary、sm:flex 这类动态生成的类就根本不会出现在最终 CSS 中。
- 常见现象:页面上写了
class="text-lg dark:bg-gray-800",但编译后 CSS 里找不到对应规则 - 根本原因不是暗色模式没配好,而是
content路径没覆盖到该文件(比如忘了加.vue或.astro) - 路径写错格式(如用双引号包裹通配符、漏掉大括号)也会让扫描器跳过整个条目
content 路径怎么写才真正生效
路径语法和 v3 一致,但校验更严格:Oxide 只认 glob 模式,不支持函数或动态表达式。它也不自动递归子目录,必须显式声明。
- Vue 项目必须包含
.vue:["./src/**/*.{js,jsx,ts,tsx,vue}"] - Astro 项目要加
.astro:["./src/**/*.{js,jsx,ts,tsx,astro}"] - Rails 项目注意 ERB 路径:
["./app/views/**/*.html.erb"],不能写成app/views/**/* - 如果用了
defineAsyncComponent或动态import(),需额外加上异步组件目录,例如./src/components/async/**/*.{js,ts}
哪些情况会让 content 形同虚设
即使路径语法正确,以下操作也会让扫描器“看不见”你的类名:
- 在
<script setup></script>里拼接 class:class="text-{{ size }}"—— Oxide 不解析 JS 表达式,这类动态类必须用@config显式声明变体或改用classList - CSS 文件中通过
@apply引用的工具类,不会被 content 扫描器捕获(v4 已不鼓励@apply) - HTML 模板放在
public/下但没把./public/**/*.html加进content数组 - Vite / Next.js 项目未配置正确的入口 CSS 文件,导致 Oxide 根本没启动扫描流程
最常被忽略的一点:VSCode Tailwind 插件默认只读 tailwind.config.js,如果你删了它或改了路径,必须手动设置 "tailwindCSS.experimental.configFile" 指向含 @import "tailwindcss" 的主 CSS 文件,否则编辑器里连类名提示都没有。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











