需求改为红色
background-color: red;
}
1. 第一种
把上面的scoped去掉
优点: 修改简便
缺点: 把scoped去掉了,就变成全局css了,可能会影响其他组件
2. 第二种
就是去 node_modules裡面把 element-ui 整包 CSS 给抓出来,然后放到自己指定的路径!
这是 element-ui 的 CSS 在node_modules裡面的位置
// 原本的路径 (就不要用 node_modules 这包)
import ‘element-ui/lib/theme-chalk/index.css’;
// 自己抓下来后指定的路径 (改成自己抓下来这包)
import ‘./scss/theme-chalk/index.css’;
然后这样就可以去修改自己抓下来这包,就可以改 element-ui 的 CSS 了。
优点:可以不会去跟其他 class 互相影响到,还有不是透过覆盖,是透过直接修改,这样整包的主导权就会在自己手上!
缺点:要花点时间去看完整包CSS架构,还有就是说如果 element-ui 有升级的话,对于自己抓下来修改CSS的部分可能会有问题,所以这方面可能要评估一下。
3. 第三种
我个人觉得比较好得做法,不用把整个CSS包抓出改,也可以使用scoped的方式来写CSS,其实可以使用 深度作用选择器 来实作。
如果希望 scoped 样式中的一个选择器能够更深入权重,例如影响子组件,你可以使用 >>>加深操作权重。
这个代码会编译成
.a[data-v-f3f3eg9] .b { /* ... */ }
像 Sass 无法正确解析 >>>。这种情况下你可以使用 /deep/符号取代,这是>>>的别名,同样可以正常编译。
我们回来看看我完成修改的画面!
我的阶层是 .el-main > .el-input > .el-input__inner,所以我这样写
.el-input__inner 就是我最后要修改的 input,所以我最后使用了 /deep/去修改他的CSS样式,是不是很简单。
优点:可以不用一定要element-ui整包CSS抓出来放到自己的专案资料夹裡面去修改,还可以在vue的组件裡面使用scoped让你的CSS可以组件化,不要去改到原本element-ui的程式码,我个人比较喜欢这样的做法。
缺点: 这样就是透过覆盖的方式来去覆写 element-ui 的 CSS,效能的部分有待验证,不过比起把整包 CSS 抓出来修改还要去担心会不会因为升级或是改坏那包CSS的风险跟时间成本比起来,我觉得还好啦!
关于深度作用选择器的相关内容可以参考 vue-loader 的文件裡面就有提到。