【发布时间】:2019-01-16 16:34:33
【问题描述】:
我创建了一个仪表板解决方案,其中高度不断变化的对象堆叠在两列中。目标是将对象分布在列上,如下所示:
- 第一个对象在第一列的左上角
- 下一个对象低于该对象,除非没有足够的空间容纳对象的整个高度,如果对象不适合,则将其放在第二列中。
- 如果对象不适合第二列中的可用空间,则将对象分布在列上以实现高度相同的两列并使容器 div 可滚动。
对象没有固定的高度,一个对象可以在星期一为空,而在星期二占据整个左列。
我创建了以下内容:
<div id='container'>
<div id='columncontainer'>
<span id='span1'>Block1</span>
<span id='span2'>Block2</span>
<span id='span3'>Block3</span>
</div>
</div>
.
#container{
overflow-y: auto;
height: 300px;
width: 400px;
}
#columncontainer {
column-count: 2;
}
#columncontainer > span {
width: 100%;
display: inline-block;
}
#span1 {
height: 200px;
width: 200px;
}
#span2 {
height: 200px;
width: 200px;
}
#span3 {
height: 50px;
width: 200px;
}
我在此解决方案中遇到的问题在此处演示并出现在 Chrome 浏览器中: https://jsfiddle.net/3620qgvs/
在此示例中,列中的最后两个对象很容易适合第二列 (200+50=250
但是,前两个对象在第一列中呈现,而高度为 50px 的 #span2 具有第二列的整个 300px。
我确实想将对象放在一起,所以使用块而不是 inline-block 不是一个选项。 (这会将对象分成两列)
我尝试过的将对象放在(浮动)线或(弹性)网格上的实现都有同样的问题;如果左列中有两个高度较大的对象,则右列中的两个高度较小的对象之间会有很多垂直空白(此处演示的块 2 和 4 之间的空白:https://jsfiddle.net/3kd9r8ye/2/)。这就是我使用列计数的原因,因为它的功能类似于“float: down”(不存在)
任何解决方案或替代方法?
【问题讨论】:
-
附言。列之间的平衡似乎在 Firefox 和 Edge 中运行良好,而不是在 Chrome 中
-
Block1和Block2的span id='span1'相同 -
这是故意的。它们都应该有 200px 的高度,以便 Block2 将在第二列中呈现,因为 200+200 > 300px 的容器高度。
-
如果您希望两个块具有相同的高度,您可以使用
class而不是id。在 HTML DOM 中不能有重复的 id。在你的情况下,这实际上不是问题。 -
是的,感谢您指出这一点,我应该注意到这一点。但实际上,当使用类(我在我的生产代码中)时,问题仍然存在。
标签: html css google-chrome