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

news2024/11/24 1:19:49

目录

  • 一、静态样式修改 - 使用 `::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.coloradmin.cn/o/1673151.html

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

相关文章

多维 HighChart

showHighChart.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><!-- js脚本都是官方的,后两个是highchart脚本 --><script type"text/javascript" src"jquery1.7.1.min.js"&g…

10.nginx模板(开启监控取值页面)

nginx模板(开启监控取值页面) 1.开启监控页面 vim nginx.conflocation /nginx_status {stub_status;} systemctl restart nginx.server网页展示 导入模板&#xff0c;nginx监控模板zbx_nginx_template.xml <?xml version"1.0" encoding"UTF-8"?…

智慧畜牧:RFID技术在现代屠宰场的应用

智慧畜牧&#xff1a;RFID技术在现代屠宰场的应用 RFID猪肉溯源管理解决方案是一种利用无线射频识别&#xff08;Radio Frequency Identification&#xff0c;简称RFID&#xff09;技术来实现猪肉从养殖、屠宰到销售整个供应链过程中的追踪与追溯的现代化管理手段。这一方案通…

微服务部署不迷茫:4大部署模式深度解析,轻松驾驭云原生时代

微服务部署最全详解(4种常见部署模式) 微服务多实例部署 每个微服务都独立部署在自己的运行环境中&#xff0c;这是微服务架构的核心思想。 一般会采用每个主机多个服务实例&#xff0c;如下所示&#xff1a; 这是一种传统的应用部署方法&#xff0c;每个服务实例在一个或多个…

万事通,专精部分领域的多功能 Transformer 智能体

介绍 我们很高兴分享“万事通”(Jack of All Trades&#xff0c;简称 JAT) 项目&#xff0c;该项目旨在朝着通用智能体的方向发展。该项目最初是作为对 Gato (Reed 等&#xff0c;2022 年) 工作的公开复现启动的&#xff0c;Gato 提出训练一种能够执行视觉与语言以及决策任务的…

程序员学CFA——经济学

经济学 需求和供给分析消费者需求分析需求的相关概念需求需求定律需求函数需求曲线消费者剩余 需求弹性需求的自身价格弹性需求的交叉价格弹性需求的收入弹性 替代效应与收入效应替代效应收入效应替代效应和收入效应的综合作用 需求定律的例外 生产商供给分析供给分析的基本概念…

UniGen:用于生成自动驾驶场景的初始智体状态和轨迹的统一建模

24年5月谷歌WayMo论文“UniGen: Unified Modeling of Initial Agent States and Trajectories for Generating Autonomous Driving Scenarios”。 本文介绍 UniGen&#xff0c;一种生成交通场景的新方法&#xff0c;用于通过仿真评估和改进自动驾驶软件。 其方法在一个统一的模…

RabbitMq出现Not management user问题解决

在RabbitMq登录的时候突然弹出如下图&#xff1a; 提示“当前用户不是管理员用户”进入mq控制命令台下&#xff1a; windows版本在mq安装路径下的sbin下进入cmd弹出框&#xff1b; Linux版本没有测试&#xff1b; 输入以下命令&#xff1a; rabbitmqctl list_users 查询当…

python:__new__和__init__

python&#xff1a;__new__和__init__ 1 前言 在Python中&#xff0c;每个对象都有两个特殊的方法&#xff1a;__new__和__init__。这两个方法在对象的创建和初始化过程中起着重要的作用&#xff0c;但它们的功能和用法有所不同。 1.1 功能上的区别 __new__方法是Python中的…

【管理咨询宝藏101】普华永道并购尽调内部培训

【管理咨询宝藏101】普华永道并购尽调内部培训 【格式】PDF版本 【关键词】普华永道、兼并收购、尽职调查 【核心观点】 - 尽职调查的目的&#xff0c;发现潜在的致命缺陷&#xff0c;判断是否继续交易进程&#xff1b;发现潜在的问题&#xff0c;制定交易前后相应的应对措施。…

换个暴露又发一区(IF=10.1)!双样本孟德尔随机化+脂质组学发了高分

孟德尔随机化的热度一直很高&#xff0c;不少想发文的对此肯定又爱又恨。今天我们看的这篇文章就仅用了双样本孟德尔随机化的方法&#xff0c;看似显而易见的关系&#xff0c;竟然结合了脂质组学&#xff0c;立马升华&#xff0c;发表一区&#xff08;IF10.1&#xff09;&#…

ARIMA预测模型介绍

ARIMA&#xff08;Autoregressive Integrated Moving Average&#xff09;模型是一种常用的时间序列分析方法&#xff0c;能够对非平稳时间序列进行建模和预测。本文将详细介绍ARIMA模型的建模步骤&#xff0c;包括数据预处理、模型识别、参数估计和模型检验等环节&#xff0c;…

`unordered_map` 和 `unordered_set`

unordered —— 无序的&#xff0c;从表面上来看&#xff0c;与 map 和 set 不同之处就在于&#xff0c;unordered_map 和 unordered_set 无法保证插入数据是有序的&#xff1b; 尽管如此&#xff0c;由于这两种容器内部封装了“哈希桶”&#xff0c;可以实现快速查找数据 ——…

白话机器学习5:卷积神经网络(CNN)原理

1.神经元 激活函数f(z)的种类&#xff1a; 2.卷积方法种类 https://mp.weixin.qq.com/s/FXzTbMG64jr93Re31Db2EA 标准卷积&#xff08;Standard Convolution&#xff09;: 特点&#xff1a;每个卷积核在输入数据的整个深度上滑动&#xff0c;计算输出特征图的一个元素。应用场…

STM32有什么高速接口吗?

STM32 有一些高速接口&#xff0c;比如 USART、SPI、I2C 等&#xff0c;这些接口可以用于与外部设备进行高速数据传输。我这里有一套stm32入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习stm32&#xff0c;不妨点个关注&#xff0c;给个评论…

JavaSE——集合框架一(2/7)-Collection集合的遍历方式-迭代器、增强for循环、Lambda、案例

目录 Collection的遍历方式 迭代器 增强for循环&#xff08;foreach&#xff09; Lambda表达式遍历集合 案例 需求与分析 代码部分 运行结果 Collection的遍历方式 迭代器 选代器是用来遍历集合的专用方式&#xff08;数组没有选代器&#xff09;&#xff0c;在Java中…

【爬虫之scrapy框架——尚硅谷(学习笔记one)--基本步骤和原理+爬取当当网(基本步骤)】

爬虫之scrapy框架——基本原理和步骤爬取当当网&#xff08;基本步骤&#xff09; 下载scrapy框架创建项目&#xff08;项目文件夹不能使用数字开头&#xff0c;不能包含汉字&#xff09;创建爬虫文件&#xff08;1&#xff09;第一步&#xff1a;先进入到spiders文件中&#x…

LabVIEW开发RS422通信

LabVIEW开发RS422通信 项目围绕LabVIEW软件开发的程序在RS422通信技术检测方面的应用进行展开&#xff0c;通过软件编程将上位计算机虚拟化为检测设备&#xff0c;控制其通信端口与被测产品进行RS422通信&#xff0c;以此检验产品的性能优劣。该虚拟检测仪器在实际测试中表现出…

C++17新特性 结构化绑定

一、Python中的相似功能 熟悉python的应该对下面的代码很熟悉 def return_multiple_values():return 11, 7x, y return_multiple_values()函数返回一个元组&#xff0c;元组自动分配给了x和y。 二、C11中的元组 c11中就存在类似python元组的概念了&#xff1a; std::tupl…

【简单介绍下Milvus】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…