Vue 中动态与静态处理 Element UI/Element Plus 组件禁用状态样式

目录

  • 一、静态样式修改 - 使用 `::v-deep` 穿透组件样式
  • 二、选择器的优先级和匹配顺序
  • 三、动态添加样式 - 使用 Vue 实例属性(非推荐)
  • 四、区别总结
  • 五、应用场景总结

本文主要探讨在 Vue.js 项目中,特别是搭配 Element UI 或 Element Plus 组件库时,如何灵活处理 el-inputel-select 组件禁用状态下的字体颜色问题。我们将详细分析如何使用 CSS 选择器穿透(如 ::v-deep)来改变禁用状态下的输入框字体颜色,并探讨通过 JavaScript 动态添加样式的可能性及其局限性。

一、静态样式修改 - 使用 ::v-deep 穿透组件样式

在 Element UI 或 Element Plus 中,当我们给 el-inputel-select 添加 :disabled="true" 属性时,其字体颜色会变为暗色以表示禁用状态。

在这里插入图片描述

若要将禁用状态下的字体颜色更改为红色,可以通过 CSS 选择器穿透来实现:

/* Vue 2.x + Element UI */
.el-input.is-disabled /deep/ .el-input__inner,
.el-select.is-disabled /deep/ .el-input__inner {
  color: red !important;
}

/* Vue 3.x + Element Plus */
.el-input.is-disabled ::v-deep .el-input__inner,
.el-select.is-disabled ::v-deep .el-input__inner {
  color: red !important;
}

在这里插入图片描述

但这里,::v-deep/deep/(Vue 2.x)选择器可以帮助我们穿透组件的作用域,修改内部 el-input__inner 元素的颜色。这只有 el-input 内部包裹的 el-input,其禁用状态的字体颜色能成功更改为红色,而 el-select 不行 。需要将::v-deep/deep/提前。

/* Vue 2.x + Element UI */
 /deep/ .el-input.is-disabled.el-input__inner,
.el-select.is-disabled /deep/ .el-input__inner {
  color: red !important;
}

/* Vue 3.x + Element Plus */
::v-deep .el-input.is-disabled  .el-input__inner,
.el-select.is-disabled ::v-deep .el-input__inner {
  color: red !important;
}

在这里插入图片描述

二、选择器的优先级和匹配顺序

在 Vue SFC 的 scoped CSS 中,.el-input.is-disabled ::v-deep .el-input__inner::v-deep .el-input.is-disabled .el-input__inner 在意图上都是为了穿透组件样式作用域来修改内部元素 .el-input__inner 的样式,尤其是当 .el-input 处于禁用状态(.is-disabled 类名存在)时。

区别在于选择器的优先级和匹配顺序:

  1. .el-input.is-disabled ::v-deep .el-input__inner
    这种写法先指定了 .el-input.is-disabled 这个类选择器,然后才使用 ::v-deep 进行穿透。这意味着它首先会找到所有带有 .el-input.is-disabled 类的元素,然后再尝试穿透这些元素去影响内部 .el-input__inner 的样式。

  2. ::v-deep .el-input.is-disabled .el-input__inner
    这种写法先使用 ::v-deep 进行穿透,然后指定了类选择器 .el-input.is-disabled .el-input__inner。尽管两者最终都旨在达到相同的目的,但逻辑上这种写法似乎是试图穿透任意层次以查找满足 .el-input.is-disabled .el-input__inner 这一组合条件的所有元素。

三、动态添加样式 - 使用 Vue 实例属性(非推荐)

尽管 Vue 提供了多种方式动态添加样式,但直接通过 JavaScript 修改类似 ::v-deep 规则的样式并不推荐,尤其对于穿透子组件样式的情况。不过,这里仍提供一种使用 Vue 实例 $style 属性(仅限 Vue 2.x)的示例,以说明其工作原理:

// 在 Vue 组件中
export default {
  data() {
    return {
      dynamicStyle: {}
    };
  },
  created() {
    this.updateDynamicStyle();
  },
  methods: {
    updateDynamicStyle() {
      // 创建模拟 CSS 样式对象(但这并不能应用于穿透子组件)
      const styleObject = {
        '.el-input.is-disabled .el-input__inner': {
          color: 'red !important' // 注意这里没有使用 ::v-deep,因为 $style 不支持穿透
        }
      };

      // 合并到组件的 $style 属性
      this.dynamicStyle = Object.assign({}, this.dynamicStyle, styleObject);
    }
  }
};

