ul {
  display: grid;
  grid-template-rows: repeat(4, 2em);
  grid-auto-flow: column;
  column-gap: 1em;
}

li {
  list-style: none;
}
<hr>
<ul>
  <li>X</li>
  <li>X</li>
</ul>
<hr>
<ul>
  <li>Y</li>
  <li>Y</li>
  <li>Y</li>
  <li>Y</li>
  <li>Y</li>
  <li>Y</li>
  <li>Y</li>
  <li>Y</li>
  <li>Y</li>
  <li>Y</li>
</ul>
</hr>

在这段代码中,我有一个grid-template-rows: repeat(4, 2em);的列表.

这将填充第一列,直到第四行,然后开始第二列. 这个不错.

我的问题是,当我的项目少于4个时,网格仍然是4行高. 有没有办法让网格增长到第四行,然后开始添加列?

大概grid-template-rows: repeat(max 4, 2em)个左右.

推荐答案

不是自然而然的(见this Q&A).

不过,您可以通过定义最大行数并将行的高度设置为auto并将actual的高度定义移动到li来作弊.请参见this CodePen.

ul {
  display: grid;
  grid-template-rows: repeat(4, auto);
  grid-auto-flow: column;
  column-gap: 1em;
  row-gap: 0.25em;
  border: 1px solid green;
  margin: 0;
  padding: 0;
}

li {
  list-style: none;
  height: 1.2em;
  background: lightblue;
}
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>
<hr>
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
  <li>Item 6</li>
  <li>Item 7</li>
  <li>Item 8</li>
  <li>Item 9</li>
</ul>
</hr>

Css相关问答推荐

如何为垫子制作圆角- Select 所有角点上的下拉列表

本机CSS嵌套混乱

如何将动态参数从react tsx文件发送到css

flexbox换行时自动设置高度的原理是什么

使用文本溢出约束内部 div:没有最大宽度的省略号(或类似的)

如何使我的标语(h1元素)不居中对齐?

解释 "document.styleSheets[0].cssRules[0].style;"

使用CSS Grid是否可以跳过下一列?

设置初始大小并记住分配的最后大小

当值小于 1 时理解 flex-shrink

将重复的线性渐变锚定到元素的顶部

css渐变实现2色虚线边框

基于变量动态生成 CSS 类 - SCSS

BEM 块、命名和嵌套

如何倾斜元素但保持文本正常(未倾斜)

为什么无论我做什么都不能改变复选框的 colored颜色 ?

在 Firefox 中删除额外的按钮间距/填充

Flexbox 代码适用于除 Safari 之外的所有浏览器.为什么?

在渲染网页之前等待字体加载

Rails 中正确的 SCSS assets资源 struct