vue 修改第三方样式库并不影响别的页面
原文链接 https://vue-loader-v14.vuejs.org/zh-cn/features/scoped-css.html?q=
以下介绍比较啰嗦,大家如果不想看可以直接跳到官方文档↑↑↑
1.需要场景
当 在vue中 style 标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素,防止样式的全局污染,尤其是在我们引用第三方库的,可能它们没有达到我们的要求,我们需要去修改第三方的样式,如果我们不加scoped的时候可能在别的页面也会修改我们的样式。
2.解决方案
-
方法1(需要大量修改样式):
我们知道在一个vue的页面中,可以使用多个style标签来设置多个样式,我们将第一个样式设置为scoped,然后在写一个样式来使用修改第三方的样式,如图:
但是这样我们需要注意的问题是,要将样式包住,每个页面都有有一个不同的大的类名,如a.vue 页面我们设置.containerA{ },b.vue { } 页面我们设置类名.cintainerB{ }
这样防止我们的样式在别的页面污染,如果所有页面都需要修改的话,那么我们直接见一个全局的文件,将css样式写在全局文件中
这样写的的时候可以将样式设置到整个项目中的所有文件:
可以看到home和about中的样式都修改了。方法2(不需要大量修改样式并没有使用css样式处理器):
如果我们没有大量的样式修改样式的时候,并且没有使用scss,stylus,less预处理器的时候,那么我们可以使用>>>
这个符号来全局设置类,但是样式只能穿透到它的子组件中,我下面来demo
让大家看的更详细一些
所以只是父组件中的样式改变了,而子组件的样式中的样式并没有改变。
加上>>>
后:
我们可以看到样式直接设置到子组件的类名上了,但是当我们使用了css预处理器后>>>
这个就不会管用了
可能是处理器解析不出来>>>
这个符号吧~
方法3(不需要大量修改样式并使用了css样式处理器):
它跟方法2是一样的,也是只是在将样式设置到子组件下 只需要将>>>
修改为/deep/