E2.17.3clear-control inner-width collision设计
清空按钮占用输入区右侧空间
别名: 清空挤占输入 · clear button overlap · 叉挡住末尾字
概念解释
清空叉画在槽的右内边。值一长,末尾字符就会钻进叉的底下:看不见最后一个字,点「编辑末尾」却触发了清空。清空与内宽的冲突(clear-control inner-width collision)要求把叉的占位算进可输入宽度,文字在叉前停下或从叉下让开。它管的是空间抢占,不是叉何时出现,也不是清完能不能撤销。
机制
槽的内宽是字符能排的水平预算。右侧叠控件(叉、密码眼睛、单位、计数)却不增加 padding,预算被偷。长值、大字体、长占位符首先牺牲末尾。光标若还能走进被盖住的区域,人以为点的是文字,命中测试却判给叉。密码格同时放眼睛和叉,两颗靶挤在同一角,误触率再翻倍。冲突在「有内容才显示叉」时才爆发:空槽看起来宽敞,一打字右侧突然变窄,布局还会跳一下。
边界
短值、宽槽、叉很小且文字左对齐时,末尾碰不到叉,冲突不出现。多行域的叉若放在右上角,只挡第一行末尾,下面几行仍安全,但第一行长标题仍会撞。逻辑像素与热区不一致时,看起来没挡住,手指已经点到叉。右到左文案里「右侧」变成阅读起点,叉会挡开头而不是末尾,更伤。
怎么落地
- 为清空(及同侧其他内嵌控件)留出不可被文字占用的内边距,长值在控件前截断或换一种省略,不要从叉下面穿过。
- 让点击文字末尾落到插入点,点击叉才清空,两块热区不要重叠。
- 密码格把显示切换和清空排开,不要叠成一堆。
- 验证:输入一段会顶到右缘的文字,看最后一个字符是否完整可见、点它会不会清槽。再开大字体、开密码格的眼睛按钮重复。文字钻进叉下或点字即清,内宽就还没把叉算进去。