当前位置: 首页 > 面试题库 >

每行5个项目,Flexbox中的项目会自动调整大小

马和硕
2023-03-14
问题内容

我现在有这个:

.container {

  background: gray;

  width: 600px;

  display: flex;

  flex-flow: row wrap;

  position: relative;

}

.item {

  background: blue;

  width: auto;

  height: auto;

  margin: 4px;

  flex: 1;

  flex-basis: 20%;

}


<div class="container">

  <div class="item">A</div>

  <div class="item">B</div>

  <div class="item">C</div>

  <div class="item">D</div>

  <div class="item">E</div>

  <div class="item">F</div>

  <div class="item">G</div>

</div>

我想做的是在flexbox中每行有5个项目。目前,它们没有显示是因为它们没有设置宽度/高度,这使我想到了下一个问题。是否可以自动调整项目的大小,以便每行容纳5个项目?

我该怎么做?

谢谢!


问题答案:

您给出的a是正确的,flex-basis: 20%但是您必须调整每个 flex项目 上的4px边距以使其正确 包装

最后一行的等宽Flex项目

用途flex: 0 1 calc(20% - 8px)-这表示商品的宽度不会超过宽度的20%(调整边距),并且可以根据容器的宽度缩小。请参见下面的演示:

.container {

  background: gray;

  width: 600px;

  height: 200px; /* height given for illustration */

  display: flex;

  flex-flow: row wrap;

  position: relative;

}



.item {

  background: blue;

  margin: 4px;

  flex: 0 1 calc(20% - 8px); /* <-- adjusting for margin */

}


<div class="container">

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

</div>

另一种方法有点 怪诞 -您可以将flex-grow设置为1并flex-basis: calc(20% - 4px)使用flex: 1 1 calc(20% - 4px),并使用 伪元素 填充剩余的空间:

.container {

  background: gray;

  width: 600px;

  height: 200px; /* height given for illustration */

  display: flex;

  flex-flow: row wrap;

  position: relative;

}



.item {

  background: blue;

  margin: 4px;

  flex: 1 1 calc(20% - 8px); /* <-- adjusting for margin */

}



.container:after {

  content: '';

  display: block;

  flex: 999; /* grow by a large number */

}


<div class="container">

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

</div>

如果您没有 每行n个项目的 要求,则可以参考以下内容:

  • 像网格自动流动密集的无序列表

最后一行的伸缩项目会扩展以填充可用空间

如果一行中的项目少于5个,并且希望它们填充剩余空间,请使用flex: 1 1 calc(20% - 8px)(请注意,flex- grow此处将其设置为1,以便最后一行中的 flex项目 扩展为填充剩余空间 ):

.container {

  background: gray;

  width: 600px;

  height: 200px;  /* height given for illustration */

  display: flex;

  flex-flow: row wrap;

  position: relative;

}



.item {

  background: blue;

  margin: 4px;

  flex: 1 1 calc(20% - 8px);  /* <-- adjusting for margin */

}


<div class="container">

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

  <div class="item"></div>

</div>


 类似资料:
  • 问题内容: 我正在使用一个伸缩框来显示8个项目,这些项目将随我的页面动态调整大小。如何强制将项目分成两行?(每行4个)? 这是一个相关的片段: 问题答案: 您已经在容器上了。很好,因为它会覆盖默认值source。这是在某些情况下项目无法包装形成网格的原因。 在这种情况下,主要问题在于伸缩项目。 该属性实际上并没有设置弹性项目的大小。它的任务是在容器源中分配可用空间。因此,无论屏幕尺寸有多小,每一项

  • 我正在使用一个flex框显示8个项目,这些项目将动态调整我的页面大小。如何强制它将项目拆分为两行?(每行4个)? 以下是相关片段: (或者如果您更喜欢jsfiddle-http://jsfidle.net/vivmaha/oq6prk1p/2/) null null

  • 我有一个简单的问题:我想把一个文本和一个图像放在一行。我试过用display flex,但它总是调整图像的大小,这不是我想要的。 这是我的html代码: 这是我的CSS: 我还想把关闭的imgage放在方框的右边。看起来总是这样: 这可能很容易解决,但我现在很困惑。(感谢您的帮助:)

  • 视图将被重新创建,使过渡变得非常奇怪,因为它在下一个项目移动的同时会在该项目的上方褪色。出现的新视图没有调整大小,它已处于完整大小。 重新创建视图时,旧视图淡出,新视图淡出,这会使视图背景颜色闪烁。 我还尝试在动画期间在item视图上设置,但这种方法的问题是RecycleView的布局会立即更新,并且不会跟随动画。 我已经为这两次尝试创建了一个小的演示项目。项目的来源在这里。

  • 想象一下我有后续标记 和样式 由于某些原因,我无法更改的宽度,我是否可以通过对父容器进行样式化、使用flexbox或任何其他方式在每行中排列两个项目?

  • 我正在尝试用自我调整大小的项目实现UICollectionView (flowLayout)。 实现非常简单——我只需设置estimatedItemSize和UICollectionViewCell约束来管理它的大小。 创建集合视图后,第一次重新加载数据时一切正常,但在另一次或其他重新加载时,顶部的少数项目变得与估计的项目大小相同。如果向下和向上滚动,项目大小看起来又很好。 我花了两天时间来研究这