关于iview和elementUI组件样式覆盖无效问题及解决

 更新时间:2022年09月13日 09:07:12   作者:zqian1994  
这篇文章主要介绍了关于iview和elementUI组件样式覆盖无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

iview和elementUI组件样式覆盖无效

iview和elementUI是我们在用vue开发项目时比较常用到的ui组件,在我们使用第三方UI组件库开发时有时需要对这些组件进行一些样式修改。

为了vue页面样式模块化,不对全局样式造成污染,我们往往都会加入scoped属性用来限制样式的作用域,然而这也会导致当我们修改部分ui组件样式失效。为了避免这种情况,我们常用以下方式来解决。

新建一个不含scoped的style标签覆盖组件样式

不推荐使用,因为如果命名冲突会导致其他样式覆盖异常

<style scoped>
    /*页面样式*/
</style>
// ui组件覆盖
<style>
  .home .ivu-card-body {
    height: 345px;
  }
</style>

深度作用选择器( >>> )

<style scoped>
.box >>> .content {
  font-size:20px;
}
</style>

/deep/ 预处理器less下使用

深度选择器/deep/与>>>作用相同

<style scoped lang="less">
.select {
     /deep/ .ivu-card-body {
        width: 100%;
      }
    }
</style>

然而最近谷歌浏览器对于/deep/貌似不太友好,控制台提示/deep/将要被移除。

[Deprecation] /deep/ combinator is no longer supported in CSS dynamic profile.It is now effectively no-op, acting as if it were a descendant combinator. /deep/ combinator will be removed, and will be invalid at M65. You should remove it. See https://www.chromestatus.com/features/4964279606312960 for more details.

所以我们也可以在less下另类调用>>>,如下:

// 采用的less的转义和变量插值
<style scoped lang="less">
@deep: ~'>>>';
.select {
     @{deep} .ivu-card-body {
        width: 100%;
      }
    }
</style>

Element-ui与IView中的样式覆盖问题

在合作开发时,在大哥定好全局样式之后,我们个人页面的开发中是不可以影响到全局样式的,是不可以的!(不然会被骂的,就算不被骂,当你辛辛苦苦改出一个样式的时候,一回头,发现你没动,但是样式却变了,你恼火么,我很恼火!)所以在开发自己的页面时,规定样式范围很重要。所以今天我们来讲一下这个虽然很小但是很重要的知识点。

在进行自己页面开发需要独立样式时请这样使用

scoped字段的意义就是相当于你在控制你的<div>容器时为了唯一识别而给他的一个id比如<div id="xxxx">。当你给style加上scoped时,在编译之后样式就会带上自己的id比如

这样子之后,这个样式就只属于这个页面了,不会影响到全局的样式。

当然,在自己编写的容器中我们可以直接定义,但是在我们使用了其他的UI组件之后,我们会发现,在scoped中改变的样式并不能影响到样式了。因为我们是在全局中对其样式进行引入的,所以在自己规定的小区域内的改变并不能影响到他,但是直接写一个<style></style>在这里面进行修改则又会影响到全局的样式。接下来我们讲一下解决方法。

在Element-UI中覆盖样式

Element-UI跟IView覆盖的方式有点不同。在对Element-UI的样式进行覆盖时,我们需要在

中进行全局影响,而不可以在

中进行修改。如果有需要的话,写两个,一个带scoped,一个不带也是可以的。

之后我们在Element-UI的组件上给他加一个父层样式选择器

然后在样式中这样进行覆盖

这样做,在进行样式判断的时候会顺着层次顺序,只修改fatherclass下面的dialog的样式,这样就影响不到全局的样式了。

在IView中覆盖样式

IView中,则需要在外层套接一个容器,直接在组件上增加父层样式选择器是不起作用的。

具体做法如下

我们在组件外面套接了一层自己的容器,之后进行样式改变

这样就成功了!可喜可贺,可喜可贺!

TIP:

1.定义的父层样式选择器可以不进行样式的编写,因为他们只是为了方便我们定义一个固定的影响区域。

2.如何找到我需要修改的样式名称

打开控制台,去页面上寻找

之后在

去寻找你需要修改的样式,调节好之后直接把样式复制到你的代码中就可以了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue.js表单验证插件(vee-validate)的使用教程详解

    vue.js表单验证插件(vee-validate)的使用教程详解

    这篇文章主要介绍了vue.js表单验证插件(vee-validate)的使用,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • vue分割面板封装实现记录

    vue分割面板封装实现记录

    这篇文章主要为大家详细介绍了vue分割面板封装实现记录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • vue3 setup中defineEmits与defineProps的使用案例详解

    vue3 setup中defineEmits与defineProps的使用案例详解

    在父组件中定义String、Number、Boolean、Array、Object、Date、Function、Symbol这些类型的数据,使用defineEmits会返回一个方法,使用一个变量emits(变量名随意)去接收,本文给大家介绍vue3 setup中defineEmits与defineProps的使用案例,感兴趣的朋友一起看看吧
    2023-10-10
  • 深入解析vue中的权限管理

    深入解析vue中的权限管理

    权限是对特定资源的访问许可,所谓权限控制,也就是确保用户只能访问到被分配的资源,这篇文章主要介绍了vue的权限管理的相关知识,需要的朋友可以参考下
    2022-06-06
  • vue-cli的eslint相关用法

    vue-cli的eslint相关用法

    本篇文章主要介绍了vue-cli的eslint相关用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Vue3+Element Plus实现自定义弹窗组件的全屏功能

    Vue3+Element Plus实现自定义弹窗组件的全屏功能

    在现代化的前端开发中,弹窗组件是提升用户体验的重要元素,本文将介绍如何使用 Vue 3 和 Element Plus 库来创建一个具有全屏功能的自定义弹窗组件,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-07-07
  • Vue基于Element-ui实现表格弹窗组件

    Vue基于Element-ui实现表格弹窗组件

    这篇文章主要为大家详细介绍了Vue基于Element-ui实现表格弹窗组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Vue中watch与watchEffect的区别详细解读

    Vue中watch与watchEffect的区别详细解读

    这篇文章主要介绍了Vue中watch与watchEffect的区别详细解读,watch函数与watchEffect函数都是监听器,在写法和用法上有一定区别,是同一功能的两种不同形态,底层都是一样的,需要的朋友可以参考下
    2023-11-11
  • 浅谈Vue DIFF

    浅谈Vue DIFF

    本文主要介绍了浅谈Vue DIFF,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Vue computed与watch用法区分

    Vue computed与watch用法区分

    watch和computed都是以Vue的依赖追踪机制为基础的,当某一个依赖型数据发生变化的时候,所有依赖这个数据的相关数据会自动发生变化,即自动调用相关的函数,来实现数据的变动,这篇文章简单介绍下Vue中computed和watch的区别异同,感兴趣的朋友一起看看吧
    2023-02-02

最新评论