fix(ui): 日期占位改用不透明遮罩盖住原生文字,不再依赖伪元素着色

把 ::-webkit-datetime-edit 系列伪元素设为透明的做法在部分环境下不生效,
空值日期框会同时显示自绘的「选择日期」与原生「yyyy/mm/日」,文字重叠。

改为用一层不透明背景直接盖住原生提示:靠绘制顺序生效,不依赖伪元素支持
与 CSS 选择器匹配;显示时机由 Vue 状态(空值 && 未聚焦)控制。同时删掉
style.css 里已失效的 .date-field--blank 规则。
This commit is contained in:
chenshoulin
2026-10-18 18:54:47 +08:00
parent 54c08d6ade
commit c45d2b72b4
3 changed files with 68 additions and 40 deletions
+3 -18
View File
@@ -73,22 +73,7 @@
}
/*
* 空值的日期输入框:遮住浏览器自带的格式提示。
* Edge 会按页面 lang 拼出「yyyy / mm / 日」这种半英半中的提示,
* 既与界面语言不统一,又容易被误读成已经有内容。
*
* 只在未聚焦时遮挡 —— 否则聚焦编辑时连正在输入的数字都看不见。
* 同时覆盖输入框本身与各分段伪元素,避免不同 Chromium 版本着色位置不一致。
*
* 刻意写在 @layer 之外:Tailwind 的 utilities 层优先级高于 components 层,
* 若放进层里会被 text-slate-700 之类的工具类盖掉。也不写成 Tailwind 任意变体,
* 因为那依赖扫描器从模板字符串里提取类名,HMR 或增量构建时容易漏。
* 注:日期输入框空值时的原生提示(「yyyy / mm / 日」)不在这里处理。
* 试过把 `::-webkit-datetime-edit` 系列伪元素设成透明,但部分环境下不生效,
* 已改为在 DatePicker.vue 里用不透明占位层直接盖住。
*/
.date-field--blank:not(:focus),
.date-field--blank:not(:focus)::-webkit-datetime-edit,
.date-field--blank:not(:focus)::-webkit-datetime-edit-text,
.date-field--blank:not(:focus)::-webkit-datetime-edit-year-field,
.date-field--blank:not(:focus)::-webkit-datetime-edit-month-field,
.date-field--blank:not(:focus)::-webkit-datetime-edit-day-field {
color: transparent;
}