Tailwind CSS: Tailwind CSS 核心概念详解:工具类与前缀系统
1. Utility Class 工作机制
Tailwind CSS 的核心是 Utility Class(工具类),每个类对应一个具体的 CSS 属性。通过组合多个工具类,可以直接在 HTML 中构建出复杂的样式。
▶ 示例
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Utility Class 工作机制</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="min-h-screen bg-gray-100 p-8">
<div class="bg-white rounded-lg shadow-md p-6 max-w-md mx-auto">
<h2 class="text-2xl font-bold text-gray-800 mb-4">工具类演示</h2>
<p class="text-gray-600 leading-relaxed mb-4">
每个类名对应一个 CSS 属性
</p>
<button class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition-colors">
点击按钮
</button>
</div>
</body>
</html>
上面代码中每个类的作用:
| Tailwind 类 | 对应 CSS |
|---|---|
bg-white |
background-color: #fff |
rounded-lg |
border-radius: 0.5rem |
shadow-md |
box-shadow: ... |
p-6 |
padding: 1.5rem |
text-2xl |
font-size: 1.5rem |
font-bold |
font-weight: 700 |
传统 CSS vs Tailwind 传统方式需要创建语义化类名(如
.card)并在 CSS 文件中定义样式,而 Tailwind 直接使用原子化的工具类,无需编写和维护 CSS 文件。
2. Hover/Focus 状态前缀
Tailwind 使用状态前缀来处理交互状态,如 hover:、focus:、active: 等,语法直观且易于使用。
▶ 示例
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>状态前缀演示</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="min-h-screen bg-gray-50 flex items-center justify-center gap-8">
<!-- Hover 效果 -->
<button class="bg-blue-500 text-white px-6 py-3 rounded-lg
hover:bg-blue-700 hover:shadow-lg hover:scale-105
transition-all duration-300">
悬停效果
</button>
<!-- Focus 效果 -->
<input type="text" placeholder="点击输入框查看效果"
class="px-4 py-3 border-2 border-gray-300 rounded-lg
focus:border-blue-500 focus:ring-2 focus:ring-blue-200
focus:outline-none transition-all">
<!-- 组合状态 -->
<button class="bg-green-500 text-white px-6 py-3 rounded-lg
hover:bg-green-600
focus:ring-2 focus:ring-green-300
active:bg-green-700
disabled:opacity-50 disabled:cursor-not-allowed">
组合状态
</button>
</body>
</html>
传统 CSS vs Tailwind 传统方式需要编写
.button:hover、.button:focus等伪类选择器,而 Tailwind 直接在类名前添加hover:、focus:前缀即可。
hover:(悬停)、focus:(聚焦)、active:(激活)、disabled:(禁用)、first:(首个元素)、last:(末尾元素)
3. 响应式前缀
Tailwind 采用移动优先策略,使用响应式前缀为不同屏幕尺寸设置样式:sm:、md:、lg:、xl:、2xl:。
▶ 示例
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>响应式前缀演示</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="min-h-screen bg-gray-100 p-4">
<div class="max-w-6xl mx-auto">
<h1 class="text-xl md:text-2xl lg:text-4xl font-bold text-center mb-8">
响应式标题
</h1>
<!-- 响应式网格 -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
<div class="bg-white p-4 rounded-lg shadow">卡片 1</div>
<div class="bg-white p-4 rounded-lg shadow">卡片 2</div>
<div class="bg-white p-4 rounded-lg shadow">卡片 3</div>
<div class="bg-white p-4 rounded-lg shadow">卡片 4</div>
<div class="bg-white p-4 rounded-lg shadow">卡片 5</div>
<div class="bg-white p-4 rounded-lg shadow">卡片 6</div>
<div class="bg-white p-4 rounded-lg shadow">卡片 7</div>
<div class="bg-white p-4 rounded-lg shadow">卡片 8</div>
</div>
<!-- 响应式显示隐藏 -->
<div class="mt-8">
<p class="block md:hidden text-center text-red-500">仅在小屏幕显示</p>
<p class="hidden md:block lg:hidden text-center text-blue-500">仅在中等屏幕显示</p>
<p class="hidden lg:block text-center text-green-500">仅在大屏幕显示</p>
</div>
</div>
</body>
</html>
断点对照表:
| 前缀 | 最小宽度 | 常见设备 |
|---|---|---|
sm: |
640px | 大屏手机、小平板 |
md: |
768px | 平板电脑 |
lg: |
1024px | 笔记本电脑 |
xl: |
1280px | 桌面显示器 |
2xl: |
1536px | 大屏显示器 |
传统 CSS vs Tailwind 传统方式需要在
@media查询中编写大量响应式规则,而 Tailwind 通过前缀直接在 HTML 中声明响应式行为。
4. 暗黑模式前缀
使用 dark: 前缀可以轻松实现暗黑模式适配,只需为暗黑模式定义不同的样式即可。
▶ 示例
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>暗黑模式演示</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="min-h-screen bg-white dark:bg-gray-900 transition-colors">
<div class="max-w-2xl mx-auto p-8">
<h1 class="text-3xl font-bold text-gray-800 dark:text-white mb-6">
暗黑模式示例
</h1>
<div class="bg-gray-100 dark:bg-gray-800 rounded-xl p-6 mb-6">
<p class="text-gray-600 dark:text-gray-300 leading-relaxed">
这段文字在亮色模式下显示深灰色,暗黑模式下显示浅灰色。
背景色也会相应切换。
</p>
</div>
<div class="flex gap-4">
<button class="bg-blue-500 dark:bg-blue-600 text-white px-6 py-3 rounded-lg
hover:bg-blue-600 dark:hover:bg-blue-700 transition-colors">
主要按钮
</button>
<button class="border border-gray-300 dark:border-gray-600
text-gray-700 dark:text-gray-300 px-6 py-3 rounded-lg
hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors">
次要按钮
</button>
</div>
</div>
<script>
// 切换暗黑模式的示例代码
function toggleDarkMode() {
document.documentElement.classList.toggle('dark');
}
</script>
</body>
</html>
传统 CSS vs Tailwind 传统方式需要为暗黑模式编写单独的 CSS 类或使用
[data-theme="dark"]选择器,而 Tailwind 只需在类名前添加dark:前缀。
darkMode: 'class',或在 <html> 标签上添加 dark 类。
5. 任意值语法
Tailwind 的任意值语法允许使用方括号 [] 插入任意 CSS 值,提供极大的灵活性。
▶ 示例
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>任意值语法演示</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="min-h-screen bg-gray-100 p-8">
<div class="max-w-4xl mx-auto space-y-8">
<!-- 自定义宽度和高度 -->
<div class="bg-white p-6 rounded-lg shadow">
<h3 class="font-semibold mb-4">自定义尺寸</h3>
<div class="w-[300px] h-[200px] bg-blue-200 rounded flex items-center justify-center">
300px × 200px
</div>
</div>
<!-- 自定义颜色 -->
<div class="bg-white p-6 rounded-lg shadow">
<h3 class="font-semibold mb-4">自定义颜色</h3>
<div class="flex gap-4">
<div class="w-20 h-20 bg-[#ff6b6b] rounded-lg"></div>
<div class="w-20 h-20 bg-[#4ecdc4] rounded-lg"></div>
<div class="w-20 h-20 bg-[rgb(102,51,153)] rounded-lg"></div>
<div class="w-20 h-20 bg-[hsl(207,90%,54%)] rounded-lg"></div>
</div>
</div>
<!-- 自定义间距 -->
<div class="bg-white p-6 rounded-lg shadow">
<h3 class="font-semibold mb-4">自定义间距</h3>
<div class="space-y-[15px]">
<div class="bg-gray-200 p-3 rounded">间距 15px</div>
<div class="bg-gray-200 p-3 rounded">间距 15px</div>
<div class="bg-gray-200 p-3 rounded">间距 15px</div>
</div>
</div>
<!-- 自定义字体大小 -->
<div class="bg-white p-6 rounded-lg shadow">
<h3 class="font-semibold mb-4">自定义字体</h3>
<p class="text-[22px] leading-[32px] text-[#333]">
自定义 22px 字体,行高 32px
</p>
</div>
</div>
</body>
</html>
任意值语法支持的格式:
| 语法 | 示例 | 说明 |
|---|---|---|
| 固定值 | w-[100px] |
像素值 |
| 颜色值 | bg-[#ff0000] |
十六进制颜色 |
| RGB | text-[rgb(255,0,0)] |
RGB 颜色 |
| CSS 变量 | p-[var(--spacing)] |
使用 CSS 变量 |
| 计算值 | w-[calc(100%-2rem)] |
calc 计算 |
传统 CSS vs Tailwind 传统方式需要为特殊值创建自定义 CSS 规则,而 Tailwind 的任意值语法允许直接在类名中使用任何 CSS 值,无需额外配置。
grid-cols-[1fr_2fr_1fr] 表示 grid-template-columns: 1fr 2fr 1fr。
❓ 常见问题
sm: 及以上的样式在对应断点及以上生效。darkMode: 'selector' 配置,通过 JavaScript 在 <html> 上切换 dark 类。结合 prefers-color-scheme 媒体查询实现自动检测。📖 小节
- Utility Class 是 Tailwind 的核心,每个类对应一个具体的 CSS 属性
- 状态前缀(
hover:、focus:、active:)处理交互状态,无需编写伪类选择器 - 响应式前缀(
sm:到2xl:)采用移动优先策略,轻松实现多端适配 dark:前缀简化暗黑模式实现,只需为暗色主题定义差异样式- 任意值语法
[]允许使用任意 CSS 值,提供极致灵活性
📝 作业
-
⭐ 创建一个按钮组,包含正常、悬停、聚焦、禁用四种状态,展示不同状态下的样式变化
-
⭐⭐ 创建一个响应式卡片列表,在手机上显示 1 列、平板 2 列、桌面 3 列、大屏 4 列,并实现亮色/暗黑模式切换
-
⭐⭐⭐ 使用任意值语法创建一个自定义尺寸的网格布局,要求包含不规则的列宽分配(如 1:2:1 比例)和自定义间距