(vant)使用精灵图和grid组件实现列表

本文介绍如何在Vue中实现网格布局,并使用精灵图优化图标加载,展示了一个包含多种功能区域的网格示例,包括爆料站、故事站等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue

<template>
  <div>
    <van-grid class="navicon mt-3" :column-num="4">
      <van-grid-item v-for="(item,index) in naviconList" :key="index">
        <i class="sprite" :class="item.activeClass"></i>
        <div class="mt-2">{{item.text}}</div>
      </van-grid-item>
    </van-grid>
  </div>
</template>

<script>
export default {
  data() {
    return {
      naviconList: [
        {
          activeClass:'sprite-news',
          text:'爆料站'
        },
        {
          activeClass:'sprite-stories',
          text:'故事站'
        },
        {
          activeClass:'sprite-mall',
          text:'周边商城'
        },
        {
          activeClass:'sprite-server',
          text:'体验服'
        },
        {
          activeClass:'sprite-rookie',
          text:'新人专区'
        },
        {
          activeClass:'sprite-honour',
          text:'荣耀·传承'
        },
        {
          activeClass:'sprite-wz',
          text:'王者营地'
        },
        {
          activeClass:'sprite-public',
          text:'公众号'
        },
      ]
    }
  },

}

</script>

<style>
</style>

scss

.sprite {
  background: url(../images/index.png) no-repeat 0 0; //0 0左上角对齐 750*910
  background-size:28.8462rem 35rem ; //375px
  display: inline-block; //i标签使用精灵图要设置
  &.sprite-news{
    width: 2.6154rem;
    height: 1.5385rem;
    background-position: 63.546% 15.517%; //用百分数
  }
  &.sprite-stories{
    width: 3.5385rem;
    height: 1.5385rem;
    background-position: 93.483% 15.614%; //用百分数
  }
  &.sprite-mall{
    width: 1.4615rem;
    height: 1.6923rem;
    background-position: 36.746% 0.924%; //用百分数
  }
  &.sprite-server{
    width: 1.5385rem;
    height: 1.5385rem;
    background-position: 10.408% 15.517%; //用百分数
  }
  &.sprite-rookie{
    width: 1.5385rem;
    height: 1.6154rem;
    background-position: 89.733% 1.266%; //用百分数
  }
  &.sprite-honour{
    width: 1.8462rem;
    height:1.5385rem;
    background-position: 36.467% 15.287%; //用百分数
  }
  &.sprite-wz{
    width: 1.8462rem;
    height: 1.8462rem;
    background-position: 63.3% 0.927%; //用百分数
  }
  &.sprite-public{
    width: 1.8462rem;
    height: 1.5385rem;
    background-position: 0 96.207%; //用百分数
  }

  &.sprite-arrow{
    width: 0.7692rem;
    height: 0.7692rem;
    background-position: 38.577% 52.076%; //用百分数
  }

}

效果:
在这里插入图片描述

