Tailwind CSS v4
本技能涵盖 Tailwind CSS v4.x,内容基于 https://tailwindcss.com/docs。v4 的配置在 CSS 中完成,而非 JavaScript,并且许多 v3 的类名和默认值已经更改。本技能重点记录与习惯用法不同的地方:CSS 优先的设置方式、令人惊讶的默认值、重命名的工具类以及文档推荐的模式。参考文件中的每个说法末尾都标明了其来源页面。
如何导航
- 阅读下面的规则。它们涵盖了 v4 中最常见的、与 v3 习惯用法不同并会导致问题的地方。
- 根据末尾的表格,打开与任务匹配的一个参考文件。
- 当项目包含
tailwind.config.js、@tailwind指令或 v3 类名时,或者在审查可能带有 v3 习惯的代码时,请先阅读references/upgrade-from-v3.md。默认的迁移路径是在一个新分支中运行npx @tailwindcss/upgrade,然后审查其差异并在浏览器中测试。https://tailwindcss.com/docs/upgrade-guide#using-the-upgrade-tool
快速入门 (CSS 优先, Vite)
npm install tailwindcss @tailwindcss/vite
// vite.config.ts
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({ plugins: [tailwindcss()] })
/* app.css */
@import "tailwindcss";
@theme {
--color-midnight: #121063;
--font-display: "Oswald", sans-serif;
}
@custom-variant dark (&:where(.dark, .dark *));
- 整个设置只需要一个包、一个插件和一个
@import "tailwindcss";。安装步骤无需tailwind.config.js和content数组。https://tailwindcss.com/docs/installation/using-vite - Tailwind 会自行扫描源文件。
.gitignore、node_modules、CSS 文件和锁文件中的文件会被跳过。https://tailwindcss.com/docs/detecting-classes-in-source-files#which-files-are-scanned - Next.js、Angular 和其他非 Vite 的打包工具应使用 PostCSS 插件代替:
npm install tailwindcss @tailwindcss/postcss postcss,然后plugins: { "@tailwindcss/postcss": {} }。https://tailwindcss.com/docs/installation/using-postcss - 字体 URL 的
@import(如 Google Fonts)应放在@import "tailwindcss"之前,然后在@theme中声明字体系列。https://tailwindcss.com/docs/font-family#customizing-your-theme @theme变量会创建工具类:--color-midnight会生成bg-midnight、text-midnight、fill-midnight,而--font-display会生成font-display。https://tailwindcss.com/docs/theme#what-are-theme-variables
最重要的规则
设置与配置
- PostCSS 插件是
@tailwindcss/postcss,而不是tailwindcss。不要添加autoprefixer或postcss-import:导入和厂商前缀功能已内置。https://tailwindcss.com/docs/upgrade-guide#using-postcss - 在 Vite 配置中,框架指南建议将
tailwindcss()放在plugins数组的最前面,位于框架插件(React Router、SvelteKit、SolidJS、Qwik)之前。文档没有说明顺序要求。https://tailwindcss.com/docs/installation/framework-guides/react-router https://tailwindcss.com/docs/installation/framework-guides/sveltekit - 使用
@theme在 CSS 中进行自定义。JS 配置文件不再被自动检测,只能通过@config "../../tailwind.config.js";加载,并且不再支持corePlugins、safelist或separator。https://tailwindcss.com/docs/upgrade-guide#using-a-javascript-config-file - 使用
@source inline("{hover:,}bg-red-{50,{100..900..100},950}");进行安全列表管理。https://tailwindcss.com/docs/detecting-classes-in-source-files#safelisting-specific-utilities - 位于
node_modules内、使用 Tailwind 构建的库不会被扫描:请添加@source "../node_modules/@acmecorp/ui-lib";(路径相对于样式表)。https://tailwindcss.com/docs/detecting-classes-in-source-files#explicitly-registering-sources - 永远不要动态构建类名(如
`bg-${color}-600`)。请将值映射到完整的类字符串。https://tailwindcss.com/docs/detecting-classes-in-source-files#dynamic-class-names - Vue、Svelte 或 Astro 的
<style>块以及 CSS 模块是分别编译的。在这些地方使用@apply之前,请先添加@reference "../app.css";,或者改用var(--color-blue-500)。https://tailwindcss.com/docs/compatibility#explicit-context-sharing https://tailwindcss.com/docs/compatibility#vue-svelte-and-astro - Tailwind v4 设计上不与 Sass、Less 或 Stylus 等 CSS 预处理器一起使用,因此它们不能用于样式表或 Vue、Svelte、Astro 的
<style>块中。https://tailwindcss.com/docs/compatibility#sass-less-and-stylus - v4 需要 Safari 16.4+、Chrome 111+、Firefox 128+。对于旧版浏览器,请继续使用 v3.4。https://tailwindcss.com/docs/upgrade-guide#browser-requirements
主题与自定义 CSS
- 当主题变量引用另一个变量时,请编写
@theme inline { --font-sans: var(--font-inter); },否则该值将在--font-sans定义处解析。https://tailwindcss.com/docs/theme#referencing-other-variables - 使用
--color-*: initial;移除默认命名空间,使用--*: initial;移除整个主题。https://tailwindcss.com/docs/theme#overriding-the-default-theme - 使用
@utility name { ... }声明自定义工具类,而不是使用@layer utilities,这样变体才能作用于它们。https://tailwindcss.com/docs/upgrade-guide#adding-custom-utilities - 在自定义 CSS 和 JS 中,使用 CSS 变量(
var(--color-red-500))读取主题值,而不是使用theme(colors.red.500)或resolveConfig。https://tailwindcss.com/docs/upgrade-guide#theme-values-in-javascript - 为每个断点使用相同的单位(如默认值那样使用 rem),否则断点会相互覆盖。https://tailwindcss.com/docs/responsive-design#customizing-your-theme
类语法
- CSS 变量简写使用括号:
bg-(--brand-color),而不是bg-[--brand-color]。https://tailwindcss.com/docs/upgrade-guide#variables-in-arbitrary-values text-(--my-var)有歧义(是字号还是颜色?),因此请添加类型提示:text-(length:--my-var)或text-(color:--my-var)。类似的提示也适用于font-(family-name:--f)、border-(length:--w)、bg-(image:--img)和shadow-(color:--c)。https://tailwindcss.com/docs/adding-custom-styles#resolving-ambiguities https://tailwindcss.com/docs/font-family https://tailwindcss.com/docs/border-width https://tailwindcss.com/docs/background-image https://tailwindcss.com/docs/box-shadow- important 修饰符放在末尾:
bg-red-500!。https://tailwindcss.com/docs/upgrade-guide#the-important-modifier - 堆叠变体从左到右应用:
*:first:pt-0,而不是first:*:pt-0。https://tailwindcss.com/docs/upgrade-guide#variant-stacking-order - 无前缀的类针对所有尺寸。
sm:并不意味着移动端:请编写text-center sm:text-left。https://tailwindcss.com/docs/responsive-design#targeting-mobile-screens hover:仅适用于可以悬停的设备(@media (hover: hover))。将悬停视为一种增强。https://tailwindcss.com/docs/upgrade-guide#hover-styles-on-mobile
更改的默认值
- 边框和分割线颜色默认值为
currentColor:始终使用border设置颜色。https://tailwindcss.com/docs/upgrade-guide#default-border-color ring现在是 1px 的currentColor。要获得 v3 的外观,请编写ring-3 ring-blue-500。https://tailwindcss.com/docs/upgrade-guide#default-ring-width-and-color- 使用
outline-hidden隐藏焦点轮廓(在 forced-colors 模式下保留):v3 的focus:outline-none变为focus:outline-hidden。outline-none现在会完全移除轮廓。https://tailwindcss.com/docs/upgrade-guide#renamed-outline-utility - 缩放比例已调整:v3 的
shadow-sm、rounded-sm、blur-sm现在是-xs,而 v3 不带后缀的shadow、rounded、blur现在是-sm。https://tailwindcss.com/docs/upgrade-guide#updated-shadow-radius-and-blur-scales - 渐变使用
bg-linear-to-r,加上bg-radial和bg-conic-<angle>。https://tailwindcss.com/docs/background-image#adding-a-linear-gradient container既不会居中也不会添加内边距:请编写container mx-auto px-4。https://tailwindcss.com/docs/max-width#using-breakpoints-container- 对于网格、需要换行的布局或自定义顺序的子元素,请使用
gap代替space-x-*和space-y-*。https://tailwindcss.com/docs/margin#limitations - 按钮现在具有
cursor: default。https://tailwindcss.com/docs/upgrade-guide#buttons-use-the-default-cursor - 占位符使用当前文本颜色的 50% 透明度。https://tailwindcss.com/docs/upgrade-guide#new-default-placeholder-color
- 显示类不再覆盖
hidden属性:要显示元素,请移除hidden。https://tailwindcss.com/docs/upgrade-guide#hidden-attribute-takes-priority
使用 class 实现深色模式
@import "tailwindcss";
@custom-variant dark (&:where(.dark, .dark *));
// 在 <head> 中内联,页面渲染之前执行
document.documentElement.classList.toggle(
"dark",
localStorage.theme === "dark" ||
(!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches),
);
设置 localStorage.theme = "dark" 或 "light",以及 localStorage.removeItem("theme") 以跟随系统设置。https://tailwindcss.com/docs/dark-mode#with-system-theme-support
参考文件
| 文件 | 何时阅读 |
|---|---|
| references/installation-and-frameworks.md | 安装 Tailwind、选择 Vite/PostCSS/CLI、框架特定步骤、CSS 模块、编辑器工具 |
| references/upgrade-from-v3.md | 迁移 v3 项目、审查包含 v3 类名或配置的代码 |
| references/utilities-and-variants.md | 编写类:任意值、冲突、状态变体、group 和 peer、响应式、容器查询、深色模式 |
| references/theme-and-colors.md | 添加或覆盖颜色、字体、断点、间距、动效、主题命名空间 |
| references/custom-styles.md | 基础样式、Preflight、组件类、@utility、功能性工具类、@custom-variant、@variant |
| references/directives-and-source-detection.md | @apply、@reference、--alpha()、--spacing()、@config、@plugin、@source、导入选项 (prefix、important、source) |
| references/layout-flexbox-grid.md | 显示、定位、inset、z-index、列、flex、grid、对齐和 -safe 对齐 |
| references/spacing-and-sizing.md | 内边距、外边距、space、宽度、高度、尺寸、容器缩放、视口单位、逻辑尺寸 |
| references/typography.md | 字体、字号和行高、字母间距、文本换行、溢出换行、装饰、内容 |
| references/backgrounds-and-borders.md | 渐变、背景图片、尺寸和位置、圆角、边框宽度和颜色、轮廓 |
| references/effects-and-filters.md | 阴影、环、文本阴影、透明度、混合模式、遮罩、滤镜和背景滤镜 |
| references/transitions-transforms-tables.md | 过渡、离散过渡、动效、旋转、缩放、平移、3D、缩放、表格 |
| references/interactivity-and-svg.md | 配色方案、字段尺寸、滚动条、滚动吸附、光标、will-change、SVG 填充和描边、强制颜色 |