vue中修改第三方组件的样式不生效
问题
在使用element-ui时,有时候想要修改组件内的样式,但不成功,例如
<div class="test">
<el-button>按钮</el-button>
</div>
<style lang="less" scoped>
.test{
.el-button span{
background:red;
}
}
</style>
以上对.el-button span的样式不生效
问题的原因
想要找到解决方案,我们先来看看不生效的原因。
1)首先,scoped是如何实现局部样式的?
查看vu-loader文档,根据文档可以知道,当 <style> 标签有 scoped 属性时,会对组件内的元素加上一个类似于data-v-f3f3eg9的独特标签,组件内的样式只会对带有这个标签的dom元素生效,因此加上scoped后,组件内的样式不会影响组件外。
2)那scoped为什么对第三方子组件内的dom元素不生效?
文档中提到

仔细阅读这句话,也就是说采用scoped后,对组件A内采用的子组件,只会对其根元素加上组件A的独特标签,因此对子组件的根元素改变样式能生效,而对非根元素是不生效的。因此上面的例子如果改为对根元素.el-button修改样式,就会生效
<style lang="less" scoped>
.test{
.el-button{
background:red;
}
}
</style>
可以看下具体的dom元素,如图

上图中data-v-5752faac是当前组件test的独特标签(其他是父元素带上的,这里忽略),可以看到子组件el-button的根元素带上了此标签,而非根元素span没带上,因此对span的修改是不生效的,此时如果手动在span元素上加上data-v-5752faac,会发现样式生效
3)不仅限于第三方组件
从上面的分析来看,其实不仅限于第三方组件,任何采用到的子组件,只要是想修改子组件的非根元素都是不生效的
解决方案
- 【方案一】加上一个非scoped样式
根据文档可知,vue可以混用本地和全局样式,因此对子组件的非根元素样式修改,可以单独放在一个非 scoped 样式中
<style>
.test{
.el-button span{
background:red;
}
}
</style>
<style scoped>
/* 本地样式 */
</style>
- 【方案二】采用/deep/
加上/deep/,组件的样式可以渗透到子组件相应的元素上
<style lang="less" scoped>
.test{
/deep/ .el-button span{
background:red;
}
}
</style>
参考文档
vu-loader文档
vue中修改第三方组件的样式不生效的更多相关文章
- vue中修改第三方组件的样式并不造成污染
vue引用了第三方组件, 需要在组件中局部修改第三方组件的样式, 而又不想去除scoped属性造成组件之间的样式污染. 此时只能通过>>>,穿透scoped. 但是,在sass中存在 ...
- vue中修改子组件样式
一.问题叙述 项目里需要新添加一个表单页面,里面就只是几个select,这个几个select是原本封装好的组件,有自己原本的样式,而这次的原型图却没有和之前的样式统一起来,需要微调一下,这里就涉及到父 ...
- Vue中的scoped及穿透方法(修改第三方组件局部的样式)
何为scoped? 在vue文件中的style标签上,有一个特殊的属性:scoped.当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,也就是说,该样式只能适用于当前组 ...
- 如何在vue中修改动态标签中的样式和修改组件库样式
vue中修改动态标签中的样式和修改组件库样式 因为vue中的标签在渲染的时候,都会给标签加上id 所以你想在<style lang="scss" scoped>直接修改 ...
- vue中滚动页面,改变样式&&导航栏滚动时,样式透明度修改
vue中滚动页面,改变样式&&导航栏滚动时,样式透明度修改.vue <div class="commonHeader" v-bind:class=" ...
- 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据
前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...
- vue中的父子组件相互调用
vue中的父子组件相互调用: 1.vue子组件调用父组件方法:子组件:this.$emit('xx'); 父组件:定义yy方法,并在引用子组件时传参,如@xx="yy" 2.vue ...
- vue中使用第三方插件animate.css实现动画效果
vue中使用第三方插件animate.css实现动画效果1.首先先引入第三方类animated.css2.将你所需要动画的标签用包裹起来3.在transition元素中添加enter-active-c ...
- Vue——解决使用第三方组件库时无法修改默认样式的问题(使用 /deep/ )
最近在开发一个基于Vue的后台管理系统,其中使用了element-ui第三方ui组件库.使用过组件库的人都知道,第三方组件往往会有一些默认的样式,而有些又是我们想要改变的. 一.基础(了解 <s ...
随机推荐
- IDEA报错: Clone failed: Authentication failed for 'http://10.70.XXXXXXXXXXXXXXXXX'
今天从git上导入公司的项目,总是报错Clone failed: Authentication failed for 'http://10.70.XXXXXXXXXXXXXX' 在网上百度了一下,大致 ...
- metronic-v4.6 使用经验
1.弹框居中显示 上下居中 需要上下居中引用 bootstrap-modalmanager.js 左右居中 修改 bootstrap-modal.js 中 this.$element.css('ma ...
- Android 把枪/PDA 扫描头自回车没用 处理方法
XML 控件加上属性 android:imeOptions="actionNone"
- IDEA安装及默认配置习惯配置(二)
安装完后,接下来配置Idea使用习惯. 一.基本使用 1.字体设置 2.修改编码模式 3.显示行号和方法分割线 4. 格式化代码时候多行空行合并为1行 5.代码提示不区分大小写 6.自动导包设置 7. ...
- MYSQL日期相关操作
*******MYSQL中取当前周/月/季/年的第一天与最后一天******* 当年第一天: SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 ...
- iOS开发 iOS10推送必看(基础篇)-转
iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...
- MUI底部导航栏切换效果
首先是html代码: <nav class="mui-bar mui-bar-tab"> <a href="view/templates/home/ho ...
- 第三方应用如何在SAP Kyma上进行服务注册
Jerry之前的公众号文章 什么?在SAP中国研究院里还需要会PHP开发?提到了一个SAP Kyma的应用场景: 旅行兼社交达人伊森,使用经过SAP Kyma扩展之后的WordPress这个网站来写博 ...
- svm 简单明了的入门级使用教程(转载)
如何使用libsvm进行分类 这帖子就是初步教教刚接触libsvm(svm)的同学如何利用libsvm进行分类预测,关于参数寻优的问题在这里姑且不谈,另有帖子详述. 其实使用libsvm进行分类很 ...
- 【OGG 故障处理】OGG-01028
通过ATSCN 的方式启动REPLICAT 进程的时候报错 GGSCI> START REPLICAT RP_XXXX1, ATCSN 15572172378 GGSCI> VIEW RE ...