空列表应由数据驱动渲染,长度为0时只渲染语义化空提示文案,避免display切换;需区分“无数据”与“加载失败”,移动端确保热区≥44×44px且文案可读可操作。
空列表时直接显示提示文案,别用 CSS 隐藏/显示切换
空状态不是靠
控制显隐,而是由数据驱动——列表数组长度为 0 时,DOM 里就不该渲染
,只留提示文案。否则会多一层 DOM 判断逻辑,也容易在 SSR 或 hydrate 阶段出现闪烁或不一致。
常见错误是写两套结构:
渲染列表 +
渲染提示,但忘了加 key 或没处理过渡;React 里则有人用
后接
渲染提示,结果空数组 map 出来是空数组,
还是空数组,根本不会显示文案。
Vue:用
包住
,
块放提示文案,确保两者互斥且无残留节点
React:写成
,别依赖 falsy 判断(比如
是 number,但
检查的是数组本身)
纯 HTML + JS:渲染前先判断
,然后
,避免插入空
提示文案要带语义化标签,别只用
空状态不是装饰,是可访问性关键路径。屏幕阅读器需要知道“这里本该有列表,但现在没有”。用
包文案,它默认是
,无法传达结构意图。
正确做法是复用列表容器的语义层级:如果主列表是
,空状态就用
+
,并加
和
。这样当数据加载完成、列表出现时,辅助技术能感知到内容变更。
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
不要:
推荐:
如果必须用非列表结构(如卡片式空态),至少加
和
关联标题
后列表为空,得区分“没数据”和“加载失败”
空列表不等于正常流程终点。用户看到“暂无数据”,可能以为功能坏了,其实可能是接口返回了
但
,也可能是网络中断、401、500 导致根本没拿到数据——这两者提示文案、操作按钮、重试逻辑都不同。
关键在请求状态管理:不能只看响应体是否为空,得结合
、
、以及
是否触发。
成功响应但 data 为空 → 显示“暂无符合筛选条件的数据”,可带重置筛选按钮
网络错误或非 2xx 状态 → 显示“加载失败”,按钮文案为“重新加载”,并绑定重试函数
避免把
里的 error message 直接展示给用户(比如 “TypeError: Failed to fetch”),要映射为用户能理解的提示
移动端空状态需预留足够点击热区,别让文案变成“不可点的摆设”
很多空页面在手机上放个“+ 新建”按钮,但文案紧贴底部、字号小、行高窄,手指点下去经常失焦。这不是 UI 问题,是交互链路断裂:用户想操作,却找不到明确入口。
解决重点不在美化,而在行为引导。空状态区域本身应具备可点击性(哪怕只是透传到按钮),且热区尺寸符合移动最小触控标准(建议 ≥ 44×44px)。
把整个空状态容器设为
,按钮用
居中,并包裹在
内(别用
)
文案行高设为
,字体不小于
,上下留白至少
如果空状态含多个操作(如“新建”“导入”“查看帮助”),用垂直排列 + 足够间距,别挤成一排
空状态最容易被忽略的,其实是加载中(loading)与空状态(empty)的边界。很多人把 skeleton 或 loading 动画和空提示混在一起,导致用户无法分辨“是还没好,还是真没了”。这两个状态必须严格分离,且 loading 结束后,立刻根据实际数据决定进入 success / empty / error 分支——中间不插任何“过渡文案”。
display: noneliv-ifv-elsemap()||[] || '暂无数据'v-if="list.length"ulelse{list.length === 0 ? NoData /> : list.map(...)}list?.lengthlist ||data.length === 0container.innerHTML = data.length ? htmlList : htmlEmptyuldivdivrole=genericululliaria-live="polite"aria-label暂无数据- 暂无数据
role="region"aria-labelledbyfetch200data: []response.okresponse.statuscatchtry/catchdisplay: flexmargin: autobuttondiv + click1.516px24px