EN
展现形式 · 概念

Badge:徽章与标签

说明「新品」「售罄」「-20%」「Best seller」这类 Badge 徽章标签的规则来源、时间窗与口径,与信任标志和促销内容的边界,以及颜色、对比度、屏幕阅读器读出和数量控制。

Badge 是附着在商品、卡片或图片上的简短文字标签,用一两个词说明对象的状态或属性,例如「新品」「售罄」「-20%」「Best seller」。它是展现,不是内容:标签内容要么来自运行时状态,要么来自可核验的规则,不能由设计师凭感觉贴上去。与 Trust Badges 的区别是:后者是带发证主体的认证事实,Badge 只是承载它的小标签样式之一。

适合与不适合

适合状态(售罄、预售)、时间性属性(新品)、价格事实(折扣百分比)、榜单类事实(畅销)。不适合传达需要解释的条件(改用正文或 Popover)、长句,以及没有规则来源的装饰性「热卖」「推荐」。可点击的筛选标签(chip)是交互控件,不是 Badge。

与相邻模式的区别

对象判据
Badge附着于某个对象的状态或属性简称,通常不可交互
Overlay层叠关系;Badge 常以 Overlay 方式叠在图上,但也可以放在标题旁,不依赖叠图
Cards卡片是承载单元,Badge 是卡片上的一个元素
Trust Badges内容类型:发证主体、适用范围、有效期都要可核验,见该页
促销 Banner / Countdown承载活动规则与截止时间;Badge 只显示其中对某个对象生效的结果

优点与缺点

优点缺点
在扫读列表时快速传达状态越多越失去作用,也更容易互相矛盾
占位小,可复用于各类卡片规则不透明时容易滑向误导
可由数据字段自动驱动手动标签会过期,成为「永远的新品」

内容与规则要求

每种 Badge 必须能写出规则:由什么数据、在什么条件下、显示多久。

标签规则来源(示例口径)失效处理
售罄平台的可售状态。Shopify 的 product.available 表示至少一个变体可售,所以商品级「售罄」只能在所有变体都不可售时显示;部分变体不可售应在变体选择处说明恢复可售即撤下
预售、缺货可订销售计划或库存策略;与购买按钮文案一致状态变化即更新
新品时间窗,起点用明确字段(如发布时间),窗口长度由运营规则规定并写明超出窗口自动撤下,不靠人工
-20%当前价与对比价计算;对比价必须是真实的前价价格或对比价变化时重算;对比价不高于现价时不显示
Best seller写明指标(销量或销售额)、范围(全店或类目)、时间窗、是否扣除退货、刷新频率榜单口径变化或数据过期即撤下

折扣百分比:Shopify 的 product.compare_at_price 是各变体对比价中的最低值,并有 compare_at_price_varies 标示是否不同(shopify.dev,核验于 2026-09-29);变体折扣不同时不要用一个百分比概括,改为「最高可省」并写明范围。折扣码或自动折扣不等于划线价降价,Badge 显示的结果必须与购物车一致,见促销兑现。美国 FTC 的 Guides Against Deceptive Pricing 在 16 CFR 233.1 中把「前价」比较的合法基础定为该商品曾在一段相当长的时间内、以真实价格向公众正常标价出售的价格;为了事后大幅降价而人为抬高的前价属于虚假比较。欧盟委员会 2021/C 526 指南在 Price Indication Directive 第 6a 条的说明中,把宣布降价时要标示的「前价」定义为此前不少于 30 天内的最低价。FTC 的 Dark Patterns 报告也把「False Discount Claims」(虚构的折扣价)列为制造紧迫感的一种模式。各市场是否适用、如何适用,需要法务或合规确认。

比较级标签(Best seller、No.1、Most popular)属于对比性声明,必须保存计算口径与统计截图或导出数据;来源是第三方榜单时,转按数据证明与第三方评价处理,写明榜单名称与日期。无依据时不显示。这类声明的具体合规要求本文未核验,需要合规确认。

数量:每个对象默认最多 1 个,最多 2 个。定义优先级:状态类(售罄、预售)高于价格类,价格类高于属性类;售罄时隐藏折扣与新品。

响应式与无障碍

  • 不能只靠颜色:WCAG 1.4.1 Use of Color(A)要求颜色不是传达信息的唯一视觉手段。「售罄」「折扣」必须有文字,图标类标签要有文字或名称;红、绿之间的差别不能是唯一的区分。
  • 文字对比度:1.4.3 Contrast (Minimum)(AA)要求普通文字 4.5:1、大字号(18pt 或 14pt 粗体以上)3:1。Badge 字号通常偏小,按 4.5:1 设计。叠在图片上时使用实色底,不要依赖图片颜色,理由同 Overlay。
  • 图形与边框:1.4.11 Non-text Contrast(AA)要求识别 UI 组件与传达信息的图形对象与相邻颜色对比不低于 3:1;纯装饰不在此列。
  • 屏幕阅读器读出:用真实文本,不把文字烘焙进图片;DOM 顺序放在商品名附近,使读者知道标签属于哪个对象。「-20%」这类符号写法可能被读成减号,建议可见文字直接写「立减 20%」或「20% off」;用视觉隐藏的补充文本时,WCAG 技术 C7 说明该做法不用 display:none 或 visibility:hidden(否则辅助技术也读不到),并提醒重复使用会让读屏输出啰嗦。以上读法未在具体读屏软件中测试。
  • 文本增长:翻译或放大后标签不得撑破卡片或遮住标题。

状态与退化

无匹配规则就不渲染;数据加载中先不显示,避免闪现后消失;数据读取失败时不显示,不要退回默认「热卖」。多个规则同时命中按优先级取舍。无 JavaScript 时,由服务端输出的状态标签仍可见。减少动态时不使用脉冲、闪烁效果。

常承载的内容与模块

商品卡片、精选商品列表、集合页、商品页标题区。折扣来自促销与折扣;认证类标志由信任标志负责,不在商品卡上用 Badge 仿造。本库现有的 Horizon 固定版本解读中未涉及徽章的实现,主题层做法未核验。

发布前检查

  • 每个 Badge 有可查的规则、数据字段与撤下条件?
  • 「新品」有时间窗,「-20%」与购物车一致,「Best seller」有保存的口径?
  • 无颜色单独传达含义,文字对比度达标?
  • 每个对象的标签数量与优先级已定义?
  • 售罄标签没有把「部分变体可售」误写成整体售罄?

固定版本主题实现

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

待继续完善

  • 固定版本主题的徽章实现见「固定版本主题实现」;其他主题与版本未核对。
  • variant.inventory_policy 为 continue 时 available 的取值,官方对象页未直接说明,需实测。
  • 各市场对比较级标签和折扣标示的要求,需要合规确认。