📐 移动端布局方案
移动端布局经历了多个阶段的演进,目前主流方案是 Flexbox + rem/vw + 媒体查询 的组合。
四大布局方案对比
| 方案 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 百分比 + 媒体查询 | % 宽度 + @media 断点适配 | 简单直观,兼容性好 | 断点有限,不够精细 |
| rem + 动态根字体 | 1rem = 根元素 fontSize,JS 动态设置 | 等比缩放,设计稿直接换算 | 需要 JS 配合,大屏可能过大 |
| vw/vh 视口单位 | 1vw = 视口宽度的 1% | 纯 CSS,真正响应式 | 部分场景需配合 calc() |
| Flexbox / Grid | 弹性布局,自动分配空间 | 灵活强大,现代标准 | 学习曲线,IE 不支持 |
Flexbox 移动端常用模式
/* ===== 移动端 Flex 布局常用模式 ===== */
/* 顶部导航栏:左右分布 */
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
}
/* 底部 Tab 栏:均分 */
.tab-bar {
display: flex;
}
.tab-bar .tab-item {
flex: 1;
text-align: center;
}
/* 列表项:左侧图标 + 右侧内容 */
.list-item {
display: flex;
align-items: center;
gap: 12px;
}
/* 圣杯布局:头 + 内容 + 底(满屏) */
.page {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.page .content {
flex: 1; /* 撑满剩余空间 */
overflow-y: auto; /* 内容区独立滚动 */
}
CSS Grid 移动端实战
/* ===== 移动端 Grid 布局 ===== */
/* 商品卡片网格(2 列自适应) */
.product-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
}
/* 图文混排(3:2 比例) */
.card {
display: grid;
grid-template-columns: 3fr 2fr;
gap: 16px;
}
/* 自适应列数 */
.auto-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 12px;
}