然后在模板中引用:

<div :style="dynamicStyle">
  <!-- el-input 和 el-select 等组件 -->
</div>

四、区别总结

  • ::v-deep/deep/ 选择器是在 CSS 中穿透组件作用域修改子组件样式的一种手段,特别适用于 Element UI 和 Element Plus 组件库。
  • 动态添加样式(如通过 $style)适用于在运行时调整组件实例自身的样式,但不适用于穿透到子组件的样式。

五、应用场景总结

在实际项目开发中,推荐采用 ::v-deep 穿透组件样式的方式来定制 Element UI/Element Plus 组件的禁用状态样式,这种方式更为直观、稳定且易于维护。对于动态添加样式的需求,优先考虑使用 Vue 的响应式数据绑定至 :style 特性来调整组件本身的样式,而非穿透到子组件。在 Vue 3.x 中,官方已不再推荐使用 $style,改用 <style> 标签结合 scoped 或 CSS 变量等方式进行样式管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/612088.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言队列的含义与队列数据操作代码详解!

引言&#xff1a;于本篇博客当中&#xff0c;我们将讲到数据结构——队列的有关知识。而对于这次的队列&#xff0c;我们将会在单链表的基础上实现。 更多有关C语言和数据结构知识详解可前往个人主页&#xff1a;计信猫 一&#xff0c;队列的含义 队列是一种特殊的线性表&#…

一文了解spring事务特性

推荐工具 objectlog 对于重要的一些数据&#xff0c;我们需要记录一条记录的所有版本变化过程&#xff0c;做到持续追踪&#xff0c;为后续问题追踪提供思路。objectlog工具是一个记录单个对象属性变化的日志工具,工具采用spring切面和mybatis拦截器相关技术编写了api依赖包&a…

Vue2 组件通信方式

props/emit props 作用&#xff1a;父组件通过 props 向子组件传递数据parent.vue <template><div><Son :msg"msg" :pfn"pFn"></Son></div> </template><script> import Son from ./son export default {name: …

面向对象进阶——内部类

1、初始内部类 什么是内部类&#xff1f; 类的五大成员&#xff1a; 属性、方法、构造方法、代码块、内部类 在一个类的里面&#xff0c;再定义一个类。 举例&#xff1a;在A类大的内部定义B类&#xff0c;B类就被称为内部类 public class Outer{ 外部类 public …

流媒体学习之路(WebRTC)——GCC中ProbeBitrateEstimator和AcknowledgedBitrateEstimator的大作用(7)

流媒体学习之路(WebRTC)——GCC中ProbeBitrateEstimator和AcknowledgedBitrateEstimator的大作用&#xff08;7&#xff09; —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标&#xff1a;可以让大家熟悉各类Qos能力、带宽估计能力&a…

抛弃英特尔,采用自研M4芯片,苹果公司的iPad Pro有什么好?

【科技明说 &#xff5c; 科技热点关注】 看到​苹果公司最新发布的M4芯片iPad Pro&#xff0c;我的眼前一亮&#xff0c;“其是否又该更换新pad了&#xff1f;”在这样的扪心自问之中&#xff0c;我发现了M4芯片的iPad Pro几大好处。 一是性能更好&#xff0c;M4芯片采用第二…

系统Cpu利用率降低改造之路

系统Cpu利用率降低改造之路 一.背景 1.1 系统背景 该系统是一个专门爬取第三方数据的高并发系统&#xff0c;该系统单台机器以每分钟400万的频次查询第三方数据&#xff0c;并回推给内部第三方系统。从应用类型上看属于IO密集型应用,为了提高系统的吞吐量和并发&#xff0c;…

解决电脑睡眠后,主机ping不通VMware虚拟机

文章目录 问题解决方法方法一方法二注意 问题 原因&#xff1a;电脑休眠一段时间&#xff0c;再次打开电脑就ping不通VMware虚拟机。 解决方法 方法一 重启电脑即可&#xff0c;凡是遇到电脑有毛病&#xff0c;重启能解决90%问题。但是重启电脑比较慢&#xff0c;而且重启…

system函数和popen函数

system函数 #include <stdlib.h> *int system(const char command); system函数在linux中的源代码&#xff1a; int system(const char * cmdstring) {pid_t pid;int status;if(cmdstring NULL){return (1);}if((pid fork())<0){status -1;}else if(pid 0){ //子…

Spring MVC(三) 参数传递

