导航的二级菜单用 hover 展开,鼠标划过一切正常,键盘 Tab 到一级项时子菜单不出现,按回车又直接跳到了分类页。乍看像缓存或者权限的锅,追下去往往不是。
.nav-item:hover .sub,
.nav-item:focus-within .sub { display:block }
.nav-item > a:focus-visible { outline:3px solid #1a73e8 }
追下去是这么回事:展开条件只写在 hover 选择器上,键盘焦点进入不触发。子菜单虽然还在 DOM 里,但被隐藏后无法聚焦,键盘用户根本走不到里面。
「hover 菜单键盘」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
具体做法是,把展开条件补上 focus-within,焦点进入一级项时同步显示子菜单;一级项本身用按钮或链接,保证能被 Tab 到,别用纯 div;子菜单里加上下键移动,Esc 收起并把焦点还给一级项。
验收就看一点,全程不用鼠标,Tab 到一级项子菜单就展开,方向键能在子项间移动。
