





















基于前两轮对趋势的梳理,这里直接给出一套贴合现代核心变化(CSS Grid 内在尺寸、容器查询、子网格)的栅格设计推荐。它不再以一个固定的列数(如12、24)作为首要约束,而是以内容自适应、空间连续为原则,覆盖 1920×1080 桌面和安卓手机(以 360–412dp 为典型)。
在给具体数值前,先明确我们不再做什么:
minmax、auto-fit 让布局连续过渡。取而代之的是三个核心策略:
auto-fit/auto-fill + minmax)让内容自己决定列数。gap 统一管理,并用设计令牌(spacing scale)保证一致性。避免在大屏上无限制拉伸,采用居中的弹性内容容器,宽度由 clamp() 或 min() 限定。
推荐设置:
.page-container {
max-width: 1440px; /* 内容最佳阅读宽度上限 */
width: min(100% - 2rem, 1440px); /* 小屏时自动留出边距 */
margin-inline: auto;
}
如果需要侧边栏(如后台系统),使用 CSS Grid 的固定+弹性轨道:
.app-layout {
display: grid;
grid-template-columns: auto 1fr; /* 侧边栏自适应内容宽度,主区域占满剩余 */
/* 或更精确:grid-template-columns: 240px 1fr; */
min-height: 100vh;
}
这里不再需要 12 或 24 列——大的框架本身就是两列网格,命名方式更直观。
传统做法是“一行 4 个卡片,每个占 6 列(24 栅格)”。现代做法直接交给 auto-fit:
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
}
如果需要在特定区域强行保持固定比例(如 2:1 的主次关系),直接定义轨道:
.feature-section {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 1.5rem;
}
这比用“占 16 列和 8 列”更直接,也更易维护。
gap 和 padding 严格遵循。subgrid:.card-grid {
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
/* 需要时在行方向建立子网格 */
grid-template-rows: auto 1fr auto; /* 标题、内容、操作区 */
}
.card {
display: grid;
grid-row: span 3; /* 让每个卡片占据整行格子 */
grid-template-rows: subgrid; /* 继承父网格的行轨道,实现跨卡片垂直对齐 */
}
这是 24 栅格完全做不到的精细化对齐。
.page-container 保持 1440px 居中,两侧留白约 240px。minmax 阈值时自然变为单列,无需任何媒体查询。安卓屏幕碎片化严重,但设计基准通常取 360dp 宽(如 Pixel 4a)或 412dp(如多款主流机型)。现代做法不设计固定栅格,而是建立一套自适应的空间规则。
100% - 32dp,自动撑满。对于手机端,绝大多数内容块是通栏排列。但像设置列表中的开关行、卡片小网格等,需要一种“微栅格”:
方法一:自动两列卡片(横竖屏通用)
.small-card-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(140dp, 1fr));
gap: 12dp;
}
方法二:容器查询实现内部布局切换
对于像“列表项”这种单个组件内部可能需要不同排版的情况:
.list-item {
container-type: inline-size;
}
@container (min-width: 300dp) {
.item-content {
grid-template-columns: auto 1fr auto; /* 图标、文字、操作 */
}
}
@container (max-width: 299dp) {
.item-content {
grid-template-columns: 1fr; /* 叠放 */
}
}
这完全脱离了对全局断点或全局列数的依赖,组件自己决定怎么排列。
手机端一般不需要侧边栏,页面就是单列内容流:
.mobile-page {
display: flex;
flex-direction: column;
gap: 24dp;
padding: 16dp;
}
如果需要底部导航栏,直接使用固定定位 + flex 布局,不需要网格参与。
同一套 spacing 令牌,只是手机端选取较小的值。例如:
--spacing-md 和 --spacing-sm,通过设计系统维护。如果需要在设计工具里表达这种“无固定列数”的系统,可以这样定义:
| 设计参数 | 桌面(1920 画板) | 安卓手机(360/412 画板) |
|---|---|---|
| 内容区最大宽度 | 1440px(居中) | 全宽(左右各留 16px) |
| 列定义方式 | 弹性网格,轨道由 minmax 定义 |
弹性网格,轨道由 minmax 定义 |
| 水平间距 | 24px (主),16px (次) | 16px (主),12px (次) |
| 垂直间距 | 32px/24px (区块),16px (组件内) | 24px/16px (区块),12px (组件内) |
| 卡片网格典型表现 | minmax(280px, 1fr),自动 4–5 列 |
minmax(140px, 1fr),自动 1–2 列 |
| 对齐特性 | 支持子网格行对齐 | 无需复杂对齐,流式即可 |
给设计师的实用建议:
minmax 的两个值,并勾选“换行”。总结:
现代栅格设计不是选一个数字,而是建立一套弹性空间语言。桌面端用固定+弹性轨道定义大框架,内容区域用 auto-fit 和 minmax 实现连续自适应;手机端继承同一套间距体系,用容器查询和弹性网格让组件在有限宽度下智能排列。这套方案彻底告别了“手机用 4 列、桌面用 24 列”的断点切换模式,更贴合内在网页设计的本质,也是今后大型系统栅格演进的最佳实践。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。