Chrome 中不平衡的 CSS 列

Posted

技术标签:

【中文标题】Chrome 中不平衡的 CSS 列【英文标题】:Unbalanced CSS columns in Chrome 【发布时间】:2015-03-28 06:21:54 【问题描述】:

我想使用CSS columns 在多列中动态显示一些引导列表组,但我在 Chrome 中遇到了一些奇怪的间距问题。 Firefox 完美运行。看起来正是问题this guy had,但他从未得到答案,可能是因为他没有提供一个很好的例子。所以我会提供一个很好的例子。

CSS(在 Bootstrap 之后加载):

.columns 
  -webkit-column-width: 200px;
     -moz-column-width: 200px;
          column-width: 200px;
  -webkit-column-gap: 20px;
     -moz-column-gap: 20px;
          column-gap: 20px;
  width: 600px;


.list-group 
  display: inline-block;
  width:  100%;      

html

<div class="columns">
  <ul class="list-group">
    <li class="list-group-item">Cras justo odio</li>
    <li class="list-group-item">Dapibus ac facilisis in</li>
    <li class="list-group-item">Morbi leo risus</li>
  </ul>
  <ul class="list-group">
    <li class="list-group-item">Porta ac consectetur ac</li>
    <li class="list-group-item">Vestibulum at eros</li>
  </ul>
  <ul class="list-group">
    <li class="list-group-item">Cras justo odio</li>
    <li class="list-group-item">Dapibus ac facilisis in</li>
    <li class="list-group-item">Morbi leo risus</li>
  </ul>
  <ul class="list-group">
    <li class="list-group-item">Porta ac consectetur ac</li>
    <li class="list-group-item">Vestibulum at eros</li>
  </ul>
  <ul class="list-group">
    <li class="list-group-item">Cras justo odio</li>
    <li class="list-group-item">Dapibus ac facilisis in</li>
    <li class="list-group-item">Morbi leo risus</li>
  </ul>
  <ul class="list-group">
    <li class="list-group-item">Porta ac consectetur ac</li>
    <li class="list-group-item">Vestibulum at eros</li>
  </ul>
</div>

Here it is on Bootply. 在 Firefox 中一切正常:前 3 个列表组位于第一列,接下来的 3 个位于第二列。但是在 Chrome 中,前 4 列在第一列中,而第二列非常短,只有 2 列。我怎样才能使其平衡?

(我还观察到the same question I linked to above 中描述的另一个问题,有时 Chrome 会在列下创建一个很大的边距,但稍后我将把它留给单独的问题。)

【问题讨论】:

都是column-fill: balance,chrome不支持,默认值为moz-column-fill -> developer.mozilla.org/en-US/docs/Web/CSS/column-fill。尝试为 POC 设置 moz-column-fill : auto .columns height : 400px; 似乎“解决”了 chrome 中的问题,但我相信您已经意识到这一点并想要一个真正的解决方案。 -moz-column-fill : auto 似乎将所有列表组放在一列中。那有意义吗?它仍然与将其拆分为 4 和 2 的 Chrome 不同。根据this,Chrome 应该默认平衡。看起来它可能是在努力平衡,但做得很糟糕? 你说得对,我想要一个“真正”的解决方案,否则我必须使用 JS 来动态估计应该是什么高度,因为我没有固定数量的列或列内固定数量的元素... 嘿@dumbmatter,第一个 - 不,这没有意义,这不是一个答案 - 这是列填充在 FF 上工作的概念证明(它响应,Chrome 或 IE 确实不是)。接下来,我认为您无法实现“真正的”解决方案,抱歉。如果您的列是动态的,则必须转到 javascript。顺便说一句,我认为这很奇怪,只有 FF(Mozilla 引擎)支持列填充。我看不出其他引擎不应该这样做的原因。它是(未确认的)标准的一部分。 【参考方案1】:

这可能是个愚蠢的问题,但你研究过 flexbox 吗?

.columns 
  display: flex;
  flex-flow: row wrap;
  align-items: stretch;
  -webkit-column-width: 200px;
     -moz-column-width: 200px;
          column-width: 200px;
  -webkit-column-gap: 20px;
     -moz-column-gap: 20px;
          column-gap: 20px;
  width: 600px;


.list-group 
  display: inline-block;
      width: 300px;

编辑查看未回答的问题,但不知道这有多大。

【讨论】:

旧问题仍然值得关注 :) 您的代码有效,但实际上我的问题中的原始代码现在似乎也适用于当前版本的 Chrome。我们生活在一个多么丰富的世界! 一开始我实际上是要这么说的,但后来想到,嘿,其他人可能出于某种原因在使用旧版本的 BS,为什么不呢!很高兴两个工作!

以上是关于Chrome 中不平衡的 CSS 列的主要内容,如果未能解决你的问题,请参考以下文章

CSS3颜色过渡在Chrome中不起作用

透明css在chrome中不起作用

SVG 元素的 CSS 动画在 Chrome 中不起作用

为啥这个 CSS3 动画在 Safari 和 Chrome 中不起作用?

CSS3 calc(100%-88px) 在 Chrome 中不起作用 [重复]

更改动画持续时间 CSS3 在 Chrome 中不起作用