Tailwind CSS 响应式设计
使用 Tailwind CSS 的响应式工具类构建适配各种设备的界面。
1. 移动优先策略
1.1 什么是移动优先
移动优先(Mobile-First)是一种设计策略,先为移动设备设计,然后逐步增强以适应更大屏幕。
1.2 Tailwind CSS 的移动优先
Tailwind CSS 采用移动优先的方式:
- 基础样式:针对移动设备(< 640px)
- 断点前缀:针对更大屏幕的增强样式
<!-- 移动端:小字体,桌面端:大字体 -->
<h1 class="text-2xl md:text-4xl lg:text-6xl">
响应式标题
</h1>2. 断点系统
2.1 默认断点
| 断点 | 最小宽度 | 说明 |
|---|---|---|
sm | 640px | 小屏幕(平板竖屏) |
md | 768px | 中等屏幕(平板横屏) |
lg | 1024px | 大屏幕(桌面) |
xl | 1280px | 超大屏幕 |
2xl | 1536px | 超超大屏幕 |
2.2 使用断点
在工具类前添加断点前缀:
<!-- 基础样式 + md 断点样式 -->
<div class="text-sm md:text-base">
小屏幕小字体,中等屏幕及以上正常字体
</div>
<!-- 多个断点 -->
<div class="text-sm md:text-base lg:text-lg xl:text-xl">
渐进增强的文字大小
</div>3. 响应式布局
3.1 响应式 Grid
<!-- 移动端单列,桌面端多列 -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<div>项目 1</div>
<div>项目 2</div>
<div>项目 3</div>
</div>3.2 响应式 Flex
<!-- 移动端垂直,桌面端水平 -->
<div class="flex flex-col md:flex-row gap-4">
<div>项目 1</div>
<div>项目 2</div>
</div>3.3 响应式间距
<!-- 响应式内边距 -->
<div class="p-4 md:p-6 lg:p-8">
响应式内边距
</div>
<!-- 响应式外边距 -->
<div class="m-2 md:m-4 lg:m-6">
响应式外边距
</div>4. 显示与隐藏
4.1 响应式显示
<!-- 移动端隐藏,桌面端显示 -->
<div class="hidden md:block">
仅中等屏幕及以上显示
</div>
<!-- 移动端显示,桌面端隐藏 -->
<div class="block md:hidden">
仅小屏幕显示
</div>4.2 条件显示
<!-- 仅在特定断点显示 -->
<div class="hidden lg:block">
仅大屏幕显示
</div>
<div class="block lg:hidden">
大屏幕以下显示
</div>5. 响应式文字
5.1 字体大小
<!-- 响应式标题 -->
<h1 class="text-2xl md:text-4xl lg:text-6xl">
响应式标题
</h1>
<!-- 响应式正文 -->
<p class="text-sm md:text-base lg:text-lg">
响应式正文
</p>5.2 字重
<!-- 移动端正常,桌面端粗体 -->
<p class="font-normal md:font-bold">
响应式字重
</p>5.3 对齐方式
<!-- 移动端左对齐,桌面端居中 -->
<p class="text-left md:text-center">
响应式对齐
</p>6. 响应式图片
6.1 响应式尺寸
<!-- 响应式宽度 -->
<img src="image.jpg" class="w-full md:w-1/2 lg:w-1/3" alt="图片">
<!-- 响应式高度 -->
<div class="h-48 md:h-64 lg:h-96">
<img src="image.jpg" class="w-full h-full object-cover" alt="图片">
</div>6.2 响应式显示
<!-- 移动端显示,桌面端隐藏 -->
<img src="mobile.jpg" class="block md:hidden" alt="移动端图片">
<!-- 移动端隐藏,桌面端显示 -->
<img src="desktop.jpg" class="hidden md:block" alt="桌面端图片">7. 响应式表单
7.1 响应式输入框
<!-- 响应式宽度 -->
<input type="text" class="w-full md:w-64 lg:w-96">
<!-- 响应式布局 -->
<div class="flex flex-col md:flex-row gap-4">
<input type="text" class="flex-1" placeholder="输入框 1">
<input type="text" class="flex-1" placeholder="输入框 2">
</div>7.2 响应式按钮
<!-- 响应式尺寸 -->
<button class="w-full md:w-auto px-4 py-2">
响应式按钮
</button>8. 响应式导航
8.1 移动端菜单
<nav class="bg-white shadow-md">
<div class="max-w-7xl mx-auto px-4">
<div class="flex items-center justify-between h-16">
<!-- Logo -->
<div class="flex items-center">
<h1 class="text-xl font-bold">Logo</h1>
</div>
<!-- 桌面端导航 -->
<div class="hidden md:flex space-x-4">
<a href="#" class="text-gray-600 hover:text-gray-900">首页</a>
<a href="#" class="text-gray-600 hover:text-gray-900">关于</a>
<a href="#" class="text-gray-600 hover:text-gray-900">联系</a>
</div>
<!-- 移动端菜单按钮 -->
<button class="md:hidden">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
</svg>
</button>
</div>
<!-- 移动端菜单(可切换显示) -->
<div class="md:hidden">
<a href="#" class="block py-2">首页</a>
<a href="#" class="block py-2">关于</a>
<a href="#" class="block py-2">联系</a>
</div>
</div>
</nav>9. 响应式卡片
9.1 卡片网格
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6">
<div class="bg-white rounded-lg shadow-md p-6">
<h3 class="text-xl font-bold mb-2">卡片标题</h3>
<p class="text-gray-600">卡片内容</p>
</div>
<!-- 更多卡片 -->
</div>9.2 卡片布局
<!-- 移动端垂直,桌面端水平 -->
<div class="flex flex-col md:flex-row gap-4">
<div class="flex-1 bg-white rounded-lg shadow-md p-6">
卡片 1
</div>
<div class="flex-1 bg-white rounded-lg shadow-md p-6">
卡片 2
</div>
</div>10. 自定义断点
10.1 配置断点
在 tailwind.config.js 中自定义断点:
module.exports = {
theme: {
extend: {
screens: {
'xs': '475px',
'3xl': '1920px',
},
},
},
}10.2 使用自定义断点
<div class="text-sm xs:text-base md:text-lg">
使用自定义断点
</div>11. 最佳实践
11.1 渐进增强
从移动端开始,逐步增强:
<!-- ✅ 好:移动优先 -->
<div class="text-sm md:text-base lg:text-lg">
<!-- ❌ 不好:桌面优先 -->
<div class="text-lg md:text-base sm:text-sm">11.2 合理使用断点
不要过度使用断点:
<!-- ✅ 好:只在需要时使用 -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
<!-- ❌ 不好:每个断点都设置 -->
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6">11.3 测试不同设备
使用浏览器开发者工具测试不同断点:
- Chrome DevTools 设备模拟器
- Firefox 响应式设计模式
- 实际设备测试
12. 实战案例
12.1 响应式页面布局
<div class="min-h-screen bg-gray-100">
<!-- 导航栏 -->
<nav class="bg-white shadow-md">
<div class="max-w-7xl mx-auto px-4">
<div class="flex items-center justify-between h-16">
<h1 class="text-xl font-bold">Logo</h1>
<div class="hidden md:flex space-x-4">
<a href="#">首页</a>
<a href="#">关于</a>
</div>
</div>
</div>
</nav>
<!-- 主内容 -->
<main class="max-w-7xl mx-auto px-4 py-8">
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
<!-- 主内容区 -->
<div class="lg:col-span-2">
<h2 class="text-2xl md:text-3xl font-bold mb-4">主标题</h2>
<p class="text-sm md:text-base text-gray-600">内容</p>
</div>
<!-- 侧边栏 -->
<aside class="lg:col-span-1">
<div class="bg-white rounded-lg shadow-md p-6">
<h3 class="text-lg font-bold mb-4">侧边栏</h3>
<p class="text-sm text-gray-600">侧边栏内容</p>
</div>
</aside>
</div>
</main>
</div>13. 下一步
现在你已经掌握了 Tailwind CSS 的响应式设计,可以:
相关链接: