alt属性必须直接写在<img>标签内,仅当图片纯装饰或相邻文本已完整覆盖图意时可用,SVG需用<title><desc>并加role="img",动态渲染须防undefined导致alt失效。
很多人误以为给 <a> 或 <div> 加 alt 就能“传递”到内部图片,这是错的。HTML 规范明确要求 alt 是 <img> 自身的必需属性(除非是纯装饰且已用其他方式描述),浏览器和读屏器只认这个位置。
常见错误:
<a href="/home"><img src="logo.png"></a> —— 没写 alt,读屏器会朗读“链接,图片”,用户完全不知道是什么
<a href="/home" ><img src="logo.png"></a> —— alt 被加在 <a> 上,对图片无效
<img src="logo.png" >
alt 应说明链接目的,比如 ,而不是仅描述图像alt 很容易被发现;JS 动态插入时更易出错,需确保每个 new Image() 或 createElement('img') 都显式设置 alt
合法,但只适用于两类情况:图片纯装饰(如分隔线、背景花边),或已有相邻文本完整覆盖图意(比如图紧跟一段含所有关键信息的段落)。其他任何情况都算违规。
<img src="chart.png" > —— 图表含数据,哪怕旁边有标题“Q2销售趋势”,也得在 alt 里简述核心结论,如
<img src="icon-search.png" > —— 搜索图标功能明确,应写 或
alt 属性,得用 <title> + <desc>,且父容器要加 role="img" 才能被读屏器识别React、Vue 或原生 JS 渲染列表图片时,alt 常因状态未就绪、条件分支遗漏或变量未定义而失效。例如 Vue 模板中写 <img :src="item.imgUrl" :>,一旦 item.desc 是 null 或 undefined,最终生成的就是 或 ,比没写还糟。
:,React 中用 alt={item.desc ?? '图片描述缺失'}
alt 字段非空,必要时后端做兜底<img> 标签是否真有 alt 属性及其值,别只信 JS 变量名如果图片里有文字(比如错误提示截图、活动海报、产品参数表),alt 文本就得把所有关键文字抄进去,一个字都不能省——这不是“重复”,而是让无法看图的人获得同等信息。
<img src="404-page.png" >
违反 WCAG,读屏器念出来毫无逻辑 对用户毫无意义alt,而是判断这张图对当前上下文到底承载什么信息——是功能按钮?数据呈现?情绪传达?还是纯粹视觉装饰?这个判断错了,后面所有操作都是徒劳。