用三行 CSS 实现任意多列等分布局:深入掌握 Grid 的 repeat() 与 gap

做前端的你是不是经常遇到这样的需求:

  • 要把一行内容平均分成 3、4、5 份;
  • 每一份之间要有间隔;
  • 并且要在各种屏幕下都能自适应;

很多人第一反应是:

"我用 flex + margin 就能搞定!"

没错,Flex 可以做到,但代码会越来越多:要算间距、要控制最后一列不留空隙、还得保证宽度自适应。

而用 CSS Grid,只需要三行:

css 复制代码
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;

四等分、有间距、完美自适应,一步到位。

我们就来系统讲讲这三行代码背后的"魔力"。

一、Grid 的核心:二维网格系统

display: grid 是 CSS 的二维布局神器。

flex 不同的是:

  • Flex 是 一维布局(只能沿主轴排列)
  • Grid 是 二维布局(可以同时控制行和列)

也就是说,用 Grid 你可以非常自然地创建 行 × 列 的布局,就像 Excel 一样!

二、三行代码拆解

css 复制代码
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;

display: grid

声明容器为网格布局(Grid Container)。

容器里的每个子元素(Grid Item)会自动分布在网格单元中。

2️⃣ grid-template-columns

定义每一列的宽度。

比如 repeat(2, 1fr) 表示两列、平分宽度。

你也可以自由控制列数:

css 复制代码
grid-template-columns: repeat(3, 1fr); /* 三等分 */
grid-template-columns: repeat(4, 1fr); /* 四等分 */
grid-template-columns: repeat(5, 1fr); /* 五等分 */

gap

设置列与列之间的间距(行间距同样适用)。

这比用 margin 轻松太多了。

css 复制代码
gap: 10px;      /* 统一间距 */
column-gap: 20px; /* 只控制列间距 */
row-gap: 15px;  /* 只控制行间距 */

三、完整实战:多等分布局

html 复制代码
<div class="grid-demo">
  <div class="box">A</div>
  <div class="box">B</div>
  <div class="box">C</div>
  <div class="box">D</div>
</div>
css 复制代码
.grid-demo {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
}

.box {
  background: #007bff;
  color: #fff;
  text-align: center;
  padding: 20px;
  border-radius: 6px;
  font-weight: bold;
}

结果:

  • 自动生成 4 列等分
  • 每列之间间隔 10px
  • 宽度随容器变化自适应

不需要 calc()、不需要手动算宽度、不怕最后一列溢出。

四、更多实用技巧

. 自动换行

当内容太多时,可以让 Grid 自动换行:

css 复制代码
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));

意思是:

每个格子最小 200px,如果还有空间就平分剩余宽度。

这样就能实现"流式自适应布局",非常适合图片墙、卡片列表等。

✅ 2. 指定不等列宽

如果你想要第一列固定宽度,其它自适应:

css 复制代码
grid-template-columns: 200px 1fr 1fr;

第一列 200px,后两列平分剩余宽度。

✅ 3. 内容居中对齐

css 复制代码
justify-items: center;  /* 水平居中 */
align-items: center;    /* 垂直居中 */

或:

css 复制代码
place-items: center;

一行代码搞定双向居中。


📱 五、响应式优化

很多人担心:

"多列布局在手机上是不是太挤了?"

没关系,加一点媒体查询就能自动变成单列:

css 复制代码
@media (max-width: 768px) {
  .grid-demo {
    grid-template-columns: 1fr;
  }
}

六、Grid 与 Flex 的对比总结

场景 用 Flex 用 Grid
一维排列(水平或垂直) 🚫
二维布局(同时控制行列) 🚫
等分列布局 ⚠️ 需计算宽度 ✅ repeat() 一行搞定
间距控制 margin 复杂 gap 简单
响应式适配 需要额外逻辑 auto-fill 优雅实现

一句话总结:

Flex 适合布局单行/单列,Grid 适合完整的页面结构。

相关推荐
LilySesy1 分钟前
ABAP+如果在join的时候需要表1的字段某几位等于表2的字段的某几位,需要怎么做?
服务器·前端·数据库·sap·abap·alv
吃饺子不吃馅35 分钟前
⚡️ Zustand 撤销重做利器:Zundo 实现原理深度解析
前端·javascript·github
幼儿园技术家40 分钟前
网站在苹果 Safari 进行适配遇到的问题
前端
IT_陈寒1 小时前
7个鲜为人知的JavaScript性能优化技巧,让你的网页加载速度提升50%
前端·人工智能·后端
不坑老师1 小时前
不坑盒子的插入网页功能是完全免费的!
前端·html
Wang's Blog1 小时前
前端FAQ: 描述⼀下你最近使⽤过的前端框架,并解释为何选择它们?
前端·vue.js·faq
wgego1 小时前
做题笔记BUU (XSS-Lab)(1-14)
前端·笔记·xss
dllxhcjla1 小时前
css第二天
java·前端·css
远航_1 小时前
10 个被严重低估的 JS 特性,直接少写 500 行代码
前端·javascript
起这个名字1 小时前
感觉这篇 DeepSeek 给出的微前端实践很牛!轻喷!
前端