本身不提升可访问性,关键在内部的alt属性;上加alt或aria属性无效,alt必须写在上且语义完整、一致,覆盖所有响应式变体的核心信息。

picture 本身不提升可访问性,img 上的 alt 才是关键
<picture></picture> 是个资源选择器,不是语义容器——它不参与可访问性树构建。所有屏幕阅读器只读取内部那个最终渲染的 <img> 的 alt 属性。常见错误是把 alt 写在 <source></source> 上,或者漏掉 <img> 的 alt,结果整张图对辅助技术“不可见”。
必须确保:
-
<img>标签存在且带有有效alt(不能空着、不能写“图片”“图标”这种无意义词) -
<source></source>上加任何alt、aria-label或role="img"都无效,浏览器直接忽略 - 即使用了
srcset或多格式<source></source>,alt语义仍唯一绑定到那个<img>
暗黑模式切换时,alt 文本要不要跟着变?
不用。无论 <source media="(prefers-color-scheme: dark)"></source> 加载哪张图,<img> 的 alt 必须保持一致且完整——它描述的是图像承载的信息,不是颜色样式。
比如深色 logo 和浅色 logo 都是同一品牌标识,alt 就该是 "品牌标识",而不是 "深色版品牌标识"。如果两张图语义差异极大(比如白天场景 vs 夜间场景),说明不该塞进同一个 <picture></picture>,而应拆成两个独立图像或用 aria-describedby 关联外部描述。
响应式裁剪差异大时,alt 怎么写才不丢失信息?
当 <source></source> 加载的是不同构图的图(如桌面端横幅 vs 移动端竖版头像),alt 应覆盖最完整的信息版本,或主动降级为功能描述。
- 优先描述核心意图:比如
alt="用户个人资料:张三,前端工程师,上海",而非alt="张三头像" - 避免仅描述视觉特征:“圆脸”“戴眼镜”这类细节,除非对理解上下文必不可少
- 若裁剪导致关键文字被切掉(如 banner 图里的促销文案),宁可不用
<picture></picture>,改用 CSS 背景图 + 文字层,或提供纯文本 fallback
SVG 里套 <picture></picture> 会破坏可访问性吗?
会,而且很隐蔽。SVG 自身有完整的可访问性机制:<title></title> 和 <desc></desc>,但一旦把它塞进 <picture></picture> 的 <img src="icon.svg"> 里,这些内嵌语义就全丢了——浏览器只把 SVG 当作一个位图文件处理,只读 alt。
正确做法:
- 纯 SVG 图标:直接内联 SVG,用
<title></title>+<desc></desc>,不走<picture></picture> - 需要响应式格式降级(如 WebP fallback):只能用
<img>+srcset,但要确保alt准确传达图标功能,例如alt="分享到微信" - 别试图在
<source></source>里混用 SVG 和 raster 格式——type 声明和解析逻辑不兼容,容易 fallback 失败
真正容易被忽略的点是:可访问性不靠结构复杂度堆砌,而靠每个 <img> 是否精准表达了“这张图为什么存在”。<picture></picture> 只负责加载对的图,alt 才决定它有没有被真正“看见”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











