假设你有这样一个需求:
只需在父元素加两行 CSS 就能实现:
/* 父元素 */
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
/* 子元素 */
.item {
  height: 200px;
  background-color: rgb(141, 141, 255);
  border-radius: 10px;
}
下面详细解释这行代码的意思:
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
这是 CSS Grid 布局里定义列宽的常用写法,逐个拆解如下:
grid-template-columnsrepeat(auto-fit, ...)repeat 是个 重复函数 ,表示后面的模式会被重复多次。auto-fit 是一个特殊值,意思是: 自动根据容器宽度,能放下几个就放几个 ,每列都用后面的规则。
minmax(200px, 1fr)minmax 也是一个函数,意思是:每列最小200px,最大可以占1fr(剩余空间的平分)1fr),让内容填满整行。
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));让你的网格卡片 最小200px,最大自动填满一行 ,自动适应任何屏幕,布局永远美观!
auto-fill,和 auto-fit 有啥区别?auto-fill🧱 尽可能多地填充列,即使没有内容也会“占位”
auto-fit🧱 自动适应内容,能合并多余空列,不占位
假设容器宽度能容纳 10 个 200px 的卡片,但你只放了 5 个卡片:
auto-fill 会保留 10 列宽度,5 个卡片在前五列,后面五列是“空轨道”。auto-fit 会折叠掉后面五列,让这 5 个卡片拉伸填满整行。<h2>auto-fill</h2>
<div class="grid-fill">
    <div>item1</div>
    <div>item2</div>
    <div>item3</div>
    <div>item4</div>
    <div>item5</div>
</div>
<h2>auto-fit</h2>
<div class="grid-fit">
    <div>item1</div>
    <div>item2</div>
    <div>item3</div>
    <div>item4</div>
    <div>item5</div>
</div>
.grid-fill {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 16px;
  margin-bottom: 40px;
}
.grid-fit {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px;
}
.grid-fill div {
  background: #08f700;
}
.grid-fit div {
  background: #f7b500;
}
.grid-fill div,
.grid-fit div {
  padding: 24px;
  font-size: 18px;
  border-radius: 8px;
  text-align: center;
}
auto-fit
适合卡片式布局、相册、响应式按钮等。auto-fill
比如表格、日历,或者你希望网格始终对齐,即使内容不满。| 属性 | 空轨道 | 内容拉伸 | 适用场景 | 
|---|---|---|---|
| auto-fill | 保留 | 否 | 固定列数、占位网格 | 
| auto-fit | 折叠 | 是 | 流式布局、拉伸填充 | 
auto-fill 更像“占位”,auto-fit 更像“自适应”auto-fitminmax 配合,让列宽自适应得更自然