Flexbox布局:如何在多行中设置每个项目相同的宽度? [复制]

Posted

技术标签:

【中文标题】Flexbox布局:如何在多行中设置每个项目相同的宽度? [复制]【英文标题】:Flexbox layout: how to set every item same width in multi rows? [duplicate] 【发布时间】:2019-08-02 20:47:21 【问题描述】:

这是我在 codepen 中的test demo。我希望在项目之间保持相同的边距,所以我使用flex-grow: 1 来填充过宽。

但是,最后一行的项目似乎与前几行的宽度不同。怎么做?

.row
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
 
.col
  min-width: 160px;
  flex-grow: 1;
  margin: 10px 10px;
  background:#eee;
  height: 120px;

这就是我想要的,插件使用 flex-grow 来保持相同的边距

【问题讨论】:

【参考方案1】:

你的min-width 可以将 div 拉到下一行,我会减少它。

你必须在列上使用flex,在行上使用flex-direction

类似这样的:

.row
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  flex-direction: row;
 
.col
  min-width: 20px;
 flex-grow: 1;
  margin: 10px 10px;
background:#eee;
 height: 120px;
 flex: 1;
<div class="row">
<div class="col">
a
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
</div>

.row
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  flex-direction: row;
 
.col
  min-width: 200px;
 flex-grow: 1;
  margin: 10px 10px;
background:#eee;
 height: 120px;
 flex: 1;
<div class="row">
<div class="col">
a
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
</div>

.row
  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
  flex-direction: row;
 
.col
  width: 200px;
 
  margin: 10px 10px;
background:#eee;
 height: 120px;
<div class="row">
<div class="col">
a
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
</div>

【讨论】:

谢谢,但是项目太多了,不能放在一排...我有更新的细节有问题 它会自动转到下一行,但如果你想在一行中,你必须删除 min-width。 最小宽度是需要的,自动转到下一行就可以了。但我希望物品保持相同的宽度 确定查看所有结果。你也可以使用 max-width 【参考方案2】:

希望下面的代码可以解决你的问题。

.row
  display: flex;
  flex-wrap: wrap;
  background: red;

.col
  flex: 1;
  min-width: calc(33.33% - 30px);
  max-width: calc(33.33% - 30px);
  margin: 10px 15px;
  background:#eee;
  height: 120px;
<div class="row">
  <div class="col">1</div>
  <div class="col">2</div>
  <div class="col">3</div>
  <div class="col">4</div>
  <div class="col">5</div>
</div>

【讨论】:

谢谢,但现在每行仅限于 3 列,可以通过 min-width=160px 动态设置【参考方案3】:

您可以使用calcwidthflex-basis 属性设置为calc(33.33% - 30px),以便调整左右边距您已申请col - 请参阅下面的演示:

.row
  display: flex;
  flex-wrap: wrap;
  background: red;

.col
  flex-basis: calc(33.33% - 30px);
  margin: 10px 15px;
  background:#eee;
  height: 120px;
<div class="row">
  <div class="col">1</div>
  <div class="col">2</div>
  <div class="col">3</div>
  <div class="col">4</div>
  <div class="col">5</div>
</div>

【讨论】:

谢谢,但现在每行仅限于 3 列,可以通过 min-width=160px 动态设置 但如果你在较小的屏幕上使用min-width,它会破坏这种布局......

以上是关于Flexbox布局:如何在多行中设置每个项目相同的宽度? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局在一个宽度相同的 uitableviewcell 中设置八个 uilabel

如何在 tableviewcell 中设置相同大小的图像?

如何在多行flexbox中对齐左最后一行/行[重复]

如何在多行flexbox中对齐左最后一行/行[重复]

如何使用flexbox进行两列布局,并在列中的项目之间使用相同的间距? [重复]

FlexBox布局Android。如何消除视图之间的垂直间隙?