Skip to content

2026-06-21 开发日志

记录时间:2026-06-21

交互与尺寸调试现场

今天做了什么

今天原本只想解决一个很具体的问题:Offcanvas 能不能直接设置宽度或高度。结果顺着这根线一拉,发现尺寸能力最好不要只照顾一个组件,于是把 Modal、Offcanvas、Toast 和 Context Menu 一起整理了。

现在四类组件都支持 widthheight

  • 数字按像素处理,例如 width: 480
  • 字符串直接使用 CSS 尺寸,例如 42rem80vh40vwcalc(...)
  • Modal 使用显式尺寸时,不再让自动适配在下一帧把它覆盖掉。
  • Toast 可以通过 handle.update() 动态调整尺寸。
  • Context Menu 保留 minWidthmaxHeight 作为安全边界。

这类 API 最怕“每个组件都有一点,但每个组件都不一样”。趁接口还没有长成灌木丛,今天把规则统一了。

那条第一次出现的黑框

右键菜单第一次唤出时,第一项会被程序主动聚焦。之前为了让键盘导航更明显,样式同时给 :focus:focus-visible 画了轮廓,结果鼠标右键也吃到了那圈焦点线,看起来像菜单突然套了一层粗黑边框。

修复方式很克制:删除普通 :focus 规则,只保留 :focus-visible。鼠标打开时不再冒黑框,键盘用户仍然能看到清晰的焦点位置。可访问性没有被拿去祭天,视觉问题也消失了。

文档站和上下文卫生

文档站地址统一到了 https://sodialog.sohophp.app,避免 canonical 与实际部署地址各说各话。

另外补了 .codexignore,把构建产物、缓存、报告和日志挡在日常上下文之外。代码助手最擅长读很多东西,但“能读”不等于“每次都值得读”;减少噪声,本质上也是给真正相关的源码多留一点注意力。

验证结果

  • 44 个组件单元测试全部通过。
  • ESLint 通过。
  • 生产构建与类型声明生成通过。
  • API、README 和组件指南已同步。

发布决定

这次改动保持向后兼容,但新增了完整的尺寸能力并修复了可见交互问题,因此发布补丁版本 v0.2.5

今天的体会是:尺寸参数看起来只是两个字段,真正的工作却是决定谁拥有最终布局控制权。答案应该很简单——使用者明确传了值,就听使用者的。

Released under the MIT License.