<think>我们使用VantGrid组件实现2行3列的网格布局,每格包含图片文字。步骤:1.引入Grid组件(包括GridGridItem)。2.使用`<van-grid>`作为容器,设置`column-num`为3(每行3列)。3.在`<van-grid>`内使用6个`<van-grid-item>`(因为2行3列共6个格子)。4.每个`<van-grid-item>`内部放置图片文字。注意:VantGrid默认是流式布局,当超过一行时会自动换行,所以我们直接放6个GridItem就会自动变成2行3列。示例代码如下:我们假设每个格子中放置一个图标(使用Vant的Icon组件一段文字。注意:这里我们使用Vant的Icon组件作为图片占位,你也可以替换为`<img>`标签。另外,VantGrid默认有间距(gutter),可以根据需要调整。代码示例:```html<van-grid:column-num="3"><van-grid-item><van-imagesrc="https://img.yzcdn.cn/vant/apple-1.jpg"/><span>文字1</span></van-grid-item><van-grid-item><van-imagesrc="https://img.yzcdn.cn/vant/apple-2.jpg"/><span>文字2</span></van-grid-item><van-grid-item><van-imagesrc="https://img.yzcdn.cn/vant/apple-3.jpg"/><span>文字3</span></van-grid-item><van-grid-item><van-imagesrc="https://img.yzcdn.cn/vant/apple-1.jpg"/><span>文字4</span></van-grid-item><van-grid-item><van-imagesrc="https://img.yzcdn.cn/vant/apple-2.jpg"/><span>文字5</span></van-grid-item><van-grid-item><van-imagesrc="https://img.yzcdn.cn/vant/apple-3.jpg"/><span>文字6</span></van-grid-item></van-grid>```说明:-我们使用`<van-image>`来显示图片,你也可以使用普通的`<img>`标签。-每个`<van-grid-item>`内放置一个图片一段文字,这样每个格子就都有图片文字了。-如果需要调整图片大小,可以设置`<van-image>`的宽度高度,例如:`<van-imagewidth="50"height="50".../>`。如果你希望使用自定义的图标(比如使用Vant的Icon组件),可以这样:```html<van-grid:column-num="3"><van-grid-item><van-iconname="home"size="large"/><span>首页</span></van-grid-item><!--其他类似--></van-grid>```根据需求选择图片或图标。另外,VantGridItem还提供了`icon``text`属性,可以直接设置(但这样设置的话,图片只能是图标,且文字只能是一行)。所以如果需要自定义内容(比如多行文字或自定义图片),建议在GridItem内部直接写内容。所以,我们采用在GridItem内部自由编写内容的方式。总结:按照上述方式,就可以实现2行3列的网格布局,每个格子包含图片文字。注意:如果图片尺寸不一致,可能会导致格子高度不一致。可以通过CSS统一图片大小,或者设置格子的高度。例如,为图片设置固定宽高:```css.van-grid-item__contentimg{width:50px;height:50px;object-fit:cover;}```或者直接使用VantImage组件设置宽高。这样就能保证布局整齐。希望这个回答能帮到你!</think>要使用 Vant Grid 组件实现 2行3列带图片文字的网格布局,请按照以下步骤操作: ### 解决方案 1. **引入 Grid 组件** ```html <van-grid :gutter="10" :column-num="3"> <!-- 6个格子 (2行x3列) --> </van-grid> ``` - `:column-num="3"` 设置每行3列 - `:gutter="10"` 设置网格间距(可选) 2. **添加网格项** ```html <van-grid :gutter="10" :column-num="3" :border="false"> <!-- 取消边框 --> <!-- 第1行 --> <van-grid-item v-for="index in 6" :key="index"> <van-image src="https://img.yzcdn.cn/vant/cat.jpeg" width="60" height="60" /> <span class="text">文字{{ index }}</span> </van-grid-item> </van-grid> ``` 3. **添加样式优化** ```css /* 文字样式 */ .text { margin-top: 8px; font-size: 14px; } /* 图片圆角 */ .van-image { border-radius: 8px; } ``` ### 完整示例 ```html <template> <van-grid :gutter="15" :column-num="3"> <van-grid-item v-for="item in items" :key="item.id"> <van-image :src="item.img" width="70" height="70" /> <div class="text">{{ item.text }}</div> </van-grid-item> </van-grid> </template> <script> export default { data() { return { items: [ { id: 1, img: 'path/to/img1.jpg', text: '功能1' }, { id: 2, img: 'path/to/img2.jpg', text: '功能2' }, { id: 3, img: 'path/to/img3.jpg', text: '功能3' }, { id: 4, img: 'path/to/img4.jpg', text: '功能4' }, { id: 5, img: 'path/to/img5.jpg', text: '功能5' }, { id: 6, img: 'path/to/img6.jpg', text: '功能6' } ] } } } </script> <style scoped> .text { margin-top: 10px; font-size: 13px; color: #333; } </style> ``` ### 关键特性说明 1. **自动换行**:当超过3列时会自动换行,无需额外设置 2. **响应式**:默认支持响应式布局 3. **自定义内容**:可在`<van-grid-item>`内自由添加图片/文字/图标 4. **间距控制**:通过`gutter`属性调整间距 ### 效果 将生成如下布局: ``` [图片+文字1] [图片+文字2] [图片+文字3] [图片+文字4] [图片+文字5] [图片+文字6] ``` ### 注意事项 - 图片路径可使用在线URL或本地路径 - 通过`width`/`height`控制图片尺寸 - 使用`v-for`循环可避免重复代码 - 需要安装Vant组件库:`npm install vant`
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值