插件窝 干货文章 如何用CSS实现固定宽度、高度自适应的四列瀑布流布局,并优先保证第一列最高?

如何用CSS实现固定宽度、高度自适应的四列瀑布流布局,并优先保证第一列最高?

item 高度 div 布局 652    来源:    2025-03-19

要实现一个固定宽度、高度自适应的四列瀑布流布局,并且优先保证第一列最高,可以使用CSS的column属性结合flexboxgrid布局来实现。以下是一个使用flexbox的解决方案:

HTML结构

<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>

CSS样式

.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;
}

解释

  1. display: flexflex-direction: column:将容器设置为一个垂直方向的flex容器,这样item会从上到下排列。
  2. flex-wrap: wrap:允许内容在容器高度不足时换列。
  3. column-count: 4:将内容分为四列。
  4. column-gap: 10px:设置列之间的间距。
  5. break-inside: avoid:防止item被分割到不同的列。
  6. order 属性:通过order属性确保第一列的item优先排列,从而保证第一列最高。

注意事项

  • 这种方法适用于item高度不固定的情况,item会根据内容自适应高度。
  • 如果item高度固定,可以考虑使用grid布局来实现更精确的控制。

使用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高度是其他列的两倍,从而优先保证第一列最高。

根据你的具体需求,可以选择适合的布局方式。