You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现固定行列、填充高度且单元格保持1:1宽高比的CSS Grid布局

实现方案

问题核心原因

原有写法使用1fr声明网格列宽,会优先拉伸列宽占满容器宽度,单元格的aspect-ratio: 1会让高度同步被撑开,最终超过容器高度出现滚动条。

修正思路

直接基于容器高度计算每行高度,再将列宽设置为和行高相等的值,既保证所有单元格为正方形,也能让网格整体高度完全占满容器,多余宽度自动留在容器右侧。

完整代码(28x20 网格适用)

/* 补全html高度声明,保证百分比高度生效 */
html, body {
  height: 100%;
  width: 100%;
  margin: 0;
  box-sizing: border-box;
}

.ctnr {
  display: grid;
  /* 28列,列宽=行高,计算逻辑和行高一致 */
  grid-template-columns: repeat(28, calc((100% - 19 * 1px) / 20));
  /* 20行,高度均分容器高度,减去19个1px的行间距 */
  grid-template-rows: repeat(20, calc((100% - 19 * 1px) / 20));
  gap: 1px;
  height: 100%;
  /* 可选,防止极端情况溢出 */
  overflow: hidden;
}

.cell {
  background: orange;
  /* 可选冗余保障,确保单元格始终为正方形 */
  aspect-ratio: 1;
}
<div class="ctnr">
  <!-- 生成28*20=560个.cell元素即可 -->
  <div class="cell"></div>
  <!-- 剩余.cell省略 -->
</div>

3x3 简化示例适配代码

如果要验证3x3效果,仅需修改网格行列的声明即可:

.ctnr {
  grid-template-columns: repeat(3, calc((100% - 2 * 1px) / 3));
  grid-template-rows: repeat(3, calc((100% - 2 * 1px) / 3));
}

适配说明

该方案完全兼容最新Chromium内核,calc计算无精度问题,符合Electron应用的开发需求,不会出现纵向滚动条,多余空间仅保留在网格右侧。

内容的提问来源于stack exchange,提问作者alexgophermix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:48:03