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 变量等方式进行样式管理。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将要上市的自动驾驶新书《自动驾驶系统开发》中摘录各章片段 4

第十三章 车联网 数字化设备正变得越来越普遍并且相互联系。这些设备向数字生态系统智能部分的演进创造了迄今为止尚未解决安全问题的新颖应用。一个特定的例子是车辆&#xff0c;随着车辆从简单的交通方式发展到具有新的感知和通讯功能的智能实体&#xff0c;就成为智能城市的…

Leecode438:找到字符串中所有字母异位词

做这道题的过程中遇到了很多问题&#xff0c;但其实都是自己不够仔细导致的。这道题的思想归根结底就是维护一个滑动窗口&#xff0c;然后在滑动的过程中不断维护不断判断&#xff0c;直到移到最后端然后返回一个维护好的list列表。

调试代码问题汇总

1.最常见的就是数据库密码不对。根据调试视频将你的数据库密码设置正确&#xff0c;数据库密码是数字的优先直接连如果不成功可以加个双引号或者单引号。 提示&#xff1a;java.sql.SQLException: Access denied for user rootlocalhost (using password: YES) 2.原本配置好的…

Three.js基础练习——渲染一个立方体

1.学习内容参考了 three.js入门教程--零基础也能学会_threejs菜鸟教程-CSDN博客 本章内容包含渲染立方体&#xff0c;并配合ui工具食用~ 2.效果图 import * as THREE from three import * as dat from dat.gui import { OrbitControls } from three/addons/controls/OrbitC…

Istio中的全局限流方案

Istio中的全局限流方案 在k8s网格&#xff08;istio&#xff09;环境中&#xff0c; 可以通过创建Envfoyfilter的方式来配置限流。 在istio官方文档中&#xff0c;提供了两种限流方式&#xff1a; 本地限流全局限流 本地限流的细节这里不再赘述, 主要讲解全局限流的配置方式…

解决 git 因输入密码错误而导致的报错无法推送问题

报错内容如下&#xff1a; > git push origin master:master fatal: unable to access https://gitee.com/spring-in-huangxian-county/web-tts-vue.git/: OpenSSL SSL_connect: Connection was reset in connection to gitee.com:443 出错原因 根本原因是本机存储的 账户…

LeetCode题练习与总结:反转链表Ⅱ--92

一、题目描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#…

c++ poencv Project2 - Document Scanner

惯例先上结果图&#xff1a; 本文提供一种文本提取思路&#xff1a; 1、首先图像预处理&#xff1a;灰度转换、高斯模糊、边缘提取&#xff0c;膨胀。 Mat preProcessing(Mat img) {cvtColor(img, imgGray, COLOR_BGR2GRAY);GaussianBlur(imgGray, imgBlur, Size(3, 3), 3, …

uni-app(三):离线打包与插件引用(Android)

离线打包与插件引用 1.下载Android离线SDK2.使用Android Studio打开离线打包项目并更新Gradle3.解决报错4.构建5.配置AppKeya.查看证书b.申请AppKeyc.配置AppKey 6.生成本地打包App资源7.拷贝App资源到Android项目中8.修改 appid9.修改Android项目配置文件10.下载证书并配置11.…

海康威视漏洞综合利用工具-HikvisionExploitGUI

0x01 前言 在攻防演练中&#xff0c;海康威视一直是红队攻击的重点目标之一&#xff0c;红队通常需要快速打点&#xff0c;尽快发现系统中的漏洞&#xff0c;并利用它们获取权限。 0x02 工具简介 工具支持检测海康威视综合安防管理平台多种常见漏洞。提供直观友好的图像化界…

区块链中的加密算法及其作用

区块链技术以其去中心化、不可篡改、透明公开的特性&#xff0c;在全球范围内引发了广泛的关注和讨论。其中&#xff0c;加密算法作为区块链技术的核心组成部分&#xff0c;对于维护区块链网络的安全、确保数据的完整性和真实性起到了至关重要的作用。本文将详细介绍区块链中常…

LLM 可以从简单数据中学习吗?

在 10 月份的一次周会结束后&#xff0c;我提到 SFT 训练后的 Loss 曲线呈现阶梯状&#xff0c;至于为什么&#xff0c;并没有人有合理的解释&#xff0c;加上当时的重心是提升次日留存率&#xff0c;Loss 曲线呈现阶梯状与次日留存率的关系还太远&#xff0c;即使有问题&#…

torch.searchsorted

torch.searchsorted 官方文档链接&#xff1a;torch.searchsorted — PyTorch 2.3 documentation 该函数用于在已排序的序列中查找要插入的值的位置&#xff0c;以保持序列的顺序&#xff0c; torch.searchsorted(sorted_sequence, values, *, out_int32False, rightFalse, s…

Python - 金三银四心路历程 之 数据结构与算法 刷题

目录 一.引言 二.心路历程 三.刷题经历 四.刷题历程 五.总结 一.引言 <夜深人静写算法> 是 23 年 12 月底博主打算跳槽时开始做刷题准备做的专栏&#xff0c;前后准备了大约一个月&#xff0c;刷题完毕后简单准备了项目和简历后就开始加入找工作大军了&#xff0c;最…

【机器学习】逻辑化讲清PCA主成分分析

碎碎念&#xff1a;小编去年数学建模比赛的时候真的理解不了主成分分析中的“主成分”的概念&#xff01;&#xff01;但是&#xff0c;时隔两年&#xff0c;在机器学习领域我又行了&#xff0c;终于搞明白了&#xff01;且看正文&#xff01;再分享一个今天听到的播客中非常触…

Web3 Tools - Base58

Base58编码 Base58编码是一种用于表示数字的非常见的编码方法。它通常用于加密货币领域&#xff0c;例如比特币和其他加密货币的地址表示。 什么是Base58编码&#xff1f; Base58编码是一种将数字转换为人类可读形式的编码方法。与常见的Base64编码不同&#xff0c;Base58编码…

JCR一区 | Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预测

JCR一区 | Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预测 目录 JCR一区 | Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 基本介绍 Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预…

Ascent DMS AE电源说明书和设备连接调试教程

Ascent DMS AE电源说明书和设备连接调试教程

世上最全前端开发教程(HTMLCSS)

HTML介绍 HTML&#xff0c;全称为HyperText Markup Language&#xff0c;即超文本标记语言&#xff0c;是一种用来创建网页的标准标记语言。HTML使用一系列的标签&#xff08;Tags&#xff09;来定义网页的不同部分和它们的行为&#xff0c;比如段落、链接、图片等。 CSS介绍 …

《这就是ChatGPT》读书笔记

书名&#xff1a;这就是ChatGPT 作者&#xff1a;[美] 斯蒂芬沃尔弗拉姆&#xff08;Stephen Wolfram&#xff09; ChatGPT在做什么&#xff1f; ChatGPT可以生成类似于人类书写的文本&#xff0c;它基本任务是弄清楚如何针对它得到的任何文本产生“合理的延续”。当ChatGPT写…