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 - HTML的request类
Jul 15 Javascript
JQuery 弹出框定位实现方法
Dec 02 Javascript
js跨域访问示例(客户端/服务端)
May 19 Javascript
jquery+html5烂漫爱心表白动画代码分享
Aug 24 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
Nov 04 Javascript
JS图片定时翻滚效果实现方法
Jun 21 Javascript
使用Javascript监控前端相关数据的代码
Oct 27 Javascript
使用gulp搭建本地服务器并实现模拟ajax
Apr 05 Javascript
JS实现图片转换成base64的各种应用场景实例分析
Jun 22 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
Nov 22 Javascript
vue基础之模板和过滤器用法实例分析
Mar 12 Javascript
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
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 foreach循环使用详解与实例代码
2010/05/08 PHP
php注销代码(session注销)
2012/05/31 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
php构造函数的继承方法
2015/02/09 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
js原型链原理看图说明
2012/07/07 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
javascript如何写热点图
2015/12/08 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
JS实现购物车特效
2017/02/02 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
vuex 的简单使用
2018/03/22 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
python实现中文输出的两种方法
2015/05/09 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
python 解压pkl文件的方法
2018/10/25 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
公司培训欢迎词
2014/01/10 职场文书
公司周年庆典邀请函
2014/01/12 职场文书
岗位职责风险防控
2014/02/18 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
培训后的感想
2015/08/07 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