📱 响应式设计
响应式设计原则
💡 Mobile First
先设计移动端,再逐步增强到桌面端。
- ✅ 流式网格布局
- ✅ 弹性图片
- ✅ 媒体查询
- ✅ 弹性字体
断点设置
| 设备 | 断点 | CSS |
|---|---|---|
| 手机 | < 640px | 默认样式 |
| 平板 | ≥ 640px | @media (min-width: 640px) |
| 桌面 | ≥ 1024px | @media (min-width: 1024px) |
| 大桌面 | ≥ 1280px | @media (min-width: 1280px) |
| 超大屏 | ≥ 1536px | @media (min-width: 1536px) |
响应式技巧
1. 弹性布局
/* 使用 flexbox 自适应 */
.container {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #0f172a;
--bg-white: #1e293b;
--text: #f1f5f9;
--text-secondary: #cbd5e1;
--text-muted: #94a3b8;
--border: #334155;--primary-bg: rgba(37, 99, 235, 0.2);
--accent-bg: rgba(8, 145, 178, 0.2);
--secondary-bg: rgba(139, 92, 246, 0.2);
--success-bg: rgba(22, 163, 74, 0.2);
--warning-bg: rgba(217, 119, 6, 0.2);
--danger-bg: rgba(220, 38, 38, 0.2);
}
aside { background: rgba(30, 41, 59, 0.95); border-right-color: var(--border); }
.page-header { background: linear-gradient(135deg, #1e40af 0%, #7c3aed 100%); }
.table-subsection, table, .code-block { background: rgba(30, 41, 59, 0.95); border-color: var(--border); }
tbody tr:hover { background: rgba(37, 99, 235, 0.2); }
.example-box { background: linear-gradient(135deg, rgba(37, 99, 235, 0.1) 0%, rgba(37, 99, 235, 0.15) 100%); }
.note-box { background: linear-gradient(135deg, rgba(217, 119, 6, 0.1) 0%, rgba(217, 119, 6, 0.15) 100%); }
.tip-box { background: linear-gradient(135deg, rgba(22, 163, 74, 0.1) 0%, rgba(22, 163, 74, 0.15) 100%); }
.warning-box { background: linear-gradient(135deg, rgba(220, 38, 38, 0.1) 0%, rgba(220, 38, 38, 0.15) 100%); }
.stat-card, .card { background: rgba(30, 41, 59, 0.95); border-color: var(--border); }
main { background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); }
}
.item {
flex: 1 1 300px; /* 最小 300px,自动伸缩 */
}
2. 响应式图片
<!-- srcset 根据屏幕宽度选择 -->
<img
src="image-800.jpg"
srcset="image-400.jpg 400w,
image-800.jpg 800w,
image-1200.jpg 1200w"
sizes="(max-width: 600px) 400px,
(max-width: 1000px) 800px,
1200px"
alt="描述"
/>
3. 容器查询
/* 根据容器大小而非视口调整 */
.card-container {
container-type: inline-size;
}
@container (min-width: 400px) {
.card {
flex-direction: row;
}
}
移动端优化
- ✅ 触摸友好:按钮至少 44x44px
- ✅ 字体大小:正文至少 16px
- ✅ 视口设置:<meta name="viewport">
- ✅ 避免悬停:移动端无 hover
- ✅ 汉堡菜单:小屏隐藏导航
- ✅ 手势支持:滑动、捏合
测试工具
| 工具 | 用途 |
|---|---|
| Chrome DevTools | 设备模拟器 |
| BrowserStack | 真机测试 |
| Responsively App | 多设备同时预览 |
| 真实设备 | 最终验证 |