语言切换不是"消失",是被任务中心的固定浮层压在下面完全点不到。控件仍然渲染、仍然可见、仍在无障碍树里,只是所有点击都被拦截 —— 所以看起来像消失,但比消失更难排查。
实测
在 1180×760(桌面窗口默认尺寸)下用真实样式表测量:
| 元素 |
top |
bottom |
z-index |
position |
.language-picker |
706 |
744 |
auto |
static |
.task-center |
708 |
744 |
20 |
fixed |
两者重叠 179 × 36 px,几乎完全覆盖。把命中测试打在语言 <select> 的正中心:
document.elementFromPoint(cx, cy)
// → <SPAN> (任务中心内部的元素)
// sel.contains(hit) === false
所以点击落在任务中心上,不会落到 select 上。
.theme-picker 的 bottom 正好是 706,差 2px 躲过了,这就是为什么只有语言那一个坏掉 —— 看起来像"这个按钮不见了"而不是"底部一片区域点不了"。
根因
app.css:1941:
.task-center {
position: fixed;
left: 12px;
bottom: 16px;
z-index: 20;
width: calc(var(--sidebar-width) - 24px);
}
任务中心在 #43(4e6d663 feat: change task manager to pop up style)改为弹出式后脱离了侧栏的 flex 流。NavigationSidebar.tsx:58 的注释也写明了「The task centre is fixed to the viewport's lower-left corner」。
问题在于:它脱流之后,侧栏底部不再为它预留空间。.theme-picker 的 margin-top: auto 把主题和语言两行推到底部,而底部现在被一个 36px 高的浮层占着。
修法方向
不要靠调 bottom 或 z-index 去躲 —— 那只是把碰撞挪到别的窗口高度上。让侧栏为浮层留出空间才是结构上正确的做法,例如给侧栏底部 padding-bottom 等于任务中心高度加间距,或者让任务中心回到 flex 流内、只让展开后的面板浮起来。
补测试时用 elementFromPoint 打在每个侧栏交互控件的中心,断言命中的就是它自己。纯粹断言 display 或 visibility 抓不到这个 bug —— 该控件这两项都是正常的。
顺带一提,--sidebar-width 在 1180px 断点处会变成 204px(app.css:992),任务中心的宽度是从这个变量算的,所以验证要覆盖 1180px 以上和以下两档。
语言切换不是"消失",是被任务中心的固定浮层压在下面完全点不到。控件仍然渲染、仍然可见、仍在无障碍树里,只是所有点击都被拦截 —— 所以看起来像消失,但比消失更难排查。
实测
在 1180×760(桌面窗口默认尺寸)下用真实样式表测量:
.language-picker.task-center两者重叠 179 × 36 px,几乎完全覆盖。把命中测试打在语言
<select>的正中心:所以点击落在任务中心上,不会落到 select 上。
.theme-picker的 bottom 正好是 706,差 2px 躲过了,这就是为什么只有语言那一个坏掉 —— 看起来像"这个按钮不见了"而不是"底部一片区域点不了"。根因
app.css:1941:任务中心在 #43(
4e6d663feat: change task manager to pop up style)改为弹出式后脱离了侧栏的 flex 流。NavigationSidebar.tsx:58的注释也写明了「The task centre is fixed to the viewport's lower-left corner」。问题在于:它脱流之后,侧栏底部不再为它预留空间。
.theme-picker的margin-top: auto把主题和语言两行推到底部,而底部现在被一个 36px 高的浮层占着。修法方向
不要靠调
bottom或z-index去躲 —— 那只是把碰撞挪到别的窗口高度上。让侧栏为浮层留出空间才是结构上正确的做法,例如给侧栏底部padding-bottom等于任务中心高度加间距,或者让任务中心回到 flex 流内、只让展开后的面板浮起来。补测试时用
elementFromPoint打在每个侧栏交互控件的中心,断言命中的就是它自己。纯粹断言display或visibility抓不到这个 bug —— 该控件这两项都是正常的。顺带一提,
--sidebar-width在 1180px 断点处会变成 204px(app.css:992),任务中心的宽度是从这个变量算的,所以验证要覆盖 1180px 以上和以下两档。