【问题标题】:column-count and column-width not respected不考虑列数和列宽
【发布时间】:2018-03-16 06:10:03
【问题描述】:

问题

使用 CSS column-property 在页面上创建列我注意到布局引擎的一些奇怪行为。也就是说,我正在使用

body {
  padding: 0;
  background-color: black;
  margin: 0;

  column-width: 308px;
  column-gap: 0;
  column-rule: none;
  line-height: 0;
}

因此每列的宽度应为 308 像素。我的演示页面看起来非常正常,除了以大约 2400 像素宽度查看时。然后它看起来像这样:

请注意最后一列中的大黑区。我的数学告诉我 2400 / 308 = 7.79 > 7。人们会期望在 2400px 视口宽度处出现七列。然而,布局引擎只使用了六个。这种行为在 chrome 和 firefox 之间是一致的,甚至在将 column-width: 308px 替换为 column-count: 7 时仍然存在。

问题

我想知道是什么导致浏览器在这个宽度处忽略第 7 列。有没有办法避免这种行为?

代码

可以使用以下来源或this fiddle 重现该问题

body {
  padding: 0;
  background-color: black;
  margin: 0;
  column-width: 308px;
  column-gap: 0;
  column-rule: none;
  line-height: 0;
}

img {
  margin: 12px;
  padding: 9px;
  border: 1px solid darkgrey;
  background-color: white;
  display: inline-block;
  width: 264px;
}

.w {
  height: 176px;
}

.h {
  height: 396px;
}
<img class="w">
<img class="w">
<img class="h">
<img class="w">
<img class="w">

<img class="w">
<img class="w">
<img class="w">
<img class="w">
<img class="h">

<img class="w">
<img class="w">
<img class="w">
<img class="w">
<img class="h">

<img class="w">
<img class="w">
<img class="h">
<img class="w">
<img class="w">

<img class="w">
<img class="w">
<img class="w">
<img class="w">
<img class="h">

<img class="w">
<img class="w">
<img class="w">
<img class="w">
<img class="h">

【问题讨论】:

  • 对我来说它恰好发生在 2445px 之后

标签: html css column-width css-multicolumn-layout column-count


【解决方案1】:

如上所述,这种行为是预期的,因为列的工作方式。 但是您可以解决此问题,但是您必须在所有情况下对其进行测试。特别是如果您有动态数量的项目。

@media screen and (min-width: 2400px) and (max-width: #something#) {
  body {
    column-gap: 100px; /* adjust to your needs */
  }
}

此解决方案不能处理所有情况,但它可以作为非常具体的情况的解决方法。

也许你应该以另一种方式布置你的内容......也许你应该研究像 Masonry f. 这样的布局库。一世。 它可能看起来太多,但它解决了很多问题: https://masonry.desandro.com

【讨论】:

    【解决方案2】:

    几天前我在这里回答了一个类似的问题:https://stackoverflow.com/a/46412808/5641669

    不过,我想补充一点:

    如果容器的高度不固定,则项目/文本在列中的分布始终取决于第一列的高度。在您的情况下,如果您的第一列中的最后一项将移动到第二列,则其他列的高度会降低(因为它们会根据第一列调整它们的高度),因此这些项目完全不适合 7列-> 不可能。

    因此,将第四个项目放入第一行,以使所有项目都适合column-count 定义的列数。在这种情况下,这会导致只有 6 个列中有项目,但有 7 个列。

    正如我之前写的,整个容器的高度总是取决于第一列(即如果高度不固定)。其余列将仅根据该高度填充(它们不会比第一个高),而不是根据其余列的均匀分布。因此,有时结果可能是像您这样的情况,最后一列仍然为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 2013-12-22
      • 2013-05-20
      相关资源
      最近更新 更多