vue中深度选择器图文详解
scoped的作用
scoped
可以使当前的样式只在自己当前的组件内起作用。为了防止在一个组件内引入了子组件,而子组件没有加scoped。这个时候如果父子组件有相同的类名,就会产生样式的影响。
原理:
加了scoped就相当于给当前组件所有的标签添加一个【data-v-hash】的属性,而vue中采用的是属性选择器的方式来进行解析,具体解析如下图:
<style scoped> </style>
scoped对父子组件的影响
首先,我定义了一个父组件和子组件(child)
父组件:
子组件(加了scoped):
效果:
我们可以看到,子组件加了scoped后,父组件对h3的css样式就不会影响到子组件,如果子组件没加scoped,就会影响到也变成红色。
那么,我们就是想在子组件有scoped的情况下,影响到子组件的样式怎么办?就引出了深度选择器
深度选择器
首先,我们来认识下三个深度选择器:
原生css: >>> (在没有用less/scss的时候使用)
less: /deep/
scss: ::v-deep(如果使用了预处理器都可以使用这个(推荐))
我们上面的实例没有用到scss和less,所以我们使用>>>
效果:
子组件也变成了红色
附加:
/deep/
如果项目中用到了预处理器 sass less scss 会因为无法编辑而报错 可以使用/deep/
注意:vue-cli3以上版本不可以
<style lang="scss" scoped> /*用法1*/ .a { /deep/ .b { /* ... */ } } /*用法2*/ .a /deep/ .b { /* ... */ } </style>
::v-deep 如果使用了预处理器都可以使用
<style lang="scss" scoped> /*用法1*/ .a{ ::v-deep .b { /* ... */ } } /*用法2*/ .a ::v-deep .b { /* ... */ } </style>
注意:
我们深度处理器经常用在这样的情况:
例如你使用了ElementUI的走马灯(轮播图)组件,你想修改其中的样式,但是你设置样式不起作用,这个时候就是因为组件的scoped的影响。
解决办法:
1.不妨试试我们的深度处理器吧。(推荐)
2.将 scoped 移除。
3.新建一个没有 scoped 的 style(一个.vue文件允许多个style),如下:
<style scoped> //有scoped的style,此处放当前组件的css代码 </style> <style> //没有scoped的style,此处放修改ElementUI轮播图的css </style>
总结
到此这篇关于vue中深度选择器的文章就介绍到这了,更多相关vue深度选择器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Vue+Openlayer中使用select选择要素的实现代码
本文通过实例代码给大家介绍Vue+Openlayer中使用select选择要素,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2021-08-08vue v-viewer组件使用示例详解(v-viewer轮播图)
这篇文章主要介绍了vue v-viewer组件使用示例详解(v-viewer轮播图),本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-02-02关于前端报“应为声明或语句。ts(1128)“的原因及解决方案
最近在学习中遇到了个不常见的报错,这里给大家总结下解决的办法,这篇文章主要给大家介绍了关于前端报“应为声明或语句,ts(1128)“的原因及解决方案,需要的朋友可以参考下2024-08-08
最新评论