【问题标题】:Distribute boxes of various heights evenly across flexbox columns将不同高度的盒子均匀分布在 flexbox 列中
【发布时间】:2016-07-21 21:22:44
【问题描述】:

我有一些宽度相同但高度不同的盒子(取决于它们的内容——它们是标题+文本的注释)和一个自动高度的容器(愿意滚动)。 这个想法是将容器中的笔记分布在各个列中,使其看起来像 Google Keep。 现在我正在使用 flexbox 行,但我正在失去空间:

我当前的 CSS 看起来像:

.container {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  align-content: flex-start;
  padding: 10px;
}
.note {
  flex-basis: 50%;
}
.note>div {
  margin: 10px;
}

问题是,如果我切换到flex-direction: column,由于我的 flexbox 容器的height: auto,注释只占一列,因为它们看不到任何换行的理由。 如果不先渲染注释,在 Javascript 中计算容器的高度将非常困难(而且我正在使用 React ......) 我在这里遗漏了什么吗?

这是我希望达到的结果:

我不想使用 jQuery,我想避免使用 Javascript...

【问题讨论】:

  • 你错过了什么吗?不,正如你所说,...如果列没有确定的高度,它就没有理由来换行。
  • 我知道,我正在寻找一种让它们包裹起来的方法......
  • 那么必须涉及高度......即使它是 100vh...... 什么的。否则,您正在寻找 JS 解决方案。
  • 或者,放弃 flexbox 并考虑 CSS Columns
  • 问题是,使用 flexboxes,例如,如果我将高度设置为 100vh,如果有太多注释无法放入,多余的将被忽略并且不显示...我查看了 CSS列也可以,但它会将我的块分成文本片段

标签: javascript css reactjs flexbox


【解决方案1】:

我最终放弃了 flexbox 并改用 columns

.container {
  column-count: 3;
  column-gap: 0;
  padding: 10px;
}
.note {
  display: inline-block; /* important to wrap notes not content */
  width: 100%;
}
.note>div {
  margin: 10px;
}

Use inline-block 备注和don't hide the overflow

【讨论】:

  • 但是所有元素都是垂直排序的,而不是水平交替的。
  • 这会将我的卡分成两半,同时更改列有任何解决方案吗?
猜你喜欢
  • 1970-01-01
  • 2019-06-05
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
相关资源
最近更新 更多