elementUI样式修改未生效问题详解(挂载到了body标签上)

 更新时间:2023年04月06日 08:58:46   作者:superManee  
vue+elementUI项目开发中,经常遇到修改elementUI组件样式无效的问题,这篇文章主要给大家介绍了关于elementUI样式修改未生效问题的相关资料,挂载到了body标签上,需要的朋友可以参考下

前言

在使用element-ui库的时候,有时会需要修改它自带的css样式,组件模块化化编程时一般会用到/deep/方法进行样式穿透修改,但有些情况/deep/方法也会失效,针对这些情况,下面就以修改elementUi中的DateTimePicker时间选择器组件样式来讲一下自己的心得。

一、适用范围

1、修改elementUI自带样式

2、/deep/深穿透样式修改方法失效

3、不污染全局样式

二、示例

1.目标

假设业务需要一个只带年、月、日、时的时间选择器(如下图

2.实现思路

首先在element-ui库中进行匹配寻找,发现没有与之完全一致的模型,为了省时,可以选择一个比较接近的模型进行ui改造,这里我选择的是 el-date-picker时间选择器

首先看下它本身的样式

代码如下:

  <div>
    <el-date-picker
      v-model="value1"
      type="datetime"
      placeholder="选择日期时间">
    </el-date-picker>
  </div>

修改自带样式方法

找到编译后element-ui给本时间选择器定义的div盒子类名(见下图)

因为不需要图中分和秒这两列,所以我们可以在本组件的单独的样式文件中标签中修改为自己需要的样式

先来个错误示范

利用 /deep/ 方法进行样式穿透修改本时间选择器样式

代码如下(示例):

<style scoped lang="less">
/deep/.el-picker-panel {
  .el-time-spinner{
    .el-time-spinner__wrapper {
      width: 100% !important;
    }
  }
}
</style>

这样做后发现我们所修改的样式并未生效,原因是因为DateTimePicker 下拉框 最终是直接挂载到body标签上,也就是说它与我们的子组件都是并列关系,所以我们在定义它的子组件中修改它的样式会失败。

接下来展示正确做法

可以在element-ui 中看到DateTimePicker的Attributes中存在一个popper-class属性,官方介绍中可以利用它可以给DateTimePicker 下拉框的设置类名

<template>
  <div class="home">
    <el-date-picker
      v-model="value1"
      format="yyyy-MM-dd H"
      value-format="yyyy-MM-dd H"
      type="datetime"
      placeholder="选择日期时间"
      popper-class='myDatePicker'>
    </el-date-picker>
  </div>
</template>

<script>
export default {
  name: "Home",
  data() {
    return {
      value1:''
    }
  },
};
</script>

<style scoped lang="less">
// 此处写本组件样式
</style>

<style lang="less">
/* 注意此处没有添加scoped属性,所以全局生效,但是有类名限制,不会与其他类样式冲突 */
.myDatePicker {
    .el-time-spinner__wrapper{
      width: 100% !important;
    }
}
</style>

最后看效果

样式生效,完结撒花。

总结

1、修改element-ui库中直接挂载到body上的组件样式时,需在全局样式中进行修改,不能在受scoped作用域限制的子组件样式中修改

2、如果此组件会用到多次,且每次都需不同的样式,那么务必给它设置一个独立的类名

到此这篇关于elementUI样式修改未生效问题的文章就介绍到这了,更多相关elementUI样式修改未生效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何使用vue过滤器filter

    如何使用vue过滤器filter

    这篇文章主要介绍了如何使用vue过滤器filter,对vue感兴趣的同学,可以参考下
    2021-05-05
  • Vue3中pinia用法示例

    Vue3中pinia用法示例

    这篇文章主要介绍了Vue3中使用pinia,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)

    使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)

    最近接了个项目需要开发一个app项目,由于是第一次接触这种app开发,经过一番思考,决定使用Vue3+Vant前端组件的模式进行开发,下面把问题分析及实现代码分享给大家,需要的朋友参考下吧
    2021-06-06
  • vue自定义键盘实现车牌号的示例代码

    vue自定义键盘实现车牌号的示例代码

    本文主要介绍了vue自定义键盘实现车牌号的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 强大Vue.js组件浅析

    强大Vue.js组件浅析

    这篇文章主要为大家介绍了Vue.js组件,组件是Vue.js最强大的功能之一,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • vue弹窗组件的实现示例代码

    vue弹窗组件的实现示例代码

    这篇文章主要介绍了vue弹窗组件的实现示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Vue3 中的 readonly 特性及函数使用详解

    Vue3 中的 readonly 特性及函数使用详解

    readonly是Vue3中提供的一个新特性,用于将一个响应式对象变成只读对象,这篇文章主要介绍了Vue3 中的 readonly 特性详解,需要的朋友可以参考下
    2023-04-04
  • vue 组件通信的多种方式

    vue 组件通信的多种方式

    这篇文章主要介绍了vue 组件通信的几种方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Vant Uploader实现上传一张或多张图片组件

    Vant Uploader实现上传一张或多张图片组件

    这篇文章主要为大家详细介绍了Vant Uploader实现上传一张或多张图片组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Vue使用mixins实现压缩图片代码

    Vue使用mixins实现压缩图片代码

    本篇文章主要介绍了Vue使用mixins实现压缩图片代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论