Tailwindcss v4 的 @import / @theme / @utility 指令是什么?
· 5 min read
Tailwind v4 重新设计 CSS 入口,几条新指令各司其职,不再像 v3 那样靠 @tailwind 堆叠。
- @import "tailwindcss":替代 v3 的三条
@tailwind,整合 base + utilities - @theme:设计 token 入口,颜色字号间距都在这定义
- @utility:自定义工具类,替代 v3 的
@layer写法 - @variant:自定义变体(hover / focus / ...),替代 v3 的 JS 配置
- 级联顺序:v4 只剩
base → utilities两层
核心:@theme 把设计 token 从 JS 搬到 CSS,样式与变量同源。
一句话总结 v4 的指令体系
v4 把 v3 的三条 @tailwind 拆出来,重新设计为几条独立指令,各管一摊。最大的变化是 @theme——设计 token 不再藏在 tailwind.config.js 里,直接写在 CSS 文件。
@import "tailwindcss"
替代 v3 的三条 @tailwind 指令。一条 import 整合所有层。
/* v4 写法 */
@import "tailwindcss";
替代 v3 的:
/* v3 写法 */
@tailwind base;
@tailwind components;
@tailwind utilities;
@theme —— v4 真正的杀手锏
这一节是 v4 改动的核心。@theme 块用来定义设计 token——颜色、字号、间距、圆角、字体等。v3 这些配置都写在 tailwind.config.js 里,v4 直接搬进 CSS 文件 。
基本用法
@import "tailwindcss";
@theme {
/* 颜色 */
--color-primary: oklch(60% 0.18 240);
--color-secondary: oklch(80% 0.1 100);
/* 字号 */
--text-base: 1rem;
--text-2xl: 1.5rem;
/* 间距 */
--spacing-4: 1rem;
/* 圆角 */
--radius-md: 0.375rem;
/* 字体 */
--font-sans: 'Inter', sans-serif;
}
写完上面这一段,源码里就能直接用 bg-primary、text-2xl、p-4、rounded-md、font-sans 这些类——Tailwind 构建时扫到这些 CSS 变量,自动生成对应 utility。
命名空间自动生成 utility
@theme 里的 CSS 变量 不是普通变量,命名空间会被 Tailwind 扫到并转成对应 utility:
| 变量前缀 | 生成的 utility | 例子 |
|---|---|---|
--color-* | bg- text- border- ring- | --color-primary → bg-primary、text-primary |
--text-* | text- | --text-2xl → text-2xl(字号,不是颜色) |
--font-* | font- | --font-sans → font-sans |
--spacing-* | p- m- w- h- 等所有尺寸 | --spacing-4 → p-4、m-4、w-4 |
--radius-* | rounded- | --radius-md → rounded-md |
--shadow-* | shadow- | --shadow-lg → shadow-lg |
--breakpoint-* | @ 用于 @media | --breakpoint-md → @md |
注意
--text-*既生成字号 utility 又不生成颜色 utility——具体看变量名,后缀名决定。
@theme 的核心价值
- 设计 token 跟 CSS 写在同处——v3 时代写在
tailwind.config.js里跟 CSS 分离,改个颜色得动 JS - CSS 变量原生支持——运行时可被 JS 改写,做主题切换不再需要
darkMode: 'class'整套机制 - 构建期自动转 utility——写一个
--color-brand就自动有bg-brand、text-brand等
主题切换:@theme 时代很简单
v4 不需要 dark: 前缀那一套,纯 CSS 变量就能搞定:
@theme {
--color-bg: white;
--color-fg: #111;
}
@media (prefers-color-scheme: dark) {
:root {
--color-bg: #111;
--color-fg: white;
}
}
然后源码里写 bg-bg、text-fg,浏览器自动跟系统主题切换。