【发布时间】:2018-02-17 07:41:15
【问题描述】:
假设我有以下 HTML 代码。
<div class='container'>
<div style='width: 50px; height: random' class='col1'>1</div>
<div style='width: 50px; height: random' class='col3'>2</div>
<div style='width: 50px; height: random' class='col2'>3</div>
<div style='width: 50px; height: random' class='col3'>4</div>
<div style='width: 50px; height: random' class='col1'>5</div>
<div style='width: 50px; height: random' class='col2'>6</div>
<div style='width: 50px; height: random' class='col1'>7</div>
<div style='width: 50px; height: random' class='col3'>8</div>
<div style='width: 50px; height: random' class='col2'>9</div>
</div>
<!-
|1| |3| |2| // height of 2 is greater
|5| |6| | | // height of 5 is greater
| | |9| |4| // height of 9 is greater
|7| | | |8|
->
我希望container 有 3 列。我还希望每个孩子都根据其班级分类到其中一个列中。显然,用 JavaScript 很容易做到这一点,但我想知道是否可以用 CSS 做到这一点。
.grid {
-webkit-column-count: 3;
-webkit-column-gap: 10px;
-webkit-column-fill: auto;
-moz-column-count: 3;
-moz-column-gap: 10px;
-moz-column-fill: auto;
column-count: 4;
column-gap: 15px;
column-fill: auto;
}
.block {
background-color: #ee01ca;
display: block;
padding: 20px;
word-wrap: break-word;
margin-bottom: 20px;
-webkit-column-break-inside: avoid;
-moz-column-break-inside: avoid;
column-break-inside: avoid;
}
.one {
height: 100px;
}
.two {
height: 200px;
}
.three {
height: 300px;
}
<div class="grid">
<div class="block one">ervewrv</div>
<div class="block two">afrvewrwerb</div>
<div class="block three">dfvdsf</div>
<div class="block one">vdfvdf</div>
<div class="block two">dfw45g4</div>
<div class="block one">ervewrv</div>
<div class="block two">afrvewrwerb</div>
<div class="block three">dfvdsf</div>
<div class="block one">vdfvdf</div>
<div class="block two">dfw45g4</div>
<div class="block three">4rv4r</div>
<div class="block one">4rv454</div>
<div class="block three">4rv4r</div>
<div class="block one">4rv454</div>
<div class="block one">ervewrv</div>
<div class="block one">ervewrv</div>
<div class="block two">afrvewrwerb</div>
<div class="block three">dfvdsf</div>
<div class="block one">vdfvdf</div>
<div class="block two">dfw45g4</div>
<div class="block three">4rv4r</div>
<div class="block one">4rv454</div>
<div class="block one">ervewrv</div>
<div class="block two">afrvewrwerb</div>
<div class="block three">dfvdsf</div>
<div class="block one">vdfvdf</div>
<div class="block two">dfw45g4</div>
<div class="block three">4rv4r</div>
<div class="block one">4rv454</div>
<div class="block two">afrvewrwerb</div>
<div class="block three">dfvdsf</div>
<div class="block one">vdfvdf</div>
<div class="block two">dfw45g4</div>
<div class="block one">ervewrv</div>
<div class="block two">afrvewrwerb</div>
<div class="block three">dfvdsf</div>
<div class="block one">vdfvdf</div>
<div class="block two">dfw45g4</div>
<div class="block three">4rv4r</div>
<div class="block one">4rv454</div>
<div class="block three">4rv4r</div>
<div class="block one">4rv454</div>
</div>
这与我所追求的效果相似,只是我需要从左到右进行排序。所以在这个例子中,ervewrv 应该在afrvewrwerb 的左边。
【问题讨论】:
-
一切都是随机的?元素个数,高度,?
-
孩子的数量随着每个孩子的身高而变化。高度有一个最大值,但我认为这不会改变任何东西。
-
不确定你是否能找到一个纯 CSS 的解决方案 .. 但你可以检查 flex 和 order 属性......至少你可以重新设计你的元素然后你必须找到如何设置列
-
是的,我之前正在研究,但在那里找不到解决方案。
标签: css css-multicolumn-layout