tailwindcss-design
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTailwindCSS Design Patterns
TailwindCSS 设计模式
TailwindCSS implementation companion for web-design-mastery skill. Translates Refactoring UI principles into Tailwind utility classes.
Prerequisite: This skill provides Tailwind-specific syntax. For design theory and decision-making, referenceskill.web-design-mastery
这是web-design-mastery技能的TailwindCSS实现配套指南。将Refactoring UI原则转化为Tailwind工具类的使用方案。
前提条件: 本技能提供Tailwind专属语法。若需设计理论与决策相关内容,请参考技能。web-design-mastery
⚠️ CRITICAL: Project Brand Colors First
⚠️ 重要提示:优先使用项目品牌色
ALWAYS check for custom colors before using generic colors.
tailwind.config.jsIf the project defines , , , or similar custom colors, USE THEM:
primarysecondarybrandjs
// tailwind.config.js
colors: {
primary: { 50: '...', 500: '...', 900: '...' },
secondary: { ... },
brand: { ... }
}Priority order:
- Project-defined colors (,
primary,secondary,brand)accent - Generic Tailwind colors (,
zinc,gray) as fallback onlyslate
Usage examples with project colors:
html
<!-- ✅ CORRECT: Use project colors -->
<button class="bg-primary-600 hover:bg-primary-700 text-white">
<a class="text-primary-600 hover:text-primary-700">
<div class="border-primary-500 bg-primary-50">
<input class="focus:border-primary-500 focus:ring-primary-500">
<!-- Active/selected states -->
<nav class="bg-primary-50 text-primary-700">
<!-- ❌ AVOID when project colors exist -->
<button class="bg-blue-600"> <!-- Generic, ignores brand -->
<button class="bg-zinc-900"> <!-- Only if no primary defined -->Rules:
- Primary = main CTAs, active states, links, focus rings
- Secondary = alternative actions, supporting elements
- Brand/Accent = highlights, decorative elements
- Neutral (zinc/gray) = structure, text, borders only
在使用通用颜色前,请务必检查中的自定义颜色配置。
tailwind.config.js如果项目中定义了、、或类似的自定义颜色,请优先使用这些颜色:
primarysecondarybrandjs
// tailwind.config.js
colors: {
primary: { 50: '...', 500: '...', 900: '...' },
secondary: { ... },
brand: { ... }
}优先级顺序:
- 项目自定义颜色(、
primary、secondary、brand)accent - 通用Tailwind颜色(、
zinc、gray)仅作为备选slate
项目颜色使用示例:
html
<!-- ✅ 正确用法:使用项目颜色 -->
<button class="bg-primary-600 hover:bg-primary-700 text-white">
<a class="text-primary-600 hover:text-primary-700">
<div class="border-primary-500 bg-primary-50">
<input class="focus:border-primary-500 focus:ring-primary-500">
<!-- 激活/选中状态 -->
<nav class="bg-primary-50 text-primary-700">
<!-- ❌ 当项目存在自定义颜色时避免使用 -->
<button class="bg-blue-600"> <!-- 通用颜色,未遵循品牌规范 -->
<button class="bg-zinc-900"> <!-- 仅在未定义primary时使用 -->规则:
- Primary = 主要CTA按钮、激活状态、链接、焦点环
- Secondary = 次要操作、辅助元素
- Brand/Accent = 高亮元素、装饰性元素
- Neutral(zinc/gray)= 仅用于结构、文本、边框
Spacing Classes (4px Grid)
间距类(4px网格系统)
| Token | Size | Classes | Use Case |
|---|---|---|---|
| 1 | 4px | | Micro gaps |
| 2 | 8px | | Tight, within components |
| 3 | 12px | | Related elements |
| 4 | 16px | | Standard padding |
| 6 | 24px | | Between sections |
| 8 | 32px | | Major separation |
| 12 | 48px | | Large gaps |
| 16 | 64px | | Hero spacing |
Rule: Symmetric padding by default. not .
p-4pt-6 pb-2 pl-4 pr-8| 标识 | 尺寸 | 类名 | 使用场景 |
|---|---|---|---|
| 1 | 4px | | 微小间距 |
| 2 | 8px | | 紧凑间距,组件内部使用 |
| 3 | 12px | | 关联元素之间 |
| 4 | 16px | | 标准内边距 |
| 6 | 24px | | 区块之间 |
| 8 | 32px | | 主要分隔区域 |
| 12 | 48px | | 大间距 |
| 16 | 64px | | 英雄区间距 |
规则: 默认使用对称内边距。优先使用而非。
p-4pt-6 pb-2 pl-4 pr-8Typography Classes
排版类
| Size | Class | Use Case |
|---|---|---|
| 12px | | Labels, meta, fine print |
| 14px | | Body text, default |
| 16px | | Emphasis |
| 18px | | Subheadings |
| 20px | | Card titles |
| 24px | | Page titles |
| 30px | | Hero subheading |
| 36px+ | | Hero heading |
Weight Classes:
| Role | Class |
|---|---|
| Body | |
| Labels | |
| Headings | |
Tracking (Letter-spacing):
html
<!-- Headlines: tighter -->
<h1 class="text-3xl font-semibold tracking-tight">
<!-- All-caps: wider -->
<span class="text-xs font-medium uppercase tracking-wide">| 尺寸 | 类名 | 使用场景 |
|---|---|---|
| 12px | | 标签、元信息、小字说明 |
| 14px | | 正文文本、默认字体 |
| 16px | | 强调文本 |
| 18px | | 子标题 |
| 20px | | 卡片标题 |
| 24px | | 页面标题 |
| 30px | | 英雄区副标题 |
| 36px+ | | 英雄区主标题 |
字重类:
| 用途 | 类名 |
|---|---|
| 正文 | |
| 标签 | |
| 标题 | |
字间距:
html
<!-- 标题:字间距更紧凑 -->
<h1 class="text-3xl font-semibold tracking-tight">
<!-- 全大写文本:字间距更宽松 -->
<span class="text-xs font-medium uppercase tracking-wide">Color Hierarchy
颜色层级
Text Colors (4-Level System)
文本颜色(4级系统)
html
<!-- Light mode -->
<span class="text-zinc-900">Primary</span>
<span class="text-zinc-600">Secondary</span>
<span class="text-zinc-400">Muted</span>
<span class="text-zinc-300">Faint</span>
<!-- Dark mode -->
<span class="dark:text-zinc-100">Primary</span>
<span class="dark:text-zinc-400">Secondary</span>
<span class="dark:text-zinc-500">Muted</span>
<span class="dark:text-zinc-600">Faint</span>html
<!-- 浅色模式 -->
<span class="text-zinc-900">主文本</span>
<span class="text-zinc-600">次要文本</span>
<span class="text-zinc-400">弱化文本</span>
<span class="text-zinc-300">极淡文本</span>
<!-- 深色模式 -->
<span class="dark:text-zinc-100">主文本</span>
<span class="dark:text-zinc-400">次要文本</span>
<span class="dark:text-zinc-500">弱化文本</span>
<span class="dark:text-zinc-600">极淡文本</span>Status Colors
状态颜色
html
<span class="text-emerald-600 dark:text-emerald-400">Success</span>
<span class="text-amber-600 dark:text-amber-400">Warning</span>
<span class="text-red-600 dark:text-red-400">Error</span>
<span class="text-blue-600 dark:text-blue-400">Info</span>html
<span class="text-emerald-600 dark:text-emerald-400">成功</span>
<span class="text-amber-600 dark:text-amber-400">警告</span>
<span class="text-red-600 dark:text-red-400">错误</span>
<span class="text-blue-600 dark:text-blue-400">信息</span>Brand Colors (Priority)
品牌颜色(优先使用)
Check first. If / defined, use them:
tailwind.config.jsprimarysecondaryhtml
<button class="bg-primary-600 hover:bg-primary-700">
<a class="text-primary-600 hover:text-primary-700">
<div class="border-primary-500 bg-primary-50">请先检查。如果已定义/,请使用这些颜色:
tailwind.config.jsprimarysecondaryhtml
<button class="bg-primary-600 hover:bg-primary-700">
<a class="text-primary-600 hover:text-primary-700">
<div class="border-primary-500 bg-primary-50">Shadow & Depth Strategies
阴影与层级策略
Pick ONE per project:
每个项目选择一种策略:
Strategy A: Flat (Borders)
策略A:扁平化(使用边框)
html
<div class="border border-zinc-200 dark:border-zinc-800">html
<div class="border border-zinc-200 dark:border-zinc-800">Strategy B: Subtle Lift
策略B:轻微悬浮
html
<div class="shadow-sm border border-zinc-200/50">html
<div class="shadow-sm border border-zinc-200/50">Strategy C: Layered (Premium)
策略C:分层式(高端风格)
html
<div class="shadow-sm ring-1 ring-black/5">html
<div class="shadow-sm ring-1 ring-black/5">Strategy D: Surface Shift
策略D:背景色区分
html
<div class="bg-zinc-50"> <!-- page -->
<div class="bg-white"> <!-- elevated -->Shadow Scale:
| Level | Class | Use Case |
|---|---|---|
| 1 | | Cards, buttons |
| 2 | | Dropdowns |
| 3 | | Popovers |
| 4 | | Modals |
| 5 | | Full-screen overlays |
html
<div class="bg-zinc-50"> <!-- 页面背景 -->
<div class="bg-white"> <!-- 悬浮元素 -->阴影层级:
| 层级 | 类名 | 使用场景 |
|---|---|---|
| 1 | | 卡片、按钮 |
| 2 | | 下拉菜单 |
| 3 | | 弹出框 |
| 4 | | 模态框 |
| 5 | | 全屏遮罩 |
Component Recipes
组件编写方案
Cards
卡片
html
<!-- Flat -->
<div class="rounded-lg border border-zinc-200 bg-white p-4 dark:border-zinc-800 dark:bg-zinc-900">
<!-- Elevated -->
<div class="rounded-lg bg-white p-4 shadow-sm ring-1 ring-black/5 dark:bg-zinc-900">html
<!-- 扁平化 -->
<div class="rounded-lg border border-zinc-200 bg-white p-4 dark:border-zinc-800 dark:bg-zinc-900">
<!-- 悬浮式 -->
<div class="rounded-lg bg-white p-4 shadow-sm ring-1 ring-black/5 dark:bg-zinc-900">Buttons
按钮
html
<!-- Primary -->
<button class="rounded-md bg-zinc-900 px-3 py-1.5 text-sm font-medium text-white hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-200">
<!-- Secondary -->
<button class="rounded-md border border-zinc-300 bg-white px-3 py-1.5 text-sm font-medium text-zinc-700 hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-300">
<!-- Ghost -->
<button class="rounded-md px-3 py-1.5 text-sm font-medium text-zinc-600 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100">html
<!-- 主按钮 -->
<button class="rounded-md bg-zinc-900 px-3 py-1.5 text-sm font-medium text-white hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-200">
<!-- 次按钮 -->
<button class="rounded-md border border-zinc-300 bg-white px-3 py-1.5 text-sm font-medium text-zinc-700 hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-300">
<!-- 幽灵按钮 -->
<button class="rounded-md px-3 py-1.5 text-sm font-medium text-zinc-600 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100">Inputs
输入框
html
<input class="w-full rounded-md border border-zinc-300 bg-white px-3 py-2 text-sm text-zinc-900 placeholder:text-zinc-400 focus:border-zinc-500 focus:outline-none focus:ring-1 focus:ring-zinc-500 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100" />html
<input class="w-full rounded-md border border-zinc-300 bg-white px-3 py-2 text-sm text-zinc-900 placeholder:text-zinc-400 focus:border-zinc-500 focus:outline-none focus:ring-1 focus:ring-zinc-500 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100" />Navigation Item
导航项
html
<!-- Default -->
<a class="flex items-center gap-2 rounded-md px-3 py-2 text-sm font-medium text-zinc-600 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100">
<!-- Active -->
<a class="flex items-center gap-2 rounded-md bg-zinc-100 px-3 py-2 text-sm font-medium text-zinc-900 dark:bg-zinc-800 dark:text-zinc-100">html
<!-- 默认状态 -->
<a class="flex items-center gap-2 rounded-md px-3 py-2 text-sm font-medium text-zinc-600 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100">
<!-- 激活状态 -->
<a class="flex items-center gap-2 rounded-md bg-zinc-100 px-3 py-2 text-sm font-medium text-zinc-900 dark:bg-zinc-800 dark:text-zinc-100">Animation Classes
动画类
| Duration | Class | Use Case |
|---|---|---|
| 150ms | | Hovers, toggles |
| 200ms | | Standard transitions |
| 300ms | | Page transitions |
html
<div class="transition-all duration-200 ease-out">
<div class="transition-colors duration-150">Staggered Animation:
html
<div class="animate-fade-in [animation-delay:0ms]">
<div class="animate-fade-in [animation-delay:50ms]">
<div class="animate-fade-in [animation-delay:100ms]">| 时长 | 类名 | 使用场景 |
|---|---|---|
| 150ms | | 悬停效果、切换效果 |
| 200ms | | 标准过渡动画 |
| 300ms | | 页面过渡 |
html
<div class="transition-all duration-200 ease-out">
<div class="transition-colors duration-150">** stagger动画(依次触发):**
html
<div class="animate-fade-in [animation-delay:0ms]">
<div class="animate-fade-in [animation-delay:50ms]">
<div class="animate-fade-in [animation-delay:100ms]">Dark Mode Pattern
暗黑模式实现模式
html
<div class="bg-white dark:bg-zinc-950">
<h1 class="text-zinc-900 dark:text-zinc-100">
<p class="text-zinc-600 dark:text-zinc-400">
<div class="border-zinc-200 dark:border-zinc-800">Dark mode adjustments:
- Borders > shadows (shadows less visible)
- Desaturate status colors slightly
- Reduce contrast on secondary elements
html
<div class="bg-white dark:bg-zinc-950">
<h1 class="text-zinc-900 dark:text-zinc-100">
<p class="text-zinc-600 dark:text-zinc-400">
<div class="border-zinc-200 dark:border-zinc-800">暗黑模式调整规则:
- 优先使用边框而非阴影(阴影在深色模式下可见度低)
- 适当降低状态颜色的饱和度
- 降低次要元素的对比度
Anti-Patterns
反模式(错误用法)
html
<!-- ❌ NEVER -->
<div class="shadow-2xl"> <!-- Too dramatic -->
<button class="rounded-2xl px-3"> <!-- Radius too large for size -->
<div class="pt-8 pb-2 pl-6 pr-3"> <!-- Asymmetric without reason -->
<div class="border-4 border-purple-500"> <!-- Thick decorative -->
<div class="animate-bounce"> <!-- Bouncy in enterprise UI -->
<!-- ✅ INSTEAD -->
<div class="shadow-sm">
<button class="rounded-md px-3">
<div class="p-4">
<div class="border border-zinc-200">
<div class="transition-all duration-200">html
<!-- ❌ 禁止使用 -->
<div class="shadow-2xl"> <!-- 效果过于夸张 -->
<button class="rounded-2xl px-3"> <!-- 圆角过大,与尺寸不匹配 -->
<div class="pt-8 pb-2 pl-6 pr-3"> <!-- 无理由使用不对称内边距 -->
<div class="border-4 border-purple-500"> <!-- 过厚的装饰性边框 -->
<div class="animate-bounce"> <!-- 企业级UI中避免弹跳动画 -->
<!-- ✅ 推荐用法 -->
<div class="shadow-sm">
<button class="rounded-md px-3">
<div class="p-4">
<div class="border border-zinc-200">
<div class="transition-all duration-200">Reference Files
参考文档
| Topic | File |
|---|---|
| Component depth patterns | depth-strategies.md |
| Complete component library | components.md |
| Responsive patterns | responsive.md |
| 主题 | 文件 |
|---|---|
| 组件层级模式 | depth-strategies.md |
| 完整组件库 | components.md |
| 响应式设计模式 | responsive.md |