在减小容器宽度时将项目换行到下一行 - CSS

Flex item wrapping to next line on reducing the width of container - CSS

以下是我的代码,其中我希望 3 个 .item div 在一行上,接下来的 3 个在另一行上。下面提到的代码适用于普通屏幕。但是,一旦我减小浏览器的大小,2 个项目就会显示在一行中。让我知道我在这里做错了什么,虽然我已经将宽度增加到 33%,它应该可以容纳它,但可能是我在这里遗漏了一些东西。

代码-

:root { box-sizing: border-box; }
.flex { display: flex; width: 100%; flex-wrap: wrap; }
.item { flex: 0 1 33%; border: 1px solid red; }
<div class="flex">
  <div class="item">Flex Item 1</div>
  <div class="item">Flex Item 2</div>
  <div class="item">Flex Item 3</div>
  <div class="item">Flex Item 4</div>
  <div class="item">Flex Item 5</div>
  <div class="item">Flex Item 6</div>
</div>

Amaury Hanser 是对的 - 添加 box-sizing: border-box; 到项目将解决您的问题。

另一种方法是使用 grid 而不是 flex。这允许您使用 1fr 单位,在将宽度平均分配给指定数量的列时,它会自动考虑填充和边框大小等因素。

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
}

.item {
  border: 1px solid red;
}
<div class="grid">
  <div class="item">Flex Item 1</div>
  <div class="item">Flex Item 2</div>
  <div class="item">Flex Item 3</div>
  <div class="item">Flex Item 4</div>
  <div class="item">Flex Item 5</div>
  <div class="item">Flex Item 6</div>
</div>

通过将 box-sizing: border-box 添加到您的项目,您将确保它们的宽度增长不会超过 33%。

没有它,它们的宽度等于33% + 1px + 1px。在某些时候,它将超过其父宽度的三分之一。

:root { box-sizing: border-box; }
.flex { display: flex; width: 100%; flex-wrap: wrap; }
.item { flex: 0 1 33%; border: 1px solid red; box-sizing: border-box; }