You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js渲染电影列表时如何实现每4项自动换行展示

方案1:纯CSS布局实现(最优,无需修改JS逻辑)

你完全不需要拆分数组,直接给外层容器加CSS Grid布局就能实现一行固定4个、超出自动换行的效果,是目前成本最低的实现方式:

.MoviesContainer {
  display: grid;
  /* 一行固定放4个等宽的卡片 */
  grid-template-columns: repeat(4, 1fr);
  /* 卡片横向间距 */
  column-gap: 16px;
  /* 行间距 */
  row-gap: 24px;
}

如果更习惯用Flex布局也可以,写法如下:

.MoviesContainer {
  display: flex;
  flex-wrap: wrap;
  column-gap: 16px;
  row-gap: 24px;
}
.Movies {
  /* 减去间距的影响,保证一行刚好放4个 */
  width: calc(25% - 12px);
  box-sizing: border-box;
}

方案2:计算属性自动分组(适合需要对每行做单独样式/逻辑处理的场景)

如果你确实需要给每一行单独加容器、做特殊处理,也不用手动新建多个数组,写一个计算属性自动按4个一组拆分即可:

// 新增计算属性
computed: {
  groupedMovies() {
    const groupSize = 4
    const groups = []
    for (let i = 0; i < this.filteredMovies.length; i += groupSize) {
      groups.push(this.filteredMovies.slice(i, i + groupSize))
    }
    return groups
  }
}

对应模板调整为双层循环即可:

<div class="MoviesContainer">
  <div class="movieRow" v-for="(row, rowIdx) in groupedMovies" :key="rowIdx">
    <div class="Movies" v-for="(movie, idx) in row" :key="`${rowIdx}-${idx}`">
      <img class="image_img" :src="require('../assets/MoviesMap/' + movie.imgPath)">
      <div class="image_Overlay">
        <button @click="addedMovie">Add to Favorites</button>
        <p>Watch {{movie.MovieName}}</p>
      </div>
    </div>
  </div>
</div>

你附上的项目截图参考:
项目截图

内容的提问来源于stack exchange,提问作者GunZz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:45:00