From 9ee1261b90944c5d6671fd642028594a5979331e Mon Sep 17 00:00:00 2001 From: chenshoulin Date: Sat, 24 Oct 2026 00:11:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20=E9=87=8D=E5=81=9A=E6=B7=B1?= =?UTF-8?q?=E8=89=B2=E6=82=AC=E5=81=9C=E4=B8=8E=E9=94=AE=E7=9B=98=E7=84=A6?= =?UTF-8?q?=E7=82=B9=EF=BC=8C=E8=A1=A5=E9=BD=90=E5=BC=B9=E5=B1=82=E5=87=BA?= =?UTF-8?q?=E5=9C=BA=E5=8A=A8=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 悬停:上一版靠「底色跳两档 + 四边边框一起提亮 + 外圈白光晕 + 白环」制造悬浮感, 五个变化同向叠加,结果是整张卡片均匀发亮、看着像换了张更浅的卡,光晕还把边缘糊住。 改用明暗方向表达厚度:新增受光层伪元素(顶部白 7% → 底部黑 14%,悬停淡入), 配一道锐利的接触阴影压实边界、一层远处柔化投影作高度暗示;底色与边框各只提一档。 过渡 150ms → 200ms ease-out。新增按下态:位移归零、阴影收紧、受光减弱,卡片「落回纸面」。 焦点:全局描边在深色下掺透明度柔化(sky-400 78%);卡片被 :focus-visible 时与悬停 一致地抬起并受光,焦点环退为最后一道提示,不再是一圈生硬方框。顺带删掉 :focus-visible 里的 border-radius: 4px —— 对带 rounded-* 的元素无效(layer 优先级), 对没圆角的元素反而会让聚焦瞬间跳一下。 动效:新增 pop-in(160ms) / sheet-in(260ms) / scrim-in(200ms) 三组关键帧, 下拉从锚点上方落入、抽屉自右侧滑入、遮罩淡入,组件上一律配 motion-reduce:animate-none。 只做入场不做退场:关闭是用户主动取消,瞬时消失更利落;做退场要引入 Vue Transition, 会牵扯 SideDrawer 的焦点与卸载时序,收益不抵风险。 实现要点: - Tailwind v4 会把 @theme 的阴影值内联进 --tw-shadow,覆盖 CSS 变量对已生成的工具类 无效,深色阴影因此直接重写 box-shadow,且规则不放进 @layer 以压过原子类; 选择器要按 hover: 变体转义后的类名书写(.hover\:shadow-card-hover),否则静默失效 - 焦点态位移不能只改 --tw-translate-y:translate 属性声明只存在于 :hover 那条原子类 规则里,焦点态不经过 :hover,必须直接写 translate - 受光层要画在内容之下,因此 TaskCard 的内容容器补了 relative(同为定位元素时按 DOM 顺序绘制,伪元素在前) 验证:vue-tsc -b 与 eslint src 干净,738 例全量单测通过;Playwright 读计算样式确认 动画时序(下拉 @30ms opacity .909、抽屉 translateX 214.77px、遮罩 opacity .419), 并用垂直亮度剖面确认卡片上亮下暗(内部亮度 33 → 20)。 --- src/components/BatchSelectionBar.vue | 2 +- src/components/SideDrawer.vue | 4 +- src/components/TagFilter.vue | 2 +- src/components/TagInput.vue | 2 +- src/components/TaskCard.vue | 6 +- src/style.css | 168 +++++++++++++++++++++++---- 6 files changed, 156 insertions(+), 28 deletions(-) diff --git a/src/components/BatchSelectionBar.vue b/src/components/BatchSelectionBar.vue index f785409..aa2e0a4 100644 --- a/src/components/BatchSelectionBar.vue +++ b/src/components/BatchSelectionBar.vue @@ -236,7 +236,7 @@ function onDueChange(value: string | null): void {