Я создал решение для панели мониторинга, в котором объекты с постоянно меняющейся высотой располагаются в два столбца. Цель состоит в том, чтобы распределить объекты по столбцам следующим образом:
- Первый объект идет вверху слева в первом столбце
- Следующий объект располагается ниже этого объекта, если только на нем недостаточно места, чтобы поместиться на всю высоту объекта, если объект не помещается, поместите его во второй столбец.
- Если объект не помещается в свободное пространство во втором столбце, распределите объекты по столбцам, чтобы получить два столбца одинаковой высоты и сделать прокрутку контейнера 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 <300). </p>
Однако первые два объекта отображаются в первом столбце, и # span2 высотой 50px имеет все 300px второго столбца для себя.
Я хочу сохранить объекты вместе, поэтому использование блока вместо встроенного блока не вариант. (Это разбивает объекты на две колонки)
Мои реализации, в которых я пробовал размещать объекты на (плавающих) линиях или (гибких) сетках, имели одну и ту же проблему; если в левом столбце есть два объекта большой высоты, два объекта небольшой высоты в правом столбце будут иметь много вертикальных пробелов между ними (пробел между блоками 2 и 4 показан здесь: https://jsfiddle.net/3kd9r8ye/2/). Thats почему я использую счетчик столбцов, так как он будет работать как «float: down» (которого не существует)
Какие-нибудь решения или альтернативные подходы?