要实现一个固定宽度、高度自适应的四列瀑布流布局,并且优先保证第一列最高,可以使用CSS的column
属性结合flexbox
或grid
布局来实现。以下是一个使用flexbox
的解决方案:
<div class="masonry">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<!-- 更多 item -->
</div>
.masonry {
display: flex;
flex-direction: column;
flex-wrap: wrap;
height: 100vh; /* 设置一个高度,确保内容可以换列 */
column-count: 4; /* 四列布局 */
column-gap: 10px; /* 列之间的间距 */
}
.item {
width: 100%; /* 每个item的宽度固定 */
margin-bottom: 10px; /* item之间的间距 */
break-inside: avoid; /* 防止item被分割到不同的列 */
background-color: #f0f0f0;
padding: 10px;
box-sizing: border-box;
}
/* 确保第一列最高 */
.item:nth-child(4n+1) {
order: 1;
}
.item:nth-child(4n+2) {
order: 2;
}
.item:nth-child(4n+3) {
order: 3;
}
.item:nth-child(4n+4) {
order: 4;
}
display: flex
和 flex-direction: column
:将容器设置为一个垂直方向的flex容器,这样item会从上到下排列。flex-wrap: wrap
:允许内容在容器高度不足时换列。column-count: 4
:将内容分为四列。column-gap: 10px
:设置列之间的间距。break-inside: avoid
:防止item被分割到不同的列。order
属性:通过order
属性确保第一列的item优先排列,从而保证第一列最高。grid
布局来实现更精确的控制。如果你更倾向于使用grid
布局,可以参考以下代码:
.masonry {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
}
.item {
background-color: #f0f0f0;
padding: 10px;
box-sizing: border-box;
}
/* 确保第一列最高 */
.item:nth-child(4n+1) {
grid-row: span 2; /* 假设第一列的item高度是其他列的两倍 */
}
这种方法通过grid-row: span 2
来确保第一列的item高度是其他列的两倍,从而优先保证第一列最高。
根据你的具体需求,可以选择适合的布局方式。