前文手写了TabBar的样式和功能,本篇我们用vant库重新实现这些功能。
Vant4 官方文档
安装:
npm i vant
引入组件:
写个button试试:
说明引入成功。
注:这种引入组件的方式是:要用什么就注册什么,比较麻烦。本来用的是插件的方式,但它一直报错,博主想着这个项目的目的只是锻炼一下前端水平,重点不在怎么用vant,于是换了这种方式。
按文档方式引入组件:
显然我们要自定义图标,把它的代码复制一下,并了解它的功能:
为实现自己的目标,将UI库的代码改一下:
{{item.text}}![]()
效果:
显然有如下问题:
F12一下,看看主题颜色怎么设置的,可以得知是--van-tabbar-item-active-color
设置的主题颜色:
显然本项目的主题颜色是橙色,且一致,所以我们可以直接在common.css中自己设置--van-tabbar-item-active-color
的值。也可以直接修改样式color。这里我们用后者。
前者代码:直接写无法显示,要用!important
覆盖一下。
:root {--van-tabbar-item-active-color: #ff9854 !important;
}
后者代码:
看一下文档,得知此功能已经被封装(一般都会封装):要放在van-tabbar中。
F12一下看看为什么icon这么小:
是这个.van-tabbar-item__icon img
的height
设置成了20px,这是库写好的样式。我们要修改它。
修改库的样式一般有四种方法:
:deep
(子组件中元素的选择器) {}来自修改第三方UI组件库的样式(如element-plus或者vant)
这里我们用第四种方法。
这里直接修改.van-tabbar-item__icon
的样式无效,原因:
scoped
表示这里的css是局部的,只在本文件中生效。
本文件template中没有.van-tabbar-item,若是直接重写.van-tabbar-item的样式不会生效 。
解决方法:
本template中没有.van-tabbar-item,但本文件用的子组件中有。使用:deep()
,令写在其中的子组件 样式生效。
代码:
:deep(.van-tabbar-item) {height: 50px;img{height: 30px;}
}
效果:
再看一下文档:库为我们封装好了路由跳转的功能。
注意to是TabbarItem的属性。
代码:
完全一致。
将不用库的代码保存到copy中。
用库果然代码简洁多了。
{{ item.text }}![]()
import { createApp } from 'vue'
import App from './App.vue'
import "normalize.css"
import './assets/css/index.css'
import router from './router'
import pinia from './store'// 以下是添加和修改的部分// 引入vant组件
import { Button } from 'vant';
import { Tabbar, TabbarItem } from 'vant';
// 引入组件样式
import 'vant/lib/index.css';const app = createApp(App)app.use(router).use(pinia)
app.use(Button).use(Tabbar).use(TabbarItem)app.mount('#app')