Chrome 中的 CSS3 列具有 child DIV 个元素

CSS3 columns in Chrome with child DIV elements

我在使用 CSS3 列时遇到问题,它们不像我在 Chrome 53.0.2785 中预期的那样工作 - 它们在 Firefox 49、IE11 中像我预期的那样工作, 边缘 38.14393

我的 "container" DIV 的前两个 child DIV 在 Chrome 中显示在彼此下方,但在 Firefox

HTML:

<div class="container">
  <div>
    Some content 1
  </div>
  <div>
    Some content 2
  </div>
</div>

CSS:

* {
  box-sizing: border-box;
}
.container {
  column-width: 100px;
  column-gap: 12px;
}
.container > div {
  display: inline-block;
  width: 100px;
  border: 1px solid black;
  padding: 20px;
}

在这里测试:https://jsfiddle.net/s7cfbqzt/3/

现在,Chrome 中发生了一些奇怪的事情:

如果我加第三个childDIV

<div>Some content 3</div>

会有Chrome中的列,但显示为

1..3
2

第四个 DIV 将显示在 DIV3 下方,第五个 DIV 再次显示在第一个 "row" 中。

1..3..5
2..4

这是 Chrome 中的错误还是我做错了什么?

您可以通过在容器内浮动 div 来实现此目的,您还需要浮动它们的容器,否则它们将无法正确显示。

* {
  box-sizing: border-box;
}
.container {
  column-width: 100px;
  column-gap: 12px;
float: left;
}
.container > div {
  display: inline-block;
  width: 100px;
  border: 1px solid black;
  padding: 20px;
float: left;
}

编辑:

然后我不使用 column-gap,而是将 margin left 应用到容器内的每个 divs。像这样;

.container {
    width: 100%;
    float: left;
    }
    .container > div {
      width: 100px;
      border: 1px solid black;
      padding: 20px;
    float: left;
margin-left: 12px;
    }
.container > div:first-child {
margin-left: 0;
}

编辑:

如果高度不需要匹配 - 从容器中删除列宽 div。见 https://jsfiddle.net/0sz6t3ft/1/

Chrome 实际上可能是正确执行此操作的浏览器:

https://drafts.csswg.org/css-break/#widows-orphans

Name:   orphans, widows
Value:  <integer>
Initial:    2

IE 11、EDGE 和 Firefox (49)(还?)不支持寡妇和孤儿,即使 http://caniuse.com/#feat=css-widows-orphans claims that IE11 and EDGE do support it - see https://jsfiddle.net/s7cfbqzt/13/ 在 IE11 和 EDGE 中也是如此。如果 IE 和 EDGE 真的支持它,他们会将初始值设置为 1 而不是 2。

针对我的用例的修复是添加

orphans: 1;
widows: 1;

到容器-class in CSS.

感谢@Jay 花时间研究这个问题!