tailwind.config.js 的结构
理解配置文件中的各个部分,包括 content、theme、extend、plugins 和 presets,以及它们如何影响编译。
tailwind.config.js 的结构 是 CoddyKit 上的免费 Tailwind CSS Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Tailwind CSS Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Tailwind CSS Academy 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Why a Config File Exists
Tailwind CSS is designed to be customizable at its core. The tailwind.config.js file is the single source of truth for all customizations to the default design system. Without it, you get Tailwind's sensible defaults. With it, you can redefine any part of the design system — colors, fonts, spacing, breakpoints, animations, and more — while still generating the full utility class API automatically.
Generating the Config File
Create a default config file by running npx tailwindcss init. This generates a minimal tailwind.config.js with empty stubs for the most common sections. Use npx tailwindcss init --full to generate a complete config that includes every default value — useful for reference but usually too verbose to work with day-to-day.
# Generate a minimal config
npx tailwindcss init
# Generate a full config showing all defaults
npx tailwindcss init --full
# Generate config + postcss.config.js together
npx tailwindcss init -pThe content Section
The content array tells Tailwind where to look for class names so it can include only the utilities your project actually uses. You provide glob patterns pointing to your HTML, JS, JSX, TSX, Vue, and any other files that contain Tailwind classes. Getting this right is critical — missing a file means its classes get purged from the production build.
// tailwind.config.js
module.exports = {
content: [
'./src/**/*.{html,js,jsx,ts,tsx}',
'./pages/**/*.{js,jsx,ts,tsx}',
'./components/**/*.{js,jsx,ts,tsx}',
'./public/index.html',
],
// ...
};The theme Section
The theme section contains all design token configurations: colors, spacing, typography, breakpoints, shadows, border radii, and more. You can either extend the defaults (adding new values alongside existing ones) or override them (replacing defaults entirely). The theme object mirrors Tailwind's internal structure, where each key maps to a category of utilities.
// tailwind.config.js
module.exports = {
theme: {
// OVERRIDE: replaces ALL default font sizes
fontSize: {
sm: '0.875rem',
base: '1rem',
lg: '1.25rem',
},
extend: {
// EXTEND: adds TO the default font sizes
fontSize: {
'2xs': '0.625rem',
},
},
},
};The extend Key Explained
The theme.extend object is where you add custom values without replacing Tailwind's defaults. Anything inside extend is merged with the existing defaults rather than replacing them. This is the recommended approach for most projects — you keep everything Tailwind provides while adding your project-specific values on top. Reserve direct theme overrides for cases where you truly want to eliminate defaults.
// tailwind.config.js
module.exports = {
theme: {
extend: {
colors: {
brand: {
50: '#eff6ff',
500: '#3b82f6',
900: '#1e3a5f',
},
},
spacing: {
'128': '32rem',
'144': '36rem',
},
borderRadius: {
'4xl': '2rem',
},
},
},
};The plugins Section
The plugins array accepts official Tailwind plugins and custom plugins that extend the generated CSS. Plugins can add new utility classes, new component classes, new base styles, or new variants. You require them like any Node.js module and can pass configuration objects to plugins that support options. The plugins section runs after the theme is resolved, so plugins have access to all theme values.
// tailwind.config.js
const forms = require('@tailwindcss/forms');
const typography = require('@tailwindcss/typography');
module.exports = {
plugins: [
forms,
typography({ strategy: 'class' }),
require('@tailwindcss/aspect-ratio'),
],
};The presets Section
The presets array allows you to compose multiple Tailwind configurations together. A preset is just a Tailwind config object that serves as a base. Your project config is merged on top of it. This is the recommended pattern for sharing a base design system across multiple projects in a monorepo — define tokens once in a preset package and consume it everywhere.
// packages/ui-config/tailwind.preset.js
module.exports = {
theme: {
extend: {
colors: { brand: '#6366f1' },
},
},
};
// apps/my-app/tailwind.config.js
module.exports = {
presets: [require('@company/ui-config/tailwind.preset')],
content: ['./src/**/*.tsx'],
};The darkMode Setting
The darkMode key controls how Tailwind's dark: variant activates. Set it to 'media' to activate dark styles based on the OS preference, or 'class' to require a dark class on an ancestor. In Tailwind v3.3+, you can also pass an array with a custom selector: ['class', '.theme-dark'] to use a class name other than dark.
// tailwind.config.js
module.exports = {
darkMode: 'class', // or 'media', or ['class', '.theme-dark']
content: ['./src/**/*.{html,js}'],
theme: { extend: {} },
plugins: [],
};Config as ESM or CJS
By default, Tailwind expects a CommonJS module (module.exports). In projects using ESM (type: 'module' in package.json), name your config tailwind.config.cjs to explicitly use CommonJS syntax. Tailwind v4 (released 2024) moves to a CSS-first config approach entirely, but for v3 projects (still the most common), tailwind.config.js with CJS syntax is the standard.
// tailwind.config.cjs (for ESM projects)
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./src/**/*.{html,js,jsx,ts,tsx}'],
theme: {
extend: {},
},
plugins: [],
};Using TypeScript Types in Config
Add a JSDoc @type annotation to your config file to get autocompletion in VSCode without converting to TypeScript. The type comes from the tailwindcss package itself. This tells your editor the exact shape of the config object, so you get autocomplete and type errors when you misspell a theme key or pass an invalid value.
// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./src/**/*.{html,js}'],
theme: {
extend: {
colors: {
primary: '#6366f1', // autocomplete shows available color keys
},
},
},
plugins: [],
};Config Sections at a Glance
To summarize the full anatomy of tailwind.config.js: content defines what files to scan, theme defines design tokens with extend for additive changes, plugins adds extended functionality, presets composes base configs, and darkMode controls dark variant behavior. Every section is optional — an empty config is valid and simply uses all of Tailwind's defaults.
// tailwind.config.js — full anatomy
module.exports = {
content: [], // file globs to scan
darkMode: 'class', // dark mode strategy
theme: {
// override defaults here
extend: {
// add to defaults here
},
},
plugins: [], // extend Tailwind's output
presets: [], // compose from base configs
};Quick Check
Test your understanding of the Tailwind CSS configuration file anatomy.
Lesson Recap
In this lesson you learned: the content array specifies which files to scan for class names, theme.extend adds values alongside defaults while direct theme overrides replace them, and plugins and presets compose and extend Tailwind's capabilities. Next up we explore content paths and how Tailwind purges unused classes in production.
用 AI 导师学习 HTML — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「tailwind.config.js 的结构」课时是免费的吗?
是的 — 「tailwind.config.js 的结构」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Tailwind CSS Academy 课程的其余内容,请升级到 CoddyKit PRO。 Tailwind CSS Academy 课程共包含 4 节课。
「tailwind.config.js 的结构」这节课中我会学到什么?
理解配置文件中的各个部分,包括 content、theme、extend、plugins 和 presets,以及它们如何影响编译。 你通过在浏览器中直接运行的动手代码来练习 Tailwind CSS Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Tailwind CSS Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Tailwind CSS Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「tailwind.config.js 的结构」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Tailwind CSS Academy 课中编写并运行代码吗?
能。每节 Tailwind CSS Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- tailwind.config.js 的结构
- 内容路径与清除未使用样式
- 扩展主题与覆盖主题
- 添加与配置插件