前言:vue+elementUI项目开发中,经常遇到修改elementUI组件样式无效的问题,

原因:在vue组件中我们经常需要给style添加scoped来使得当前样式只作用于当前组件的节点。添加scoped之后,工作原理是将当前组件的节点添加一个像”data-v-fae5bece”这样唯一属性的标识,这样就可以使得当前样式只作用于当前组件的节点。效果如下

测试项目结构是Home组件包含MiddleContainer组件、leftCharts层和rightCharts层,如下

如果各个嵌套的父子组件都使用scoped作用域拥有了有各自的唯一标识,类似于组件样式相互独立了,那么一般情况下,在父组件<style scoped>内样式不能设置子组件的节点elementUI样式,同样子组件<style scoped>内样式不能设置子父组件的节点的elementUI样式,所以产生修改elementUI组件样式无效的问题。

解决方式:

方法一:在app.vue根节点上修改样式进行全局覆盖

局部子组件MiddleContainer.vue如下

​
<template><div class="MiddleContainerPage"><p>这里是middleContainer 组件页面</p><div class="test"><a href="#">测试</a></div><el-button type="primary">测试在app.vue根组件上修改的效果</el-button></div>
</template><style lang="scss" scoped>.MiddleContainerPage {color:green;font-size: 2rem;.el-button--primary{color:orange;}}
</style>

app.vue组件如下

<style lang="scss">
#app {font-family: 'Avenir', Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;width:100%;height:100%;color:#fff;.MiddleContainerPage .el-button--primary {color:red;}}
</style>

注意: <style lang="scss">不包含scoped

App.vue是项目的主/根组件,所有页面都是在App.vue下进行切换的。其实你也可以理解为所有的路由组件也是App.vue的子组件。这里测试发现 修改app.vue根节点的样式可以覆盖使用了scoped的子组件样式。也就是app.vue的样式等级高于使用了scoped的子组件样式等级。

方法二:去除局部/子组件scoped的style属性

该方法是去除局部/子组件的scoped作用域属性, 并定义一个类名或者Id来增加当前组件的命名空间,使当前<style >样式实现类似<style scoped >划分组件块的效果,达到不影响组件样式的目的。所以项目开发中会习惯为每一个组件的根节点添加一个类名或者Id来声明当前组件的命名空间,如下的class=“MiddlerContainerPage”

<template><div class="MiddleContainerPage"><p>这里是middleContainer 组件页面</p><div class="test"><a href="#">测试</a></div><el-button type="primary">测试在app.vue根组件上修改的效果</el-button></div>
</template><style lang="scss">.MiddleContainerPage {color:green;font-size: 2rem;.el-button--primary{color:orange;}}
</style><style>.MiddleContainerPage .el-button--primary{color:red;}
</style>

<style scoped >中使用深度选择器影响子组件

在<style scoped >样式中使用深度选择器影响子组件,可以使用 >>> 操作符,使用如下

        .MiddleContainerPage >>>.el-button--primary{color:red;}

在 SCSS / Sass 之类的预处理器无法正确解析 >>>, 所以 /deep/ 操作符取而代之,代码如下

        .MiddleContainerPage /deep/.el-button--primary{color:red;}

注意事项:

CSS 作用域不能代替 class。考虑到浏览器渲染各种 CSS 选择器的方式,当 p { color: red } 设置了作用域时 (即与特性选择器组合使用时) 会慢很多倍。如果你使用 class 或者 id 取而代之,比如 .example { color: red },性能影响就会消除。你可以在这块试验田中测试它们的不同。
在递归组件中小心使用后代选择器! 对选择器 .a .b 中的 CSS 规则来说,如果匹配 .a 的元素包含一个递归子组件,则所有的子组件中的 .b 都将被这个规则匹配。

参考网址:https://blog.csdn.net/xiazeqiang2018/article/details/81190275

