Tailwind CSS 使用
Tailwind CSS 通过工具类快速构建界面,适合 Vue 项目中的后台系统、运营页面和需要统一设计语言的业务应用。使用时应配合组件封装和设计 token,避免模板中堆出难维护的长 class。
Tailwind CSS 3
安装依赖
bash
cd my-project
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p该命令会生成:
text
tailwind.config.js
postcss.config.js配置扫描路径
js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"],
theme: {
extend: {}
},
plugins: []
};引入 Tailwind
在 src/assets/main.css 中添加:
css
@tailwind base;
@tailwind components;
@tailwind utilities;在入口文件引入:
js
import { createApp } from "vue";
import App from "./App.vue";
import "./assets/main.css";
createApp(App).mount("#app");验证效果
vue
<template>
<button class="rounded bg-blue-600 px-4 py-2 text-white hover:bg-blue-700">
保存
</button>
</template>启动项目:
bash
npm run devTailwind CSS 4
Tailwind CSS 4 推荐使用 Vite 插件接入。
安装依赖
bash
npm install tailwindcss @tailwindcss/vite配置 Vite
ts
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({
plugins: [vue(), tailwindcss()]
});引入样式
css
@import "tailwindcss";组件封装建议
工具类适合快速表达样式,但重复出现的模式应该封装为组件。
vue
<template>
<button
class="inline-flex h-9 items-center justify-center rounded border border-slate-300 px-3 text-sm font-medium text-slate-700 hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-50"
:disabled="disabled"
>
<slot />
</button>
</template>
<script setup lang="ts">
defineProps<{
disabled?: boolean;
}>();
</script>常用布局片段
居中容器
html
<main class="mx-auto w-full max-w-6xl px-4 sm:px-6 lg:px-8"></main>自适应网格
html
<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3"></div>表单行
html
<label class="grid gap-1 text-sm">
<span class="font-medium text-slate-700">用户名</span>
<input class="h-9 rounded border border-slate-300 px-3 outline-none focus:border-blue-500" />
</label>维护建议
- 不要把大量重复 class 散落在每个页面,稳定样式应封装组件。
- 颜色、间距、字号等全局规则应沉淀到主题配置或 CSS 变量。
- 动态 class 不要使用字符串拼接出完整类名,否则可能无法被扫描。
- 生产构建前检查页面,确认没有因为扫描路径缺失导致样式丢失。
常见问题
样式没有生效
检查 content 是否包含 .vue 文件路径,入口 CSS 是否已引入,以及开发服务是否重启。
动态类名丢失
避免这样写:
vue
<div :class="`text-${type}-600`"></div>推荐使用映射:
ts
const colorClass = {
success: "text-green-600",
danger: "text-red-600"
};与组件库样式冲突
优先确认加载顺序,再通过组件库主题变量或局部样式覆盖。不要大范围使用 !important,否则后续维护成本会很高。
