ElementUI组件出现大量重复样式

情况

点进去,是一个style标签,里面有六万多行样式 进去使用正则查找,发现有11处一模一样的样式

复制代码
^.el-textarea__inner \{

过程

经过简单排查,发现问题在于element-variables.scss这个文件中,我框选的这一条代码。

但是把它注释掉,样式就没了,因为项目引入样式的方式是scss。

于是乎去查看官方文档,确实没啥问题。

于是我起了一个新的vue2+element-ui+scss项目,用同样的方式引入。

结果发现,是一样的,也有重复的样式说明这是Element的问题。

原因

element官方的scss文件中重复定义了样式 比如我引入以下样式 可以发现有两个重复样式

解决方法

Element早已停更,假如你不是迫不得已,应该停止使用这个UI库。

以下的所有方法都并不是一种优雅的解决方式,但是他们可以解决当前的问题。

解决方法来自github,但是位于以下文章的引用让我发现这个问题。

vue.js - ElementUI重复引入样式问题 - 学习前端历程 - SegmentFault 思否\] ([segmentfault.com/a/119000002...](https://link.juejin.cn?target=https%3A%2F%2Fsegmentfault.com%2Fa%2F1190000022495821 "https://segmentfault.com/a/1190000022495821")) 令人遗憾的是,这篇文章里的方法根本不起作用。 ### postcss的cssnano(推荐) [github.com/ElemeFE/ele...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2FElemeFE%2Felement%2Fissues%2F11817%23issuecomment-588127007 "https://github.com/ElemeFE/element/issues/11817#issuecomment-588127007") 你只需要创建`postcss.config.js`文件,添加`cssnano: {}`即可去掉重复的样式。 ```js // postcss.config.js module.exports = { plugins: { autoprefixer: {}, cssnano: {} }, }; ``` ### fast-sass-loader(不推荐) > 更换依赖为项目引入了额外的复杂性,所以这并不是推荐的方法 核心在于chainWebpack的配置,代码来自如下链接。 [github.com/yibn2008/fa...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fyibn2008%2Ffast-sass-loader%2Fissues%2F50%23issuecomment-468605882 "https://github.com/yibn2008/fast-sass-loader/issues/50#issuecomment-468605882") 忽略下面的注释,这是我之前做的尝试。 ```js const { defineConfig } = require('@vue/cli-service') module.exports = defineConfig({ transpileDependencies: true, chainWebpack: (config) => { config.module.rules.delete('scss') let scssRule = config.module.rule('scss') .test(/\.scss$/); [ { name: 'vue-style-loader' }, { name: 'css-loader' }, { name: 'postcss-loader' }, { name: 'fast-sass-loader' } ].forEach((load) => { scssRule .use(load.name) .loader(load.loader || load.name) .options(load.options || {}) }) }, // configureWebpack: { // module: { // rules: [ // { // test: /\.(scss|sass)$/, // use: [ // 'css-loader', // { // loader: 'fast-sass-loader', // options: { // // includePaths: [... ] // } // } // ] // }, // // other loaders ... // ] // } // } }) ``` fast-sass-loader解决了这个问题,但是官方并没有给出vue-cli中的合理使用方式。 我找了很久如何在vue中使用这个东西。 当我直接修改vue中的webpack配置,卸载了`sass-loader`,完全没有作用。 包括github issue中有部分人也尝试使用这个工具,他们的配置也失败了,说明这不是个例。 ![image.png](https://oss.xyyzone.com/jishuzhan/article/1997244546003042305/cb1166cf05a15cc699a19f5a4a8839c6.webp) ### 编译出css避开问题(不推荐) 假如我要新加一个scss变量呢? 不推荐这种削足适履的方式 > 我没有尝试这种方式,但这种方式在原理上是可行的,因为他完全避开了问题,当使用css文件时,就不会编译,自然也就不会引发重复样式的问题。 [github.com/ElemeFE/ele...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2FElemeFE%2Felement%2Fissues%2F11817%23issuecomment-706243188 "https://github.com/ElemeFE/element/issues/11817#issuecomment-706243188") [github.com/ElemeFE/ele...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2FElemeFE%2Felement%2Fissues%2F11817%23issuecomment-2789581274 "https://github.com/ElemeFE/element/issues/11817#issuecomment-2789581274") ## 总结 如果可以,我真不想用vue2和element。

相关推荐
Mr Xu_16 小时前
告别冗长 switch-case:Vue 项目中基于映射表的优雅路由数据匹配方案
前端·javascript·vue.js
前端摸鱼匠16 小时前
Vue 3 的toRefs保持响应性:讲解toRefs在解构响应式对象时的作用
前端·javascript·vue.js·前端框架·ecmascript
未来之窗软件服务18 小时前
未来之窗昭和仙君(六十五)Vue与跨地区多部门开发—东方仙盟练气
前端·javascript·vue.js·仙盟创梦ide·东方仙盟·昭和仙君
phltxy19 小时前
Vue 核心特性实战指南:指令、样式绑定、计算属性与侦听器
前端·javascript·vue.js
Byron070720 小时前
Vue 中使用 Tiptap 富文本编辑器的完整指南
前端·javascript·vue.js
Byron070721 小时前
从 0 到 1 搭建 Vue 前端工程化体系:提效、提质、降本实战落地
前端·javascript·vue.js
zhengfei6111 天前
【AI平台】- 基于大模型的知识库与知识图谱智能体开发平台
vue.js·语言模型·langchain·知识图谱·多分类
徐小夕@趣谈前端1 天前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
董世昌411 天前
深度解析浅拷贝与深拷贝:底层逻辑、实现方式及实战避坑
前端·javascript·vue.js
扶苏10021 天前
vue使用event.dataTransfer实现A容器数据拖拽复制到到B容器
前端·vue.js·chrome