From 23b23dc8e5975e129aaf545eda66a46276cfea6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Thu, 3 Sep 2026 17:03:08 +0800 Subject: [PATCH] =?UTF-8?q?style(element-ui):=20=E5=8C=BA=E5=88=86=20el-se?= =?UTF-8?q?lect=20=E9=80=89=E4=B8=AD=E5=80=BC=E4=B8=8E=E5=8D=A0=E4=BD=8D?= =?UTF-8?q?=E7=AC=A6=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复 Element Plus el-select 组件选中值与占位符使用同一节点导致无法区分颜色的问题 - 只有未选值或已展开无搜索时节点带 .is-transparent,用此类排除选中颜色样式应用 - 更新 --- .workbuddy/memory/2026-09-03.md | 7 +++++++ src/styles/element-ui.scss | 15 +++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/.workbuddy/memory/2026-09-03.md b/.workbuddy/memory/2026-09-03.md index ad1bf9c..4edfd3b 100644 --- a/.workbuddy/memory/2026-09-03.md +++ b/.workbuddy/memory/2026-09-03.md @@ -15,3 +15,10 @@ - 根因:`__dispatch-shipping-form __route-address-row` 网格地址列为 `minmax(280px, 1fr)`,各列最小宽度合计 1030px,弹窗不够宽时 grid 不换行直接溢出。 - 修复:地址列改 `minmax(0, 1fr)`(宽屏仍 1fr 拉伸,窄窗自动收窄,总最小宽降到 750px)。 - 备注:基础规则 `__route-address-row`(13750 行,运单独立表单页等在用,7 列含 40px 按钮列)仍是 minmax(280px,1fr),同样窄窗有溢出风险,暂未动(用户未反馈该页问题)。 + +## el-select 选中值 / 占位符颜色区分(全局) +- 需求:已选值 #606266,未选值保持 placeholder 灰 #909399。 +- 根因:Element Plus 的选中值文本与占位符**共用同一节点** `
`,仅靠 `.el-select__selected-item` 无法区分,导致未选态也被染成选中色。 +- 区分标志:只有「未选值」或「已展开但无搜索输入」时才带 `.is-transparent`。 +- 修复(`src/styles/element-ui.scss`):选中规则改为 `.el-select__wrapper:not(.is-disabled) .el-select__selected-item:not(.is-transparent)`;多选 tag 文字另加 `.el-select__tags-text` 规则(tag 自身 color 优先级更高,父级规则盖不到)。 +- 经验:以后写任何「区分 el-select 有值/无值」的 CSS,一律用 `:not(.is-transparent)`。 diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss index cba5269..e5439c6 100644 --- a/src/styles/element-ui.scss +++ b/src/styles/element-ui.scss @@ -1117,11 +1117,18 @@ color: #909399 !important; } -// 已选中:选中文本用主文字色 #333333,与占位符明显区分。 -// 注意:Element Plus 选中值节点同时带 el-select__selected-item 与 el-select__placeholder 两个类, -// 而上面占位符规则用了 !important,故此处必须同样 !important 才能胜出(本规则 specificity 更高)。 +// 已选中:选中文本用主文字色 #606266,与占位符明显区分。 +// 关键:Element Plus 的「选中值文本」与「占位符」共用同一个节点, +//
+// 只有未选值(或已展开但无搜索输入)时才会带 .is-transparent。 +// 因此这里必须排除 .is-transparent,否则未选值的占位符也会被染成选中色,与占位符灰无法区分。 // 仅作用于非禁用态,禁用态保留 Element Plus 的禁用灰(--el-select-disabled-color),避免被覆盖。 -.el-select__wrapper:not(.is-disabled) .el-select__selected-item { +.el-select__wrapper:not(.is-disabled) .el-select__selected-item:not(.is-transparent) { + color: #606266 !important; +} + +// 多选:选中项渲染为 el-tag,文字色由 tag 自身控制,上面规则覆盖不到,单独处理。 +.el-select__wrapper:not(.is-disabled) .el-select__tags-text { color: #606266 !important; }