Vue3 + Element Plus表格筛选样式设置

如果弹出框挂载在 body 下(而非组件内部),scoped 样式无法生效,这时就需要使用全局样式。
强制全局样式

1、添加全局样式文件(或在原有的文件中添加以下内容) src/assets/global.scss

/* 全局强制样式覆盖 *//* 表格筛选器样式 */
/* 表格筛选器样式,筛选内容区域 */
.el-popper.is-light.el-table-filter .el-table-filter__content {min-width: 100px;
}
/* 表格筛选器样式,底部操作区域 */
.el-popper.is-light.el-table-filter .el-table-filter__bottom {display: flex !important;justify-content: space-between !important;align-items: center !important;padding: 8px 12px !important;
}
/* 表格筛选器样式,底部操作区域,按钮元素 */
.el-popper.is-light.el-table-filter .el-table-filter__bottom button {font-size: 14px;
}
/* 表格筛选器样式,底部操作区域,按钮元素,开头的按钮,筛选 */
.el-popper.is-light.el-table-filter .el-table-filter__bottom button:first-child {color: black;
}
/* 表格筛选器样式,底部操作区域,按钮元素,最后的按钮,重置 */
.el-popper.is-light.el-table-filter .el-table-filter__bottom button:last-child {color: black;
}

也可以使用scss嵌套写法

/* 全局强制样式覆盖 *//* 表格筛选弹窗 */
/* 表格筛选弹窗容器 */
// .el-popper.is-light.el-table-filter {
// .el-popper[class*="el-table-filter"] 是一个稳健的选择器写法,专为 Element Plus 动态类名场景设计,能有效解决因类名顺序或动态类导致的样式覆盖失效问题
.el-popper[class*="el-table-filter"] {/* 筛选内容区域 */.el-table-filter__content {min-width: 100px;max-height: 450px;}/* 滚动条容器 */.el-scrollbar {height: 100% !important; /* 继承内容容器高度 *//* 滚动可视区域 */.el-scrollbar__wrap {max-height: 100% !important;overflow: auto !important;}/* 内容视图 */.el-scrollbar__view {min-height: 100% !important; /* 防止内容不足时高度塌陷 */padding: 8px; /* 内容内边距 */}}/* 底部操作区域 */.el-table-filter__bottom {display: flex !important;justify-content: space-between !important;align-items: center !important;padding: 8px 12px !important;/* 按钮元素 */button {font-size: 14px;}/* 开头的按钮,筛选 */button:first-child {margin-left: 0;}/* 最后的按钮,重置 */button:last-child {margin-right: 0;}}
} 

2、在 main.ts 中,导入全局样式文件 global.scss

......
// 引入全局样式
import "@/assets/global.scss";

样式效果:

 

获取使用全局样式的调试方法 :

  1. 在浏览器中 手动添加样式 测试:

    • 打开开发者工具 (F12)

    • 找到底部按钮元素 <div class="el-table-filter__bottom">

    • 在 Styles 面板右侧点击 +,手动输入以下代码:

    .el-table-filter__bottom {background: red;
    }

如果手动添加的样式生效,说明需要 全局样式

全局样式设置讲解说明

一、选择器拆解

css

复制

下载

.el-popper.is-light.el-table-filter .el-table-filter__bottom

可以分解为三个层级:

  1. .el-popper

    • 表示这是一个弹出层容器(popper.js 生成的浮层容器)

  2. .is-light

    • 表示这是一个「浅色主题」的弹出层(Element UI 的视觉主题修饰符)

  3. .el-table-filter

    • 表示这是一个「表格列筛选器」的特定组件

  4. .el-table-filter__bottom

    • 表示筛选器底部的操作区域(子元素)


二、层级关系解析

1. 父容器结构

html

复制

下载

运行

<!-- 组合类名的父容器 -->
<div class="el-popper is-light el-table-filter"><!-- 内部包含的子元素 --><div class="el-table-filter__bottom"></div>
</div>
  • .el-popper.is-light.el-table-filter
    表示同时拥有这三个类名的元素(多个类名直接连接,中间没有空格)

  • .el-table-filter__bottom
    是该容器的后代元素(中间的空格表示后代选择器)


2. 实际匹配的 DOM 结构

假设 Element UI 生成的 HTML 结构如下:

