EN
展现形式 · 概念

Hotspot:图片热点标注

说明 Hotspot 图片热点如何在 Shop the look 与场景图上标注可点击的商品或说明,区分 Media Gallery 与 Overlay,并覆盖文字等价、键盘与触摸目标、裁切漂移和每个热点的可售状态。

Hotspot 在一张图片的特定位置放置可聚焦、可点击的标记,每个标记指向图中某个具体对象,如商品、部件或说明。它的关键是「位置有语义」:点在哪里,就说明图里那一处是什么。这一点区别于 Overlay:Overlay 只是文字与媒体的层叠关系,位置不指向图内对象。

适合与不适合

适合 Shop the look、场景图里的多件商品、产品结构图的部件说明。不适合只有一件商品的普通主图、标注位置本身没有意义的情形,以及图上需要标注很多点的复杂场景。这些应改用 Cards 或 List。

与相邻模式的区别

模式判据
Hotspot标记的位置对应图中对象;点击打开该对象的信息或链接
Media Gallery同一对象的多个视角,通过缩略图或序列切换;不在单张图上定位
Overlay文字或控件叠在图上,位置不指向图内的具体对象
Popover热点点击后的常见展示方式,是信息层,不是标注本身

优点与缺点

优点缺点
把场景与商品直接关联,不用来回对照位置随裁切与缩放漂移,维护成本高
一张图承载多个入口小屏上标记难点、易重叠
保留场景语境没有文字等价时,键盘与读屏用户无法使用

内容与交互要求

每个热点是一条记录:位置(相对图片的坐标)、对象名称、目标(商品页、变体或说明)、当前可售状态。

  • 文字等价:图旁必须有一份列表,列出全部热点的名称、价格、状态与链接。这份列表是无障碍等价、小屏退化与无 JavaScript 的共同基础;热点与列表项可以互相高亮,但列表须独立可用。
  • 名称:热点是控件,WCAG 1.1.1 Non-text Content 要求控件有描述其用途的名称;名称用对象名称,如「亚麻衬衫」,不是「热点 3」。场景图本身的 alt 描述场景。
  • 展开内容:悬停或聚焦显示的内容须满足 WCAG 1.4.13:可关闭、可悬停、持久;细节见 Popover。信息多时改用抽屉或跳转,不在热点里做购买决策。
  • 数量:每张图的热点数量要设上限,避免标记彼此遮挡。

响应式与无障碍

键盘与焦点:WCAG 2.1.1 Keyboard 要求所有功能都能用键盘操作,因此热点用 <button> 或 <a>,Tab 顺序与视觉阅读顺序、旁边的列表顺序一致。WCAG 2.4.11 Focus Not Obscured (Minimum)(AA)要求获得焦点的组件不被作者创建的内容完全遮住,弹出层不能压住当前热点。

触摸目标:WCAG 2.5.8 Target Size (Minimum)(AA)要求指针目标至少 24×24 CSS 像素,例外包括:小目标周围以其包围盒中心画出的 24 像素直径圆不与其他目标相交;同一页面另有达标的等价控件;行内目标;用户代理控制的尺寸;以及尺寸与间距对信息本身必不可少(页面举例为地图标记)。做法是视觉标记可以小,但可点击区域扩到不低于 24 像素;AAA 的 2.5.5 Target Size (Enhanced) 要求 44×44 CSS 像素,建议触屏优先场景靠近该值。同页的文字列表可能构成「等价」例外,但不要靠它规避小目标;商品热点是否算「必不可少」的例外,本库不默认成立。

位置漂移:坐标应当保存为相对图片自身宽高的百分比,并保持容器与图片同一宽高比。MDN 说明 object-fit: cover 在宽高比不一致时会裁切图片,此时容器百分比与图片内容脱节,热点会偏移,甚至落到被裁掉的区域。可行做法:小屏不裁切;不同裁切各存一套坐标;或者在裁切后重新换算,被裁出可见范围的热点在列表中保留、在图上不显示。替换图片或更换裁切后必须重新校准坐标。MDN 的 map 页只给出 area 的坐标示例,未说明其在响应式下的表现,本文未核验,不推荐用 image map 做响应式热点。

缩放与放大:320 CSS 像素宽度与大字号下,标记与弹出层不得越出视口。

状态与退化

  • 零个热点:显示普通图片与说明,不显示空标记层。
  • 一个热点:不需要图层,直接在图旁写商品与链接。
  • 多个:限制上限,列表始终完整。
  • 图片加载中或失败:先显示列表;不显示悬空的标记。
  • 商品状态:见下节。
  • 无 JavaScript:图片下方的列表可用;热点可以退化为指向列表锚点的链接。
  • 减少动态:不做脉冲或弹跳的吸引动画。

每个热点的商品可售状态

热点指向商品时,价格与可售状态由运行时数据决定,不写死。Shopify 的 product.available 表示商品至少有一个变体可售,variant.available 表示某个变体是否可售(shopify.dev,核验于 2026-09-29)。指向特定变体的热点读取该变体状态,见商品选型模块。商品售罄、已下架或不在当前市场销售时:图上标记保留但显示状态,或撤下标记,并在列表中说明;不要把顾客带到无法购买的页面。image.aspect_ratio 在 Liquid 中返回图片宽高比小数值,可用于容器比例;focal_point 在对象页未读到,未核验。

常承载的内容与模块

内容多为商品展示与使用场景(其页面列出 Hotspot Image 作为可采用的展现)。用用户生成内容做场景图时,授权范围是否覆盖二次编辑与在图上标注商品,需另行确认。相邻模块:商品选型模块、变体媒体模块。本库现有主题解读中未涉及热点组件,Shopify 主题内置能力未核验。

发布前检查

  • 位置是否真的对应图内对象?
  • 是否有独立、完整的文字列表?
  • 键盘可达、有可见焦点,弹出层不遮住触发点?
  • 可点击区域是否不低于 24×24 CSS 像素?
  • 各断点与裁切下,热点是否仍落在对象上?
  • 每个热点的可售状态是否来自运行时数据?

固定版本主题实现

  • Horizon 媒体放大与热点:Horizon 4.2.0 有 sections/product-hotspots.liquid,解读中列出了与本文契约的差距。Dawn 解读未涉及热点标注。

固定基线为 Dawn v15.3.0 与 Horizon 4.2.0;结论限于这两个提交,均为静态源码分析,未运行验证。

待继续完善

  • 未在真实设备验证触摸命中与读屏行为。
  • 未核对 area 坐标响应式行为、Liquid focal_point 与主题内置热点。
  • 缺少经过授权的场景图样例;样例须标为虚构示例。