EN
展现形式 · 概念

Empty State:空状态

说明 Empty State 空状态如何区分从未有过、被条件排除与加载失败三类原因,给出下一步行动,不伪装成有内容,对应各模块的状态与退化,并明确空状态与加载、错误状态的边界及状态通知要求。

Empty State 是容器里没有可显示内容时的呈现:空购物车、无搜索结果、无筛选结果、无评价、无订单。它是在没有内容的地方给出原因和下一步,不是留白,也不是用别的内容顶替。它与 Toast 的区别是:空状态占据内容所在的位置并持续存在,Toast 是短暂的操作反馈。

适合与不适合

适合列表、结果集、购物车、评价区等内容位置为空时。不适合用来表达尚未加载完(加载状态)或请求失败(错误状态);也不适合未登录、无权限这类需要认证而不是“没有内容”的情形,那要给出登录入口。

与相邻模式的区别

对比对象判据
加载状态加载表示结果未到,会变化;空状态表示结果已到且为空。加载中不得显示“暂无”,否则结果到达后内容会闪现
错误状态错误表示没能取到结果,应说明失败并可重试;不能显示成“没有内容”。搜索与筛选模块都明确写了失败不显示成无结果
ToastToast 短暂消失,空状态持续到内容出现;重要的原因与下一步不放进 Toast
Inline Form空状态可以内嵌一个入口(如订阅到货、联系我们),但主要任务是解释原因与引导,不是收集信息

优点与缺点

优点缺点
顾客知道为什么为空,不误以为页面坏了三类原因混为一谈会误导判断
给出下一步,避免死胡同用无关内容填充会被理解为搜索命中
可以减少客服咨询文案要跟随原因与场景分别维护
与各模块共享退化口径图片与插画增加加载成本,还需替代文字

内容与交互要求

三类原因必须分别表达:

原因含义写法与下一步
从未有过该对象本来就没有内容(新购物车、无订单、商品暂无评价)说明现状并给出开始的入口:继续浏览、推荐入口、写评价(有资格时)
被条件排除有内容,但被搜索词、筛选或时间范围排除回显当前条件,提供清除条件、放宽条件、上级分类与联系入口;不显示为“暂无商品”
加载失败内容可能存在但没取到说明未完成并可重试,保留顾客输入与上一次成功的结果;不宣称“没有”

三类下一步的共同要求:标题直说原因(“没有找到与‘xx’相关的商品”),不使用含糊的“哎呀”;不伪装成有内容——不用无关商品、其他商品的评价或占位数据冒充;按钮文案说明去向(“查看全部商品”)。示例文案均属虚构示例。

响应式与无障碍

空状态出现是内容变化,需要让不看屏幕的用户知道。WCAG 2.2 SC 4.1.3 Status Messages 以“搜索后页面更新并出现‘5 results returned’”为例:状态消息可以通过 role="status" 传达,错误与警告用 role="alert"。MDN 说明 status 角色是隐含 aria-live="polite" 的实时区域,不应给它焦点,且该区域必须先存在于 DOM,再注入内容才能被播报。因此“无结果”文案放进事先存在的 status 区域,而不是把焦点抢到空状态。

图片或插画属装饰时不提供冗余描述,含信息时要有文字替代(SC 1.1.1 Non-text Content)。空状态里的入口都是真实可聚焦的链接或按钮。文字在小屏不截断,操作在放大文本下仍可达。

状态与退化

零项即是空状态本身;一项与多项时空状态消失,不留残余占位。加载:保留原内容或用与最终尺寸一致的占位,不显示“暂无”;MDN 说明加载区域可设置 aria-busy="true",完成后移除。错误:单独的错误表达,见上表。无 JavaScript:服务端渲染的空状态必须仍可读,入口是普通链接。减少动态:不使用循环动画插画。

各模块对应的处理:

  • 空购物车:保留页面或抽屉,给出继续浏览入口,结账入口不可用并说明原因,见购物车摘要。
  • 无搜索结果:回显原词,给出检查拼写提示、热门分类与联系入口,不用无关商品冒充,见站内搜索。
  • 无筛选结果:列出已选条件并可逐项移除,提供清除全部与上级分类,见集合浏览与筛选。
  • 无评价:写“暂无评价”,保留写评价入口,不借用其他商品的评价,见评价展示。
  • 无订单:属账户页语境,在 modules 目录范围内未找到对应模块。

常承载的内容与模块

购物车摘要、站内搜索、集合浏览与筛选、评价展示。下一步入口常用联系入口、商品分类与精选商品;推荐商品需说明它们不是搜索或筛选命中。

发布前检查

  • 是否区分了从未有过、被条件排除、加载失败三类原因?
  • 每个空状态是否给出下一步,入口是否真实可用?
  • 是否没有用无关内容冒充结果?
  • “无结果”是否通过 status 区域通知,而不抢焦点?
  • 加载与错误是否没有显示成“暂无”?

待继续完善

  • 账户页“无订单”在 modules 目录内未找到对应模块,需另写。
  • 空状态文案的效果没有可引用的证据,不作断言。