修改elementUI组件样式无效的多种解决方式相关推荐

  1. 修改elementUI组件样式无效的问题研究

    问题背景:el-tabs的选项卡默认字体是14px,大了,想改成12px,结果在style里面加样式总是不生效. 解决:样式放到app.vue里面,样式就生效了 .panel-content .el- ...

  2. vue组件中的样式属性:scoped,解决在父组件中无法修改子组件样式问题

    Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素,它是通过使 ...

  3. 修改elementui组件el-input样式

    修改elementui组件el-input样式 效果展示: 鼠标移入后效果: <el-inputplaceholder="搜索抖音昵称"prefix-icon="e ...

  4. vue 不生效 打包 样式_Vue打包部署到Nginx时,css样式不生效的解决方式

    今天在将使用Vue-cli编写的前端项目部署到Nginx的时候发生了一件很困扰的问题: Vue-cli项目在本地 使用 npm run dev的时候,页面样式是可以正常加载出来的,但是我将Vue-cl ...

  5. 修改webkit内核浏览器滚动条样式(修改element-ui table样式)

    webkit浏览器css设置滚动条主要有下面7个属性 1. ::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 2. ::-webkit-scrollbar-button 滚动条 ...

  6. [ElementUI] 修改ElementUI默认样式

    前言: 在使用ElementUI中免不了要根据自身需求修改EleUI的默认样式; <div class="form-box"><el-input v-model= ...

  7. 微信小程序如何修改第三方组件样式 例如 vant-weapp样式修改

    注: 必须css文件才可以修改 解除样式隔离 1.在组件内部options属性中定义styleIsolation: 'apply-shared' Component({onLoad(){},optio ...

  8. 单行文字、多行文字溢出时省略号表示的多种解决方式;调整字符间距;段落首字母大写缩进效果;

    文本溢出省略号表示的实现效果: 1.解决单行文字溢出: 解决方式: 在文字容器样式中添加 overflow:hidden; text-overflow:ellipsis; white-space: n ...

  9. Visual studio 2010出现“error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”解决方式...

    本来自己的电脑上装了VS2010,因为开发Cocos2d-x 3.x,所以就在自己的机器上装了一个VS2012. 但是.这不装不要紧,debug一下自己原来的程序,结果出现了"error L ...

最新文章

  1. Android Properties 存储
  2. 10亿级数据规模的半监督图像分类模型,Imagenet测试精度高达81.2% | 技术头条...
  3. easyui 初体验
  4. 采用HttpModules来重写URLs(实践篇)
  5. PHP经验总结(一)序言
  6. Socket is closed 可能原因
  7. java poi 空_Java的poi技术遍历Excel时进行空Cell,空row,判断
  8. oracle如何配置dns连接,图文详解添加DNS服务器的操作步骤
  9. _Linux中功能强大的截图工具 - Flameshot
  10. golang 安全的tcp server_Go 语言使用 TCP_NODELAY 控制发包流量
  11. java面试题jvm_经典面试题|讲一讲JVM的组成
  12. 计算年龄案例(JS)
  13. 打印机提示连接计算机,电脑突然不识别连接的打印机,打印机突然显示未连接...
  14. Ubuntu 语言配置修改为英文
  15. 新建springboot项目一直转圈圈
  16. 组装手机DIY时代或将到来
  17. idea设置Java class模板注释
  18. STM32F103ZET6代码移植到F103C8T6上的方法及注意事项
  19. 一台Linux服务器上挂载另一台Linux服务器文件系统的方法
  20. 淘客基地:拾牛IOS版更新至1.0.5版本

热门文章

  1. sqllite java 密码,SQLite登录检查用户名和密码
  2. c语言指针++_C ++此指针| 查找输出程序| 套装1
  3. java8 json转xml_2019-08-17java对象与json,xml互转
  4. 电机编码器调零步骤_蒂森电梯编码器整定和主机整定大全
  5. 在Python中使用一个元素创建一个元组
  6. Java夺命21连问!(附答案)
  7. 漫画:如何找到链表的倒数第n个结点?
  8. 面试官:HTTPS 为什么是安全的?说一下他的底层实现原理?
  9. 后台设计中容易被忽略的坑
  10. JSP JAVA 自定义 错误页面(404,505,500)