需要一个响应式解决方案来每行包装 3 个列表项

Need a responsive solution for wrapping 3 list items per row

一个单独的问题来找到我们几乎已经找到的最终解决方案(非常感谢在那里回答的每个人)。

我有一个无序列表。该列表可以包含任意数量的项目,它是动态的。列表的样式化方式是每行有 3 个列表项(每个项占父宽度的 1/3)。

我在上面提到的另一个问题中提出的解决方案有两个问题:

这就是我需要的。如果我们有 3 个列表项,列表应该这样看:

这是一个说明,说明如果列表中有 4 个或更多项应该发生什么:

这是我试过的代码(感谢其他 post 的帮助):

.parent{
  display: flex;
  flex-wrap: wrap;
  width: 100%;
  height: 100px;
  gap: 20px;  
  box-sizing: border-box;
  justify-content: space-between;
  background-color: lightgreen;
}
.child{
  flex-basis: 30%;
  background-color: blue;
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
}
<div class="parent">
  <div class="child"> <span>1</span> </div>
  <div class="child"> <span>2</span> </div>
  <div class="child"> <span>3</span> </div>
  <div class="child"> <span>4</span> </div>
  <div class="child"> <span>5</span> </div> 
</div>

使用:after伪元素来模拟一个不可见的子元素div,因此项目的对齐方式固定为左对齐。以及响应式的媒体查询。查看代码片段以了解一些想法。

.parent {
  display: flex;
  flex-wrap: wrap;
  width: 100%;
  height: 100%;
  gap: 20px;
  box-sizing: border-box;
  justify-content: space-between;
  background-color: lightgreen;
}

.parent::after {
  content: "";
  width: 30%;
  height: 0;
}

.child {
  flex-basis: 30%;
  background-color: blue;
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
}

@media only screen and (max-width : 1024px) {
  /* for tablet */
  .parent::after {
    width: 46%;
  }
  .child {
    flex-basis: 46%;
  }
}

@media only screen and (max-width : 768px) {
  /* for mobile */
  .parent::after {
    display: none;
  }
  .child {
    flex-basis: 100%;
  }
}
<div class="parent">
  <div class="child"> <span>1</span> </div>
  <div class="child"> <span>2</span> </div>
  <div class="child"> <span>3</span> </div>
  <div class="child"> <span>4</span> </div>
  <div class="child"> <span>5</span> </div>
</div>