【问题标题】:With CSS, can you make items within a dom node evenly spaced horizontally *and* vertically?使用 CSS,您可以在 dom 节点中使项目水平*和*垂直均匀分布吗?
【发布时间】:2016-03-07 18:42:58
【问题描述】:

如果我有这样的html:

<div id="a">
  <div>a</div>
  <div>b</div>
  <div>c</div>
  <div>d</div>
  <div>e</div>
  <div>f</div>
  <div>g</div>
  <div>h</div>
  <div>i</div>
</div>

我知道我可以使用flex 框、justify-content: space-aroundflex-wrap:wrap 将项目很好地隔开,如图中的红色框。但我想知道,是否有可能仅使用 css 使项目彼此分开,以便项目垂直水平展开,就像在绿色图像中它会尝试放置相同的数字一样每行/行中的项目数(只要它们都是相同的尺寸)?

我感兴趣的是您事先不知道主 div #a 中有多少项目,并且您也不知道它们的宽度。

这是一个红框版本的 js-fiddle:https://jsfiddle.net/p0Lahgbj/

【问题讨论】:

  • 如果盒子是 10 或 11,应该如何分配?
  • @fcalderan 我想一个底层算法会尝试最小化或最大化某些东西 - 例如最小化每行内容的差异。如果有 11 行,最好有 4 行,2 行每行 3 个盒子,最后 2 行每行 2 个盒子。 10个也许可以做3行,2个4个盒子,1个2个盒子?我不知道,我只是想知道这是否是 css 可以以任何近似方式做的事情。
  • 如果盒子是 10 并且您将它们放置在 4-4-2 中,则差异为 2。如果您将它们放置在 3-3-3-1 中,则差异再次为 2,因此在这两种情况下您有相同的最小化:您应该在实施解决方案之前明确定义所有可能的情况(或可预测的行为)。
  • 很抱歉,您根本不清楚您想要什么。到目前为止我收集的内容:您有未知数量的盒子,并且这些盒子的宽度未知(它们的宽度是否相同?您是否还需要使它们的宽度相同的东西?)应该确定盒子的位置通过框的宽度(根据您对 Thomas Orlitas 答案的评论)和它们的数量(根据您的初始问题)。但具体如何?什么优先?你有什么算法应该如何工作?您是否 100% 确定自己想要什么?因为现在变数太多了。

标签: css


【解决方案1】:

使用 CSS vw 单位:

#a {
    border: 1px solid gray;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-around;
    width: 450px;
}
#a > div {
    border: 1px solid red;
    width: 100vw;     
    max-width: 33%; /* to have 3 columns */
    box-sizing: border-box;
}
<div id="a">
  <div>a</div>
  <div>b</div>
  <div>c</div>
  <div>d</div>
  <div>e</div>
  <div>f</div>
  <div>g</div>
  <div>h</div>
  <div>i</div>
</div>

9 盒:

[---] [---] [---]
[---] [---] [---]
[---] [---] [---]

10 盒:

[---] [---] [---]
[---] [---] [---]
      [---]

11 盒:

[---] [---] [---]
[---] [---] [---]
   [---] [---]

等等……

JsFiddle 9 盒

JsFiddle 10 盒

JsFiddle 11 盒

【讨论】:

  • 所以我认为这实际上是朝着正确方向迈出的一步,但这并不是我真正想要的。我不想像您那样以任何方式指定列数。我希望浏览器根据内容的宽度选择要使用的列数。但是 +1 是为了朝着正确的方向前进!
  • 不完全。听起来真正的答案是目前在纯 css 中是不可能的。感谢您的尝试!
猜你喜欢
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2014-05-29
  • 2020-08-18
  • 2012-12-20
相关资源
最近更新 更多