HarmonyOS应用开发实战:猫猫大作战-relationalStore 建库建表、增删改查 SQL、事务批量插入、与 Preference 键值取
2026/7/28 0:21:49
实现自适应列数的核心语法是:
grid-template-columns:repeat(auto-fill,minmax(最小列宽,1fr));| 组成部分 | 作用 |
|---|---|
repeat() | 重复生成指定的列 / 行规则 |
auto-fill | 自动计算「容器宽度能容纳多少个「最小列宽」的列」,生成对应数量的列 |
minmax(最小列宽, 1fr) | 列宽规则:✅ 最小不低于「最小列宽」(避免列太窄)✅ 最大按1fr等分剩余空间(列宽自适应拉伸) |
以下是可直接运行的完整代码,包含详细注释,实现「屏幕宽则列多、屏幕窄则列少」的自适应效果:
<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>auto-fill + minmax 自适应列数</title><style>/* 重置默认样式 */*{margin:0;padding:0;box-sizing:border-box;}body{padding:20px;background:#f5f5f5;}/* 核心:网格容器 */.card-container{display:grid;/* 关键:auto-fill 自动填充列数,列宽最小200px、最大等分 */grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px;/* 列/行间距,提升美观度 */}/* 网格项(卡片) */.card{padding:24px;background:#42b983;color:white;border-radius:8px;text-align:center;font-size:18px;}</style></head><body><divclass="card-container"><divclass="card">卡片 1</div><divclass="card">卡片 2</div><divclass="card">卡片 3</div><divclass="card">卡片 4</div><divclass="card">卡片 5</div><divclass="card">卡片 6</div></div></body></html>| 屏幕宽度 | 列数 | 列宽 | 逻辑 |
|---|---|---|---|
| ≥ 1296px(2006 + 165) | 6 列 | 200px(刚好填满) | auto-fill 计算出能放 6 列,列宽取最小值 200px |
| 864px ~ 1295px | 4 列 | 自适应拉伸(>200px) | 只能放 4 列,剩余空间按 1fr 等分,列宽 > 200px |
| 432px ~ 863px | 2 列 | 自适应拉伸 | 只能放 2 列,列宽进一步拉伸 |
| < 432px | 1 列 | 100% 容器宽度 | 只能放 1 列,列宽占满容器 |
很多人会混淆这两个属性,核心差异是「对空列的处理」,以下是对比示例:
<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>auto-fill vs auto-fit</title><style>*{margin:0;padding:0;box-sizing:border-box;}body{padding:20px;display:flex;gap:20px;flex-wrap:wrap;}.container{flex:1;min-width:300px;background:#eee;padding:10px;}.card{background:#42b983;color:white;padding:20px;text-align:center;}/* auto-fill:保留空列位置 */.fill{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px;}/* auto-fit:折叠空列,现有列撑满容器 */.fit{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:8px;}</style></head><body><divclass="container"><h3>auto-fill(保留空列)</h3><divclass="fill"><divclass="card">1</div><divclass="card">2</div></div></div><divclass="container"><h3>auto-fit(折叠空列)</h3><divclass="fit"><divclass="card">1</div><divclass="card">2</div></div></div></body></html>auto-fit(更常用,视觉更整洁);auto-fill(如表格类布局)。minmax()的最小值可以结合clamp(),实现「根据屏幕宽度动态调整最小列宽」,适配不同尺寸设备:
.card-container{/* 列宽规则: 最小列宽:屏幕<375px时160px,375px~1200px时30vw,最大220px; 最大列宽:1fr(等分剩余空间) */grid-template-columns:repeat(auto-fit,minmax(clamp(160px,30vw,220px),1fr));gap:16px;}box-sizing: border-box,避免padding导致容器宽度溢出,影响列数计算;gap会占用容器宽度,auto-fill 计算列数时会自动扣除间距(无需手动计算)。auto-fill/auto-fit + minmax()是 Grid 实现「无断点自适应列数」的黄金组合:
auto-fill/auto-fit解决「列数自动适配屏幕宽度」的问题;minmax()解决「列宽既不太小、又能自适应拉伸」的问题;