关键点
通过grid-row 控制每一个item 的大小
- 相对之前的flex,和column实现瀑布流布局,grid是静态的。
附上之前实现瀑布流的链接
代码
html
<div class="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
scss
// 实现瀑布流
.container {
height: 100vh;
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(8, 1fr);
}
.item {
&:nth-child(1) {
grid-column: 1;
grid-row: 1/3;
}
&:nth-child(2) {
grid-column: 2;
grid-row: 1/4;
}
&:nth-child(3) {
grid-column: 3;
grid-row: 1;
}
&:nth-child(4) {
grid-column: 4;
grid-row: 1/3;
}
// ...类似
//
// 生成大小不一的子元素
$count: 10;
@function randomNum($max, $min: 0, $u: 1) {
@return ($min + random($max)) * $u;
}
@function randomColor() {
@return rgb(randomNum(255), randomNum(255), randomNum(255));
}
@for $i from 1 to $count + 1 {
.item:nth-child(#{$i}) {
position: relative;
background-color: randomColor();
margin: 0.5vw;
&::after {
content: "#{$i}";
position: absolute;
color: #fff;
font-size: 2vw;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
}
}