Skip to content

什么时候该改 config,什么时候不该」。

一、tailwind.config.js 是干嘛的?

一句话:

设计系统(Design Token)配置中心

你在这里定义:

  • 颜色体系
  • 间距 / 字号 / 圆角
  • 断点
  • 动画
  • 暗黑模式
  • 插件
js
// tailwind.config.js
export default {
  content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
  theme: { },
  plugins: []
}

二、theme vs extend(重点)

1️⃣ theme:完全覆盖默认值

❌ 不推荐新手用

js
theme: {
  colors: {
    primary: '#1677ff'
  }
}

⚠️ 后果: 👉 默认的 red / blue / gray 全没了

2️⃣ extend:在默认基础上扩展(99% 用这个)

✅ 正确姿势

js
theme: {
  extend: {
    colors: {
      primary: '#1677ff'
    }
  }
}

📌 结论

👉 业务项目:永远优先用 extend

三、最常用的 extend 项

1️⃣ 颜色(Colors)

定义主色 / 语义色

js
extend: {
  colors: {
    primary: '#1677ff',
    success: '#52c41a',
    warning: '#faad14',
    danger: '#ff4d4f'
  }
}

使用:

html
<div class="bg-primary text-white"></div>

定义一整套色阶(推荐)

js
colors: {
  primary: {
    50:  '#e6f4ff',
    100: '#bae0ff',
    500: '#1677ff',
    700: '#0958d9'
  }
}
html
<div class="bg-primary-500 hover:bg-primary-700"></div>

📌 这样才像设计系统

2️⃣ 字号(fontSize)

js
extend: {
  fontSize: {
    xs: ['12px', '16px'],
    sm: ['14px', '20px'],
    base: ['16px', '24px'],
    lg: ['18px', '28px']
  }
}

结构:

js
fontSize: [fontSize, lineHeight]

3️⃣ 间距(spacing)

js
extend: {
  spacing: {
    18: '72px',
    22: '88px'
  }
}
html
<div class="mt-18 px-22"></div>

📌 常用于不规则设计稿

4️⃣ 圆角(borderRadius)

js
extend: {
  borderRadius: {
    xl: '12px',
    '2xl': '16px'
  }
}

5️⃣ 阴影(boxShadow)

js
extend: {
  boxShadow: {
    card: '0 4px 12px rgba(0,0,0,.08)',
    popup: '0 8px 24px rgba(0,0,0,.12)'
  }
}
html
<div class="shadow-card"></div>

6️⃣ 断点(screens)

js
extend: {
  screens: {
    xs: '480px',
    '3xl': '1600px'
  }
}
html
<div class="xs:text-sm 3xl:text-xl"></div>

四、暗黑模式配置(常用)

js
export default {
  darkMode: 'class'
}

使用:

html
<div class="bg-white dark:bg-gray-900"></div>

Vue 切换:

js
document.documentElement.classList.toggle('dark')

五、动画 & keyframes(进阶但常用)

定义动画

js
extend: {
  keyframes: {
    fadeIn: {
      '0%': { opacity: 0 },
      '100%': { opacity: 1 }
    }
  },
  animation: {
    fade: 'fadeIn .3s ease-out'
  }
}
html
<div class="animate-fade"></div>

六、抽象样式:@apply(谨慎)

css
/* main.css */
.btn {
  @apply px-4 py-2 rounded bg-primary text-white hover:bg-primary-700;
}

📌 使用原则

  • 组件库 / 公共组件 ✅
  • 页面私有样式 ❌(直接 class)

七、和 Vue / Vite 配合的坑点

1️⃣ content 一定要全

js
content: [
  './index.html',
  './src/**/*.{vue,js,ts}'
]

2️⃣ 动态 class 会被 purge 掉

vue
<div :class="`bg-${color}-500`" />

js
const colorMap = {
  primary: 'bg-primary-500',
  danger: 'bg-danger-500'
}

八、推荐一套【企业级 config 模板】

js
export default {
  darkMode: 'class',
  content: ['./index.html', './src/**/*.{vue,js,ts}'],
  theme: {
    extend: {
      colors: {
        primary: {
          50: '#e6f4ff',
          500: '#1677ff',
          700: '#0958d9'
        }
      },
      boxShadow: {
        card: '0 4px 12px rgba(0,0,0,.08)'
      },
      borderRadius: {
        xl: '12px'
      }
    }
  }
}

九、什么时候该改 config?

应该改

  • 设计稿有明确主色 / 圆角 / 阴影规范
  • 想统一风格
  • 做组件库 / 中后台

不该改

  • 只是某一个页面特殊样式
  • 一次性 demo
  • 纯试验项目