Skip to content

style: keep the native select popup readable and ring-free on Windows - #4

Merged
koi128bit merged 1 commit into
koi128bit:mainfrom
z91300:style/provider-select-popup
Oct 26, 2026
Merged

koi128bit merged 1 commit into
koi128bit:mainfrom
z91300:style/provider-select-popup

Conversation

@z91300

@z91300 z91300 commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

现象

Windows 上「客户端」下拉框展开后是一块系统浅色面板,选项文字却是浅色(--text),几乎读不清;同时点开下拉时下拉框会亮起 3px 珊瑚色聚焦描边。macOS 上弹层跟随窗口深色外观,看起来正常,所以只在 Windows 暴露。

原因

  • Chromium 在 Windows 上的 <select> 弹层使用系统浅色菜单面板,不跟随页面的 color-scheme: dark,也不受 nativeTheme.themeSource 影响;macOS 的弹层跟随窗口外观,因此正常。
  • option 没有自己的颜色声明时,文字继承 select 的 color: var(--text)(#eeeef1),于是浅底浅字。
  • 全局 button/input/select/textarea:focus-visible 统一加了 outline: 3px solid var(--focus),点开下拉即触发,与 Raycast Dark 的克制风格不符。

改动

src/styles.css,+14 / −2:

  1. 给弹层补上深色表面与对比文字,并让字号跟控件一致:

    select option,
    select optgroup {
      background-color: var(--surface);
      color: var(--text);
      font: inherit;
    }
  2. 把 select 从全局聚焦环规则中移除,并显式关闭它的 outline;按钮与输入框的键盘聚焦环保持不变。

  3. .provider-switcher select 的右侧内边距 8px → 26px,选中「WorkBuddy 国际版」这类长名称时文字不再贴住下拉箭头。

验证

Windows + Electron 44.9.3 实机(真实 preload / IPC,非浏览器 mock):

计算样式 修复前 修复后
option background rgba(0, 0, 0, 0)(透出浅色面板) rgb(31, 31, 35)
select outline rgba(255, 140, 140, 0.65) solid 3px none
  • 目视:列表变为深底浅字、逐项可读;下拉框周围不再出现珊瑚色边框;长名称与箭头不再重叠。
  • npm run build 通过;npm test 206 项,204 通过,0 失败,2 跳过(与改动前一致)。UI 测试里的 selectOption(...) 仍走原生 select,无需改动。
  • 影响面:全局 select,桌面工作台与菜单栏面板里的其它下拉(设置、API、用量、旅行地点等)同步受益;没有改动任何 DOM 结构或交互行为。

取舍说明

按要求移除了 select 的聚焦环。按钮与输入框的键盘聚焦提示保持不变;如果希望 select 在键盘 Tab 时仍有提示,可以改成只换边框色(border-color: var(--line-strong))而不画外圈,需要的话我调整。

@z91300

z91300 commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

说明:CI 里 macOS 的 npm run test:ui 失败与本改动无关。失败的 3 个用例来自我上一个 PR #3 引入的回归——apiFor() 从「Proxy 实时读取」改成了「一次性拷贝方法值」,而 UI 用例会在页面挂载后替换 window.workbuddy.*,于是 App 一直用旧函数。

修复已提在 #5,本地完整跑过 36 项 UI 用例(含失败的这 3 项)全绿。#5 合并后我会把本分支 rebase 到最新 main 再确认一次,届时本 PR 的 CI 应该转绿。

本 PR 只改 src/styles.css(+14/−2),不涉及 src/providers.ts。

@koi128bit
koi128bit merged commit 88387a6 into koi128bit:main Oct 26, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants