自定义配置

Tailwind 不是"黑盒"。它有一个 tailwind.config.js 文件,所有设计变量(主题色、字体、断点、间距、阴影……)都能在这里扩展或覆盖。这是把"框架"变成"你团队的设计系统"的关键——配置好后,团队成员写出来的代码天然遵循设计规范。

1. 配置文件骨架

初始化 Tailwind 时会自动生成 tailwind.config.js,长这样:

// tailwind.config.js
module.exports = {
  // 1. darkMode:控制暗色模式策略
  darkMode: 'class',  // 或 'media'(跟随系统)

  // 2. content:极重要!告诉 Tailwind 去哪些文件扫描类
  content: [
    './src/**/*.{html,js,ts,jsx,tsx,vue,astro,svelte}',
    './index.html',
  ],

  // 3. theme:设计 token(颜色/字体/间距/断点等)
  theme: {
    extend: {
      // 这里写"扩展",保留默认值
    },
  },

  // 4. plugins:官方/第三方插件
  plugins: [],
};

四个最关键字段:darkMode(暗色模式策略)、content(类扫描路径)、theme(设计 token)、plugins(插件)。

2. theme.extend vs theme:扩展 vs 覆盖

这是最重要的概念。Tailwind 默认提供了一套丰富完整的设计 token(几十种颜色、字体、间距)。你有两种方式修改:

// extend:扩展,在默认值基础上"加"。强烈推荐!
module.exports = {
  theme: {
    extend: {
      colors: {
        brand: '#3b82f6',         // 加一个 brand 色
        'brand-dark': '#1e40af',  // 加一个深 brand
      },
      spacing: {
        18: '4.5rem',             // 加一个 p-18 / m-18
      },
    },
  },
};

// 上面配置后:
// bg-brand、text-brand、border-brand 都能用
// p-18、m-18、w-18 都能用
// 默认的 blue-500、gray-700 等仍然全部可用
// 直接写在 theme 顶层:覆盖,默认值全部丢失!慎用
module.exports = {
  theme: {
    colors: {
      primary: '#3b82f6',
      secondary: '#10b981',
    },
    // 此时 bg-blue-500、text-gray-700 全部失效!
    // 只有 bg-primary、bg-secondary 可用
  },
};

// 99% 情况下应该用 extend,不要直接覆盖
// 除非你有意做"严格设计系统",
// 禁止使用非品牌色

99% 情况下用 extend。只在罕见场景(严格设计系统,完全禁止默认色)才用覆盖。

3. 扩展颜色

项目通常有一套品牌色。最推荐的做法是加一个色阶对象,而不是单值——这样 bg-brand-500hover:bg-brand-600text-brand-700 都能用,和默认色一视同仁:

// 自定义颜色:支持单值,也支持色阶对象
module.exports = {
  theme: {
    extend: {
      colors: {
        // 单值:用 bg-brand / text-brand / border-brand
        brand: '#3b82f6',

        // 色阶对象:用 bg-brand-500 / text-brand-700 等
        brand: {
          50:  '#eff6ff',
          100: '#dbeafe',
          200: '#bfdbfe',
          300: '#93c5fd',
          400: '#60a5fa',
          500: '#3b82f6',  // 主色
          600: '#2563eb',
          700: '#1d4ed8',
          800: '#1e40af',
          900: '#1e3a8a',
        },

        // 还可以引用其他颜色
        primary: '#3b82f6',
        danger:  '#ef4444',
        success: '#10b981',
        warning: '#f59e0b',
      },
    },
  },
};

获取色阶的捷径:用 uicolors.app 这类工具,输入一个主色自动生成 50~950 完整色阶。

4. 扩展字体族

用 Google Fonts 或自托管的字体时,需要扩展 fontFamily:

// 自定义字体族
module.exports = {
  theme: {
    extend: {
      fontFamily: {
        // 覆盖默认 sans(所有元素默认会用)
        sans: ['Inter', 'system-ui', 'sans-serif'],

        // 加新的字体族
        display: ['"Playfair Display"', 'serif'],   // 大标题用
        mono: ['"Fira Code"', 'monospace'],          // 代码用
        han:   ['"Noto Sans SC"', 'sans-serif'],     // 中文用
      },
    },
  },
};

// 同时在 CSS 入口引入字体:
// @import url('https://fonts.googleapis.com/css2?family=Inter&display=swap');

技巧:覆盖 sans 会让所有元素默认用新字体(因为 Tailwind 的 preflight 给 body 设了 font-sans)。加新字体族(displaymono)则用于特定场景。

5. 自定义断点

// 自定义断点
module.exports = {
  theme: {
    // extend.screens 是新增
    extend: {
      screens: {
        xs: '425px',     // 加一个超小屏(比 sm 还小)
      },
    },

    // 直接 screens 是覆盖(默认 sm/md/lg/xl/2xl 全失效)
    // screens: {
    //   sm: '500px',
    //   md: '900px',
    // },
  },
};

6. content 字段(极重要!)

content 告诉 Tailwind "去哪些文件扫描用到的类"。漏配会导致部分类不生效——这是初学者最常踩的坑:

// content 字段极重要!漏配会导致部分类不生效
module.exports = {
  content: [
    // 推荐写法:扫描所有源码目录
    './src/**/*.{html,js,ts,jsx,tsx,vue,astro,svelte}',

    // 不要忘记 index.html(Vite 项目根目录)
    './index.html',

    // 第三方组件库的源码(如果它内部用了 Tailwind 类)
    './node_modules/my-ui-lib/**/*.{js,ts}',
  ],
};

// 工作原理:
// Tailwind 在 build 时扫描这些文件,
// 把"出现在文件里的所有 utility 类名"收集起来,
// 然后只把"被用到的类"打包进最终 CSS。
// 没扫到的类不会进 CSS,导致样式失效。

常见症状:

7. darkMode:暗色模式策略

两个选项:

做产品推荐 class,给用户选择权。做技术博客可以用 media,跟随系统即可。

8. plugins:扩展能力

官方和社区提供了大量插件:

// plugins:扩展 Tailwind 能力
const typography = require('@tailwindcss/typography');
const forms      = require('@tailwindcss/forms');
const animate    = require('tailwindcss-animate');

module.exports = {
  plugins: [
    typography,  // 加 prose-* 类(美化长文)
    forms,       // 自动美化表单元素
    animate,     // 加 animate-* 类
  ],
};

// 常用官方插件:
// @tailwindcss/typography  - 长文/博客排版
// @tailwindcss/forms       - 表单元素统一样式
// @tailwindcss/aspect-ratio - 维持宽高比
// @tailwindcss/line-clamp  - 已内置,无需装

几个特别有用的官方插件:

9. 一个完整的"团队设计系统"配置示例

把品牌色、字体、阴影、断点全部规范化,团队任何成员写代码都自动遵循:

这就是把 Tailwind 从"框架"变成"设计系统"的核心——配置一次,全团队受益。

10. 常见陷阱

小结

记住核心要点:

下一篇是最后一篇——讲 @apply 抽取组件,以及"什么时候该抽取"的工程判断。

← 上一篇 状态前缀

下一篇 抽取组件

✈️💬