vue实现横向展示列表
Vue 实现横向展示列表的方法
使用 CSS Flexbox 布局
在 Vue 组件中,通过 CSS Flexbox 可以轻松实现横向列表布局。以下是一个示例:
<template>
<div class="horizontal-list">
<div v-for="item in items" :key="item.id" class="list-item">
{{ item.text }}
</div>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, text: 'Item 1' },
{ id: 2, text: 'Item 2' },
{ id: 3, text: 'Item 3' }
]
}
}
}
</script>
<style scoped>
.horizontal-list {
display: flex;
overflow-x: auto;
gap: 10px;
padding: 10px;
}
.list-item {
flex: 0 0 auto;
padding: 20px;
background: #f0f0f0;
border-radius: 4px;
}
</style>
使用 CSS Grid 布局
CSS Grid 也适用于创建横向列表,特别是需要更复杂的布局时:

<template>
<div class="grid-list">
<div v-for="item in items" :key="item.id" class="grid-item">
{{ item.text }}
</div>
</div>
</template>
<style scoped>
.grid-list {
display: grid;
grid-auto-flow: column;
grid-auto-columns: minmax(100px, 1fr);
gap: 10px;
overflow-x: auto;
padding: 10px;
}
.grid-item {
padding: 20px;
background: #f0f0f0;
border-radius: 4px;
}
</style>
使用第三方库
对于更复杂的横向滚动需求,可以考虑使用第三方库如 vue-horizontal:

npm install vue-horizontal
<template>
<vue-horizontal>
<div v-for="item in items" :key="item.id" class="item">
{{ item.text }}
</div>
</vue-horizontal>
</template>
<script>
import VueHorizontal from 'vue-horizontal'
export default {
components: { VueHorizontal },
data() {
return {
items: [
{ id: 1, text: 'Item 1' },
{ id: 2, text: 'Item 2' },
{ id: 3, text: 'Item 3' }
]
}
}
}
</script>
<style scoped>
.item {
padding: 20px;
background: #f0f0f0;
margin: 0 10px;
border-radius: 4px;
}
</style>
响应式设计考虑
为了在不同屏幕尺寸下保持良好的显示效果,可以添加媒体查询:
@media (max-width: 768px) {
.horizontal-list {
gap: 5px;
padding: 5px;
}
.list-item {
padding: 10px;
}
}
性能优化
对于大型列表,建议使用虚拟滚动技术(如 vue-virtual-scroller)来优化性能:
npm install vue-virtual-scroller
<template>
<RecycleScroller
class="scroller"
:items="items"
:item-size="100"
direction="horizontal"
>
<template v-slot="{ item }">
<div class="item">
{{ item.text }}
</div>
</template>
</RecycleScroller>
</template>
<script>
import { RecycleScroller } from 'vue-virtual-scroller'
export default {
components: { RecycleScroller },
data() {
return {
items: Array(1000).fill().map((_, i) => ({ id: i, text: `Item ${i}` }))
}
}
}
</script>
<style scoped>
.scroller {
display: flex;
height: 100px;
}
.item {
width: 100px;
padding: 20px;
background: #f0f0f0;
margin-right: 10px;
border-radius: 4px;
}
</style>
以上方法提供了多种实现横向列表的方式,可以根据项目需求选择最适合的方案。






