C6.30.4Arrow keys remapped to text direction设计研究
方向键左右移动光标的语义需要按文本方向重新映射,不能假设固定对应
别名: 方向键与 bidi · 左键逻辑前 · visual 移动
概念解释
键盘上的左箭头在拉丁编辑器里通常表示“逻辑上往前(更小的下标)”,同时视觉上也往左。RTL 或混排里,这两件事不能再绑死。有的产品让左箭头始终往屏幕左边走(视觉移动),有的让它始终减逻辑下标(逻辑移动)。必须按文本方向重新映射,并在同一产品里保持一种约定;假设“左就是下标减一”在阿拉伯段落会把光标从视觉前一个字跳到视觉后一个字。
机制
逻辑移动:左箭头在 LTR 减下标,在 RTL 仍减下标,光标在画面上向右走——对 RTL 用户这才是“回到刚写的字”。视觉移动:左箭头总是朝屏幕左,逻辑下标在 RTL run 里反而增加。混排时,视觉移动会在 run 边界跳到逻辑上很远的地方;逻辑移动会在画面上跳跃。操作系统文本框、浏览器 contenteditable、自定义画布各选一套,用户在同一篇文档的不同控件里会遇到相反的箭头。没有重映射的自绘控件等于把拉丁假设写死。
怎么研究
在 LTR、RTL、混排三种段落里记录左/右箭头每按一次后的逻辑索引与屏幕 x。请母语使用者标出他们期望的是视觉还是逻辑。比较系统文本框与产品自绘编辑器是否一致。不要只测英文。快捷键(Ctrl+左)按词跳转时,词边界也要按书写方向定义。
边界
游戏、地图等空间界面里的箭头表示屏幕方向,不应跟文本方向走。电子表格的单元格导航是网格,不是文本 run。竖排里“左”可能表示上一行,映射表要换成上/下。读屏用户听的是逻辑偏移,视觉移动会让他们与视力用户的光标分叉。
怎么落地
- 文本编辑器选定一种约定(推荐:纯 RTL 用逻辑移动,使“左”回到刚写的字),在帮助里用一句话写清。
- 自绘控件不要复用 LTR 的 keyCode==Left → index--。
- 与系统文本框混用时,跟系统约定走,避免同一窗口两套箭头。
- 验证:在纯阿拉伯词末按一次“回到上一字符”的键,光标应落到该词最后一个字的另一侧(视觉右、逻辑减);若落到词首或跳进别的词,映射还是拉丁假设。