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

修改挂载到body标签上elementUI样式问题


前言

在使用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、如果此组件会用到多次,且每次都需不同的样式,那么务必给它设置一个独立的类名

### 回答1: 在当前页面生效修改 ElementUI 默认样式的方法是在当前页面的 CSS 样式文件定义覆盖 ElementUI 组件的样式,比如你可以这样实现: 1. 在当前页面的 CSS 样式文件引入 ElementUI 样式文件: ``` @import "~element-ui/lib/theme-chalk/index.css"; ``` 2. 在 CSS 样式文件定义覆盖 ElementUI 组件的样式: ``` .el-button { background-color: blue; color: white; } ``` 以上样式会覆盖所有在当前页面使用的 ElementUI 按钮组件的样式,并且仅对当前页面生效。 ### 回答2: 要修改ElementUI默认样式仅在当前页面生效,可以使用scoped样式。Scoped样式是Vue框架的一种特殊样式,它只在当前组件的作用域生效,不会影响其他组件。 首先,需要在当前页面的样式文件引入ElementUI的默认样式表。可以使用@import语句导入ElementUI样式文件,确保样式表被正确引入。 然后,在需要修改样式的HTML元素上添加scoped属性,这会将样式限定在当前组件。例如,如果需要修改ElementUI表格的样式,可以创建一个table标签,并且为该标签添加scoped属性。 在scoped样式,可以使用与普通样式相同的CSS选择器和属性来修改样式。例如,可以使用类名选择器修改特定元素的样式,也可以使用标签选择器选择所有符合条件的元素,并修改它们的样式。 最后,编写需要的样式规则来修改ElementUI默认样式。通过在scoped样式添加额外的样式规则,可以覆盖ElementUI默认样式,并实现样式修改。 需要注意的是,scoped样式只对当前页面生效,不会影响其他页面或组件的样式。如果需要在其他页面修改ElementUI默认样式,需要分别在每个页面进行设置。 总的来说,要修改ElementUI默认样式仅在当前页面生效,可以使用scoped样式来限定样式的作用域,并在需要修改的HTML元素上添加scoped属性。然后,在scoped样式编写需要的样式规则,来覆盖ElementUI默认样式
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值