通过 flexbox/fluent ui 控制项目如何排成一行

Controlling how items are placed in a row via flexbox/fluent ui

我正在使用 flexbox 和 Microsoft 的 fluent ui 它的“堆栈”抽象来在我的 React 应用程序的页面上显示视频卡。顾名思义,我使用 flex-wrapspace-between 使每个项目之间的 space 保持相等。当页面上存在大量项目时,这看起来很完美。

但是,当您刚开始添加项目时,您要添加第二个项目,而不是将项目放在第一个视频卡的右侧 - 它与page - 第二个项目被放在行的最右边。然后第 3 个项目是 1 和 2 距离的一半——所以它被放置在行的正中间。

我的问题是,如何让第 2 项——然后是第 3 项,依此类推——放在前一项的右侧,直到该行已满,此时它换行到一个新的行,同样的事情又发生了?

这是我的代码:

<Stack
  horizontal 
  styles={{
   root: {
    'flex-wrap': 'wrap',
    'justify-content': 'space-between'
   }
  }}>
  {this.showNewVideoCard()}
  {this.state.videos.map((video, index) => (
    <div key={index}>
      <VideoCardForm key={video.id}
       ... more code
      /> 
    </div>
  ))}
</Stack>

换句话说,当我添加第二项时,我得到的是这样的:

...当我想要的是这样的:

而且我猜它需要在幕后工作的方式是,每个项目之间的 space 需要根据您可以放入一个项目的最大数量来计算排?

Flexbox 是为处理这种情况而设计的吗?或者这比我意识到的更复杂?注意:如果不是很明显,每张视频卡的尺寸将完全相同。因此,在我的用例中,我知道我可以连续放置 7 个视频卡,然后再换行到下一行。我只是宁愿一行中的项目并排放置,而不是最初放在行的两端。

我认为您的问题是您使用了 justify-content: space-between,而您应该使用 justify-content: flex-start 并为每个项目留出边距。由于 flex-startjustify-content 的默认值,您可以一起删除该行。