css 仅网格列,无换行且自动填充覆盖端部间隙

css grid only columns, no wrap and with auto-fill covering end gap

你好,所以我想在不换行的情况下在列中显示随机数量的文章,但在末尾填充额外的 space。

文章必须每 4 篇显示一次,占据整个可用宽度,然后,通过水平滚动,您可以移动到下 4 篇,依此类推。 如果少于4或者是它的任意倍数,我要余数补空

所以我的尝试是这样的:

section {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(25%, 1fr));
  grid-auto-flow: column;
  overflow:scroll;
 }
 
 article {
 background-color: lightblue;
 margin: 10px;
 white-space: nowrap;
 height: 40px;
 }
<section>
  <article>Article 1</article>
  <article>Article 2</article>
  <article>Article 3</article>
  <article>Article 4</article>
  <article>Article 5</article>
  <article>Article 6</article>
</section>

如您所见,前 4 列已正确呈现,溢出的列不再占用 space 的 25%(适合 1/4)并且没有额外的 spaces在最后2个之后填充。(在这种情况下,应该还有2个白色)

我可以做些什么来使用 CSS Grid 实现这个目标吗? 请记住,可用的总数 space 和文章数量一样是动态的。理想情况下,我希望 Grid 始终呈现 4 列的倍数来覆盖间隙。

使用 grid-auto-columns: 25% 然后考虑在每个组的第一个元素上创建一个伪元素来创建额外的 space:

section {
  display: grid;
  grid-auto-columns: calc((100% - 3*10px)/4); /* we remove 3 gaps here */
  grid-gap: 10px;
  grid-auto-flow: column;
  overflow: auto;
}

article {
  background-color: lightblue;
  white-space: nowrap;
  margin:10px 0;
  height: 40px;
  position:relative;
}

article:nth-child(4n + 1)::before {
  content:"";
  position:absolute;
  left:0;
  top:0;
  height:1px; /* a small height */
  width:calc(400% + 3*10px); /* we consider 3 gaps here */
  pointer-events: none; /* avoid any interaction */
}
<section>
  <article>Article 1</article>
  <article>Article 2</article>
  <article>Article 3</article>
  <article>Article 4</article>
  <article>Article 5</article>
  <article>Article 6</article>
</section>

<section>
  <article>Article 1</article>
  <article>Article 2</article>
  <article>Article 3</article>
  <article>Article 4</article>
  <article>Article 5</article>
  <article>Article 6</article>
  <article>Article 7</article>
  <article>Article 8</article>
</section>

<section>
  <article>Article 1</article>
  <article>Article 2</article>
  <article>Article 3</article>
</section>