vue3+ElementPlus之CSS深度访问-deep
前言
这段时间开始上手vue3,个中滋味不足为外人道也🙃🙃🙃。由option API 转为 composition API,以及TS,怎么感觉那么别扭呢😂😂😂。当然vue3和vue2的区别不在本文讨论之列,有兴趣的可以去官网仔细学习研究一下🔥🔥🔥官方文档
😝😝😝 回归正题:下文我们来解决在vue3下,使用element plus后所遇到问题: 1、css重置无效问题 2、element plus icon图标引用无效问题 😝😝😝
一、demo环境
vue:3.2.25 vue-router:4 element-plus:2.0.1 element-plus/icons-vue:1.0.0 vite:2.7.2
二、问题1-重置element plus css无效
说明:本人最开始也查了一些资料,发现的解决方法大概有以下两种:
- 去除style的 scoped, 使其变成全局样式
- 单独创建css文件,然后在import 导入
这两种方式,要么会污染全局css;要么就是在后期会让css变得臃肿且难麻烦。 结合上述方法,再加上本人的一次次尝试,可以使用以下方式解决css的生效目标,大家可以参考
<template>
<el-container class="layout-container">
<el-header>
<el-menu
:default-active="activeIndex"
class="el-menu-demo"
mode="horizontal"
>
<el-sub-menu index="1" popper-class="head-sub-menu" :popper-append-to-body="false">
<template #title>menu1</template>
<el-menu-item index="1-1">menu1-1</el-menu-item>
<el-menu-item index="1-2">menu1-2</el-menu-item>
</el-sub-menu>
</el-menu>
</el-header>
</el-container>
</template>
<script setup lang="ts"></script>
<style lang="scss" scoped>
:deep(.head-sub-menu) {
border: 1px solid red !important;
.el-menu--popup {
min-width: 100px;
}
}
</style>
三、问题2-引入icon无效
说明:element-plus的 Font Icon被弃用,转为 SVG Icon。有以下两种方式:按需引入 全局引入
1、element-plus Icon需要另外安装
$ npm install @element-plus/icons-vue
$ yarn add @element-plus/icons-vue
$ pnpm install @element-plus/icons-vue
2、按需引入
<template>
<div>
<el-icon color="#409EFC" size="small">
<Search />
</el-icon>
</div>
</template>
<script setup lang="ts">
import { Search } from '@element-plus/icons'
</script>
<style lang="scss" scoped></style>
3、全局引入
import * as Icons from '@element-plus/icons-vue'
const app = createApp(App)
Object.keys(Icons).forEach(key => {
app.component(key, Icons[key])
})
app.use(router).use(ElementPlus, {locale: zhCn})
app.mount('#app')
<template>
<div>
<el-input placeholder="搜索..." @focus="searchFocus">
<template #suffix>
<el-icon><search /></el-icon>
</template>
</el-input>
</div>
</template>
<script setup lang="ts"></script>
<style lang="scss" scoped></style>
|