1 Controller到View的参数传递 在Spring MVC中&#xff0c;把值从Controller传递到View共有5中操作方法&#xff0c;分别是。 使用HttpServletRequest或HttpSession。使用ModelAndView。使用Map集合使用Model使用ModelMap 使用HttpServletRequest或HttpSession传值 使用HttpSe…

Vue-Cli脚手架项目的搭建【新手快速入手】

目录 一、Vue CLI脚手架简介☺ 1.Node.js前置环境的安装 2.安装npm管理器 3.安装淘宝镜像(cnpm) 二、安装vue-cli 1. 版本号查看 2.旧版本卸载 3.新版本安装 4.检查 三、Vue项目的搭建 &#x1f4cc;进入Vue项目管理器 ★命令方式创建 若localhost拒绝访问怎么办&…

深度剖析:SSD能否全面取代HDD?-2

近日&#xff0c;希捷针对SSD即将全面取代HDD的市场预言也提出站在HDD厂商角度不同的观点。 这些观点出自希捷的一份演示文稿&#xff0c;实质上是对Pure Storage首席执行官Charlie Giancarlo所称“五年内不会再有新的磁盘系统出售”这一论断的回应&#xff0c;意味着到2028年底…

(十六)Servlet教程——Servlet文件下载

Servlet文件下载 文件下载是将服务器上的资源下载到本地&#xff0c;可以通过两种方式来下载服务器上的资源。第一种是使用超链接来下载&#xff0c;第二种是通过代码来下载。 超链接下载 在HTML或者JSP页面中使用超链接时&#xff0c;可以实现页面之间的跳转&#xff0c;但是…

深入理解卷积函数torch.nn.Conv2d的各个参数以及计算公式(看完写模型就很简单了)

代码解释帮助理解&#xff1a; torch.randn(10, 3, 32, 32)&#xff0c;初始数据&#xff1a;(10, 3, 32, 32)代表有10张图片&#xff0c;每张图片的像素点用三个数表示&#xff0c;每张图片大小为32x32。&#xff08;重点理解这个下面就好理解了&#xff09; nn.Conv2d(3, 64…

python自动打卡的代码

好的&#xff0c;以下是一个简单的Python自动打卡程序代码&#xff0c;用于在特定时间自动打卡&#xff1a; python import datetime import time # 设置打卡时间和打卡间隔 check_in_time datetime.datetime(2023, 3, 1, 9, 30) check_out_time datetime.datetime(2023, 3, …

苹果电脑免费第三方软件CleanMyMac X2025电脑版垃圾清理软件神器

Mac电脑用户在长时间使用电脑之后&#xff0c;时常会看到“暂存盘已满”的提示&#xff0c;这无疑会给后续的电脑使用带来烦恼&#xff0c;那么苹果电脑暂存盘已满怎么清理呢&#xff0c;下面将给大家带来一些干货帮你更好地解决这个问题。 CleanMyMac X2024全新版下载如下: h…

springboot之统一异常封装

一&#xff1a;统一返回实体对象 JsonInclude(Include.NON_NULL) public class ResponseObject implements Serializable {private static final long serialVersionUID 1L;private Integer code 0;private String message "success";private Long time System.…

新版文件同步工具(Python编写,其中同时加入了多进程计算MD5、多线程复制大文件、多协程复制小文件、彩色输出消息、日志功能)

两个月前&#xff0c;接到一个粉丝的要求&#xff0c;说希望在我之前编写的一个python编写的文件同步脚本(Python编写的简易文件同步工具(已解决大文件同步时内存溢出问题)https://blog.csdn.net/donglxd/article/details/131225175)上加入多线程复制文件的功能&#xff0c;前段…

flutter中固定底部按钮,防止键盘弹出时按钮跟随上移

当我们想要将底部按钮固定在底部&#xff0c;我们只需在Widget中的Scaffold里面加一句 resizeToAvoidBottomInset: false, // 设置为false&#xff0c;固定页面不会因为键盘弹出而移动 效果图如下

CSCWD 2024会议最后一天 女高音惊艳全场,相声笑破肚皮

会议之眼 快讯 今天是第27届国际计算机协同计算与设计大会&#xff08;CSCWD 2024&#xff09;举办的最后一天&#xff01;会议依然热络&#xff0c;紧张而充实&#xff01;各个技术分论坛持续展开&#xff0c;学者们的热情不减&#xff0c;对技术领域的热爱和探索精神令人赞叹…