C2.02.2Visual and hit target size separation设计研究

视觉尺寸与命中尺寸可以分离

别名: 命中区 · 视觉尺寸 · invisible hit slop · tap target padding

概念解释

一个控件"看起来多大"(视觉尺寸)和"点哪里能触发"(命中尺寸,即命中区/热区)可以是两个不同的几何形状和范围。常见做法是给一个视觉上很小巧的图标配一个更大的、不可见的命中区(业内称为 invisible hit slop 或 tap target padding),既维持紧凑的视觉密度,也满足上一条讲的触达下限。

机制

为什么这种分离在工程上完全可行?渲染管线负责把图形画到屏幕上,命中测试是另一套独立的逻辑——判断一个触摸坐标落在哪个可交互区域内,两者只要共享同一份布局坐标系,命中区完全可以画得比视觉元素大。这个分离能成立的前提是:绝大多数框架里的命中测试是"点是否落在某个矩形/多边形内"的简单几何判断,与渲染时用到的路径、透明度、圆角这些视觉细节完全无关——所以扩大命中区不需要重新设计视觉,只需要在命中测试层加一圈不可见的 padding。这也意味着这个分离是单向透明的:用户能感知到的只是"点了看起来没对准的地方也生效了"这个结果,感知不到背后其实存在两套几何。

怎么研究

可以用真实点击热图验证隐藏命中区是否达到预期效果:分别记录同一批用户在"仅视觉尺寸即命中区"和"视觉尺寸加隐藏 padding"两种版本下的落点坐标分布,对比命中率变化,并分别统计"点在视觉图标外但仍触发"和"点在视觉图标内却因命中区被邻居截断而未触发"这两类事件的发生率。后一种通常出现在两个视觉小图标紧挨着、命中区互相截断的场景,是单纯加大命中区无法自动消除的问题,只有把两类事件分开看才会发现。

边界

命中区扩大到与相邻控件重叠时会产生歧义:如果两个图标的隐藏命中区互相覆盖,需要额外的优先级规则(谁离触点质心更近、谁在视觉层级更靠前)来决定响应者,否则同一次点击在不同实现下可能触发不同控件——这是纯视觉设计环节容易忽略的工程细节。可访问性工具(屏幕阅读器的焦点框、开关控制的可点击高亮)通常按视觉边界或无障碍语义边界生成,如果只在触摸命中测试里悄悄放大命中区而不同步给这些工具,会出现"触摸能点中但辅助功能焦点框够不到"的不一致。禁用、加载等视觉上已改变状态的控件,命中区也必须随之收回,否则会出现"看起来不能点却仍能触发"的错误反馈。

怎么落地

  • 把命中区当作布局系统的独立参数显式声明,而不是让默认的视觉边框兼任命中边框;设计交付件里同时标出视觉尺寸和命中尺寸两个数字。
  • 检查相邻小图标的隐藏命中区是否互相重叠,用调试工具把命中区可视化出来核对边界,而不是仅凭肉眼估算。
  • 保证禁用、加载等状态变化时命中区与视觉状态同步收放,并让屏幕阅读器等辅助功能的可点击语义边界与命中区保持一致。

延伸

  • 同组C2.02.1 触达尺寸下限由指尖接触面积而非视力决定 · C2.02.3 各平台的推荐下限不同,不可混用 · C2.02.4 边缘与角落的目标需要额外余量
  • 相邻C2.03 触摸目标的最小间距 · C2.20 触摸目标的形状与命中区
  • 站内检索hit slop · invisible hit area · tap target padding

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C2.02.2