Vue scoped及deep使用方法解析


Posted in Javascript onAugust 01, 2020

众所周知,在组件中给style 标签添加属性 scoped 属性可以避免组件内样式对外界造成污染,scoped使得组件内的样式变成局域样式,只作用于当前组件。

原理如下-------

在编译组件的时候,如果当前组件内style标签上有scoped属性,那么会在当前所有标签上添加一个【data-v-hash】属性,而当前样式表内的所有末尾选择器后面也会加上该属性,那么就使得当前组件内的样式只会作用于当前组件内的元素。值得注意的是,当父组件,子组件同时使用scoped属性时,子组件最外层的标签既会被加上当前组件的hash值,又会加上父级组件的hash值,像这样

//子组件最外层标签
<div data-v-b45036b2 data-v-384b136e ></div>

但是有个问题------

在我们用scoped的时候回发现一个问题,就是我们在当前组件内使用的scoped,但是我想在当前组件内改变子组件的样式(非最外层标签),的时候会发现不好使。

<style scoped>
.father-div .child-div{color:red;}
</style>

因为到了浏览器上会解析成

<div data-v-384b136e ></div> 

不好使的原因是应为父组件内样式内解析的是父组件的hash值,而子组件内标签上添加的是子组件的hash值,对应不上当然没效果,那怎么解决呢?

使用deep------

当遇到这种困扰的时候我们可以另写一个style标签,然后不加scoped属性,来盖子组件的样式,当前这么写是可以的,但是不太优雅,这时我们可以用到/deep/属性,

.father-div /deep/ .child-div{color:red;}

当遇到"/deep/"的时候会将"/deep/"的位置替换成组件的hash值,解析成

.father-div[data-v-b45036b2] .child-div{color:red;}

这样只需要注意css的权重就可以覆盖子组件内的样式了,

注意:子组件内最外层的样式由于是带了父子组件的两个hash值,所以是会被两头控制的,不需要/deep/就可以在父组件内覆盖样式

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript语言中的Literal Syntax特性分析
Mar 08 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
Feb 07 Javascript
对Jquery中的ajax再封装,简化操作示例
Feb 12 Javascript
javascript:window.open弹出窗口的位置问题
Mar 18 Javascript
详解JavaScript中常用的函数类型
Nov 18 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
Sep 01 Javascript
js改变html的原有内容实现方法
Oct 05 Javascript
通过命令行生成vue项目框架的方法
Jul 12 Javascript
jQuery简单实现对数组去重及排序操作实例
Oct 31 jQuery
JavaScript中的一些隐式转换和总结(推荐)
Dec 22 Javascript
vue2.0 根据状态值进行样式的改变展示方法
Mar 13 Javascript
jquery插件懒加载的示例
Oct 24 jQuery
Vue中computed及watch区别实例解析
Aug 01 #Javascript
Vue数组响应式操作及高阶函数使用代码详解
Aug 01 #Javascript
vue 组件简介
Jul 31 #Javascript
three.js 制作动态二维码的示例代码
Jul 31 #Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
Jul 31 #Javascript
vue抽出组件并传值实例
Jul 31 #Javascript
Vue通过Blob对象实现导出Excel功能示例代码
Jul 31 #Javascript
You might like
关于PHP中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
php和html的区别点详细总结
2019/09/24 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
jquery 获取json数据实现代码
2009/04/27 Javascript
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
JavaScript 事件系统
2010/07/22 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
python多线程并发及测试框架案例
2019/10/15 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
大专毕业生自我评价分享
2013/11/10 职场文书
电力培训心得体会
2014/09/02 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书