html

复制

下载

运行

<!-- 表格列筛选器浮层 -->
<div class="el-popper is-light el-table-filter" style="position: absolute; top: 100px; left: 200px;"><!-- 筛选内容区域 --><div class="el-table-filter__content">...</div><!-- 底部操作区域 --><div class="el-table-filter__bottom"><button>重置</button><button>确定</button></div>
</div>
  • 选择器会精准匹配到 最后一个 <div class="el-table-filter__bottom"> 元素


三、选择器特点

1. 复合类名选择

el-popper.is-light.el-table-filter 表示同时满足:

  • 是弹出层容器(.el-popper

  • 使用浅色主题(.is-light

  • 属于表格列筛选器(.el-table-filter

2. 后代选择器

最后的空格表示 .el-table-filter__bottom 是前面复合容器的子元素

3. 高特异性(Specificity)

这种写法比单一类名选择器(如 .el-table-filter__bottom)具有更高的优先级,可以覆盖默认样式


四、实际作用总结

这个选择器的本质是:
「针对 Element UI 中所有使用浅色主题的表格列筛选弹出框,精准定位到它的底部操作区域」

相当于在代码层面完成了以下筛选逻辑:

js

复制

下载

if (元素是弹出层容器 && 是浅色主题 && 是表格筛选器) {找到它的底部操作区域元素
}

五、为什么需要这样写?

  1. 精准定位:避免样式污染其他弹出层(如日期选择器、下拉菜单等)

  2. 主题适配:仅针对浅色主题的筛选器(深色主题不受影响)

  3. 覆盖默认样式:通过高特异性选择器覆盖组件库默认样式

这种选择器写法是 Element UI 等组件库开发中常见的 BEM + 状态修饰符 的组合用法。

.el-popper.is-light.el-table-filter

.el-popper[class*="el-table-filter"]

.el-popper[class*="el-table-filter"] 是一个 复合 CSS 选择器,它的含义可以通过拆解来理解:


语法解析

组成部分含义
.el-popper匹配所有 class 属性中包含 el-popper 类的元素
[class*="el-table-filter"]匹配 class 属性值中 包含子字符串 el-table-filter 的元素
组合后的选择器匹配同时满足以下条件的元素:
1. 包含 el-popper 类
2. class 属性中包含 el-table-filter

为什么这样写?

Element Plus 的筛选弹窗 DOM 结构通常是这样的:

html

复制

下载

运行

<div class="el-popper is-pure is-light el-table-filter" ...><!-- 弹窗内容 -->
</div>

这里:

  • el-popper 是 Element 弹窗组件的基类

  • el-table-filter 是表格筛选功能特有的标识类

但实际渲染时,Element 可能会动态添加其他修饰类(如 is-lightis-pure),导致类名顺序或数量不确定。使用 [class*="el-table-filter"] 可以:

  1. 避免依赖类名顺序

  2. 兼容未来可能的类名变化

  3. 覆盖嵌套在其他组件中的弹窗


与直接写 .el-table-filter 的区别

写法问题场景
.el-table-filter如果弹窗的类名是 el-popper el-table-filter,直接选择器有效
.el-popper.el-table-filter如果类名顺序变化(如 el-table-filter el-popper),选择器会失效
.el-popper[class*="el-table-filter"]无论类名顺序如何,只要包含 el-table-filter 子字符串就生效

实际应用场景

假设 Element 在不同版本中渲染出以下结构:

html

复制

下载

运行

<!-- 旧版本 -->
<div class="el-popper el-table-filter is-light"><!-- 新版本 -->
<div class="el-table-filter el-popper is-pure"><!-- 动态场景 -->
<div class="el-popper some-dynamic-class el-table-filter">

使用 [class*="el-table-filter"] 可以 通配所有可能性,保证选择器始终生效。


性能与风险

优点注意事项
更强的兼容性过度使用 *= 可能误匹配其他包含 el-table-filter 子字符串的类名
避免类名顺序依赖确保目标元素的 class 中确实包含 el-table-filter
简化版本升级适配建议配合开发者工具验证实际 DOM 结构

验证方法

在浏览器开发者工具中:

  1. 打开 Elements 面板

  2. 找到筛选弹窗的 DOM 元素

  3. 检查其 class 属性是否包含 el-table-filter

    验证示例


总结

.el-popper[class*="el-table-filter"] 是一个 稳健的选择器写法,专为 Element Plus 动态类名场景设计,能有效解决因类名顺序或动态类导致的样式覆盖失效问题。

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

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

相关文章

vue--ofd/pdf预览实现

背景 实现预览ofd/pdf超链接功能 业务实现 pdf的预览 实现方式&#xff1a; 直接使用 <iframe :src"${url}#navpanes0&toolbar0" /> 实现pdf的预览。 navpanes0 隐藏侧边栏toolbar0 隐藏顶部工具栏 使用pdf.js&#xff0c;代码先行&#xff1a; <tem…

【C++20新特性】ranges::sort()使用方法,优势,注意点

以下是关于 ranges::sort() 的详细说明&#xff1a; 1. ranges::sort() 的使用方法 ranges::sort() 是 C20 引入的基于范围&#xff08;Ranges&#xff09;的排序函数&#xff0c;其语法更简洁&#xff0c;支持直接操作容器或范围对象。 (1)基本用法 #include <vector&g…

深入理解设计模式之适配器模式

深入理解设计模式之适配器模式 1. 适配器模式概述 适配器模式(Adapter Pattern)是一种结构型设计模式&#xff0c;它允许将一个类的接口转换为客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类能够协同工作&#xff0c;扮演了"转换器&quo…

【数据结构 · 初阶】- 快速排序

目录 一. Hoare 版本 1. 单趟 2. 整体 3. 时间复杂度 4. 优化&#xff08;抢救一下&#xff09; 4.1 随机选 key 4.2 三数取中 二. 挖坑法 格式优化 三. 前后指针&#xff08;最好&#xff09; 四. 小区间优化 五. 改非递归 快速排序是 Hoare 提出的一种基于二叉树…

第2周 PINN核心技术揭秘: 如何用神经网络求解偏微分方程

1. PDEs与传统数值方法回顾 (Review of PDEs & Traditional Numerical Methods) 1.1 什么是偏微分方程 (Partial Differential Equations, PDEs)? 偏微分方程是描述自然界和工程领域中各种物理现象(如热量传播、流体流动、波的振动、电磁场分布等)的基本数学语言。 1.…

Neo4j(二) - 使用Cypher操作Neo4j

文章目录 前言一、Cypher简介二、数据库操作1. 创建数据库2. 查看数据库3. 删除数据库4. 切换数据库 三、节点、关系及属性操作1. 创建节点与关系1.1 语法1.2 示例 2. 查询数据2.1 语法2.2 示例 3. 更新数据3.1 语法3.2 示例 4. 删除节点与关系4.1 语法4.2 示例 5. 合并数据5.1…

RabbitMQ的Web管理页面给我看懵了,这都什么意思啊

文章目录 OverviewTotalsMessage RatesQueued Messages NodesChurn StatisticsPorts and ContextsExport DefinitionsImport Definitions ConnectionsChannelsExchangesQueuesAdmin他们之间的关联 在上一篇文章中我们讲到了如何在Windows中安装Rabbitmq&#xff0c; 小白也能搞…

安全基础与协议分析

5.1 Web安全基础 5.1.1 Web安全基础概览&#xff08;一、二&#xff09; Web安全的核心目标是保护Web应用及其数据免受攻击&#xff0c;涵盖以下关键领域&#xff1a; 攻击面&#xff1a; 前端漏洞&#xff08;XSS、CSRF&#xff09;。 后端漏洞&#xff08;SQL注入、RCE&a…

STM32项目实战:ADC采集

STM32F103C8T6的ADC配置。PB0对应的是ADC1的通道8。在标准库中&#xff0c;需要初始化ADC&#xff0c;设置通道&#xff0c;时钟&#xff0c;转换模式等。需要配置GPIOB的第0脚为模拟输入模式&#xff0c;然后配置ADC1的通道8&#xff0c;设置转换周期和触发方式。 接下来是I2C…

第十四章:数据治理之数据源:数据源的数据接入、业务属性梳理及监控

本章开始&#xff0c;将进入9大模块的介绍。第一个模块我们先介绍&#xff1a;数据源。数据源是整个数据中台数据的来源&#xff0c;是一个起点。更好的管理好数据源这个起点&#xff0c;是数据治理的一个好的开始。 在【数据&#xff1a;业务生数据&#xff0c;数据生“万物”…

【C/C++】多线程开发:wait、sleep、yield全解析

文章目录 多线程开发&#xff1a;wait、sleep、yield全解析1 What简要介绍详细介绍wait() — 条件等待&#xff08;用于线程同步&#xff09;sleep() — 睡觉&#xff0c;定时挂起yield() — 自愿让出 CPU 2 区别以及建议区别应用场景建议 3 三者协作使用示例 多线程开发&#…

阿里云CDN刷新预热--刷新URL

文章目录 一、全英文URL刷新预热二、掺杂中文的URL刷新预热2.1 对带中文URL进行编码2.2 预热刷新 三、CDN刷新-核心作用与价值3.1 核心作用3.2 核心价值3.3 典型使用场景 *最后我想说&#xff1a;请你不要相信我说的每一句话&#xff0c;这只是我的个人经验* 一、全英文URL刷新…

Oracle 19c DG备库报错ORA-00313、ORA-00312、ORA-27037

Oracle 19c DG备库报错ORA-00313、ORA-00312、ORA-27037 错误排查问题处理错误排查 DG同步完成后,DG Broker show database发现以下告警信息: Database Warning(s):ORA-16826: apply service state is inconsistent with the DelayMins propertyORA-16789: standby redo log…

开源与闭源之争:AI时代的创新博弈与未来抉择

在人工智能技术狂飙突进的今天&#xff0c;开源与闭源之争已不再局限于技术圈的讨论&#xff0c;而是演变为一场关乎技术伦理、商业格局乃至人类文明走向的深度博弈。当Meta的Llama 3开源模型下载量突破百万&#xff0c;当OpenAI的GPT-5继续加固技术壁垒&#xff0c;这场没有硝…

NIFI的处理器:JSLTTransformJSON 2.4.0

该处理器使用JSLT转换FlowFile JSON有效负载的格式。使用转换后的内容创建新的FlowFile&#xff0c;并将其路由到“成功”关系。如果JSLT转换失败&#xff0c;则将原始FlowFile路由到“失败”关系。 需要注意的是&#xff0c;编译JSLT转换可能相当昂贵。理想情况下&#xff0c…

MySQL 索引失效及其解决办法

一、前言 在数据库优化中,索引(Index)是一项至关重要的技术手段,可以显著提升查询性能。然而,在实际开发过程中,MySQL 索引并不总是如预期生效。本文将从原理出发,系统地介绍索引失效的常见场景及其解决方案,帮助开发者有效规避性能陷阱。 二、索引基础回顾 MySQL 支…

趋势触发策略

趋势触发策略(TS版)是一种基于TrendTriggerFactor(TTF)的交易策略,通过柱状图颜色变化指示市场趋势的强度,并根据TTF的穿越信号进行买卖操作。 TTF是通过计算买方力量和卖方力量的差值除以两者之和的一半再乘以100得到的。 当TTF大于100时,柱状图显示为绿色,表示市场…

DeepSeek-R1 模型现已在亚马逊云科技上推出

亚马逊云科技提供众多免费云产品&#xff0c;可以访问&#xff1a;亚马逊云科技 在刚刚过去的 Amazon re&#xff1a;Invent 期间&#xff0c;Amazon 首席执行官 Andy Jassy 分享了从 Amazon 自己在全公司开发近 1000 个生成式 AI 应用程序的经验中汲取的宝贵经验。从这种广泛…

中台项目-微前端qiankun-umimax

学习视频&#x1f50a; 基础&#xff1a; 黑马前端基于qiankun搭建微前端项目实战教程_哔哩哔哩_bilibili 路由、部署配置注意&#xff1a;qiankunvite微前端上线注意事项&#xff0c;base公共路径设置_哔哩哔哩_bilibili 微前端 什么是微前端&#xff1f; 微前端是将前端应…

【Java学习笔记】代码块

代码块 介绍&#xff1a;代码块又称为初始化块&#xff0c;属于类中的成员&#xff08;即是类的一部分&#xff09;&#xff0c;类似于方法&#xff0c;将逻辑语句封装在方法体中&#xff0c;通过{}包围起来 与类方法的不同点 无方法名 无返回类型 无参数 只有方法体&#…