Rome useAltText 规则:强制图片等元素提供无障碍替代文本的完整指南
开发工具CLILint格式化静态分析代码质量构建工具【免费下载链接】toolsUnified developer tools for JavaScript, TypeScript, and the web项目地址https://gitcode.com/gh_mirrors/to/tools点击查看免费下载本指南以 Rome 官方 lint 规则文档useAltText为核心结合仓库源码与测试用例系统讲解该规则的作用范围、判定逻辑、CLI 运行方式与配置方法。读完本文你将掌握如何借助 Rome 在 JSX/TSX 代码中强制为img、area、input typeimage与object提供有效的替代文本从而满足 WCAG 1.1.1 无障碍要求帮助依赖屏幕阅读器的用户理解页面内容。规则概览为什么需要替代文本useAltText是 Rome 从 v10.0.0 起内置的 lint 规则用于强制所有需要替代文本alternative text的元素向终端用户传递有意义的信息。替代文本是屏幕阅读器用户理解页面内容目的的关键组成部分——没有它视障用户将无法获知一张图片、一个图像按钮或一个嵌入式对象在页面中代表什么。该规则由 Rome 官方推荐recommended: true属于a11y无障碍规则组。在 crates/rome_service/src/configuration/linter/rules.rs 中可以看到A11y组共包含 22 条规则其中 20 条含useAltText被列入RECOMMENDED_RULES。这意味着只要启用 Rome 的推荐规则集useAltText就会默认生效无需额外配置。默认情况下规则检查以下四类元素的替代文本元素说明img普通图片必须提供alt或 ARIA 标签area图像映射中的可点击区域input typeimage图像形式提交按钮object嵌入式对象需要title或 ARIA 标签注规则仅作用于 JSX/JSX 元素对应 HTML 场景如.html文件不在本规则默认检查范围内。另需注意规则只检查替代文本的存在性不判断文案质量后者由noRedundantAlt等规则补充。源码级判定逻辑四种元素如何被校验规则实现位于 crates/rome_js_analyze/src/analyzers/a11y/use_alt_text.rs其核心结构如下declare_rule!宏声明规则元数据version: 10.0.0、name: useAltText、recommended: truetype Query AstAnyJsxElement规则遍历每个 JSX 元素节点use_alt_text.rsrun方法按元素标签名分派校验逻辑use_alt_text.rs。各元素的判定规则如下img与area必须满足以下任一条件否则报错存在有效的alt属性存在有效的aria-label属性存在有效的aria-labelledby属性。input typeimage仅当元素带有typeimage时才受检查has_type_image_attribute。普通input /、input typefoo /均不触发。校验属性与img相同alt/aria-label/aria-labelledby任一有效即可。object判定逻辑略有不同use_alt_text.rs优先检查title、aria-label、aria-labelledby三者皆无效时若为成对写法object.../object还会检查其内部是否包含可访问的子内容has_accessible_child()——例如objectFoo/object或objectpThis is descriptive!/p/object都算有效自闭合object /且无任何替代文本时直接报错。什么是有效的替代文本源码中两个辅助函数给出了精确定义use_alt_text.rshas_valid_alt_text检查alt属性必须带初始化器若值可静态求值则不能是null/undefined属性不能位于展开属性之后has_trailing_spread_prop为假。注意alt被视为有效空 alt 适用于装饰性图片。has_valid_label检查aria-label/aria-labelledby/title同样要求有初始化器且非null/undefined并且字符串常量不能为空字符串同时排除展开属性场景。值得注意的几个边界img alt /无值的布尔属性无效img alt{undefined} /无效img alt /有效装饰性图片约定img alt{foo} /、img alt{alt} /动态值有效img {...this.props} /因无法静态判断无效展开属性中可能缺少 altimg alt rolepresentation /有效presentation 角色下空 alt 是规范做法。运行示例错误与正确写法以下示例均来自仓库测试夹具crates/rome_js_analyze/tests/specs/a11y/useAltText 目录下的img.jsx、area.jsx、input.jsx、object.jsx可直接作为实战参考。触发错误的写法Invalidimg srcimage.png /运行 Rome 检查后诊断输出如下a11y/useAltText.js:1:1 lint/a11y/useAltText ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✖ Provide a text alternative through the alt, aria-label or aria-labelledby attribute 1 │ img srcimage.png / │ ^^^^^^^^^^^^^^^^^^^^^^^ 2 │ ℹ Meaningful alternative text on elements helps users relying on screen readers to understand contents purpose within a page.诊断消息由 diagnostic 方法 生成随附的ℹ提示解释了规则的无障碍意义。该诊断类别在 crates/rome_diagnostics_categories/src/categories.rs 中注册为lint/a11y/useAltText。其他同样会报错的常见写法input typeimage srcimage.png / area / object / img alt / img alt{undefined} / img alt aria-label / {/* aria-label 空字符串无效 */} img {...this.props} / {/* 展开属性无法确认 alt */} input typeimage aria-label / objectdiv aria-hidden //object {/* 子内容不可访问 */}通过检查的写法Validimg srcimage.png altimage alt / input typeimage srcimage.png altalt text / input typeimage srcimage.png aria-labelalt text / input typeimage srcimage.png aria-labelledbysomeId / area altThis is descriptive! / object titleAn object / objectpThis is descriptive!/p/object {/* 动态值同样有效 */} img alt{photo.caption} / img alt{alt || Alt text} /在命令行与配置中使用命令行直接检查在项目根目录存在rome.json时运行rome check path/to/file.jsx若规则在推荐集中生效违反useAltText的代码会以诊断形式输出使用--apply类参数无法自动修复该规则本规则无自动修复属于纯诊断型规则需要开发者手动补充替代文本。通过 rome.json 配置规则名在配置中写作useAltText位于linter.rules.a11y分组下。推荐集之外可显式开关{ linter: { enabled: true, rules: { recommended: true, a11y: { useAltText: warn } } } }recommended: true启用 Rome 推荐规则集useAltText已在其中无需重复声明若想关闭推荐集中的该规则可设置useAltText: off支持的值on、warn、off。warn表示仅告警、不使命令以错误码退出。配置结构对应源码 crates/rome_service/src/configuration/linter/rules.rs 中A11y结构体的use_alt_text: OptionRuleConfiguration字段该字段的序列化与反序列化逻辑见 crates/rome_service/src/configuration/parse/json/rules.rs。Rome 规则的通用开关方式还可参考仓库文档 linter 索引其中说明了非推荐规则默认关闭、可通过配置开启的机制。无障碍依据与测试保障WCAG 合规本规则直接对应 WCAG 2.1 成功标准1.1.1 非文本内容Non-text Content所有非文本内容必须提供等价的文本替代。官方说明见 WCAG 1.1.1 理解文档链接收录于 use_alt_text.rs 与 useAltText.md 的 Accessibility guidelines 小节。测试用例体系仓库为规则维护了完整的规格测试夹具crates/rome_js_analyze/tests/specs/a11y/useAltTextimg.jsx覆盖img的 14 组 invalid 与 30 组 valid 场景area.jsx覆盖area的 9 组 invalid 与 valid 场景input.jsx覆盖input typeimage的 10 组 invalid 与 valid 场景object.jsx覆盖object的 8 组 invalid 与 valid 场景含title、可访问子内容两种豁免路径。每个.jsx文件对应一份.snap快照如 img.jsx.snap精确记录了每条违规的诊断位置与消息任何判定逻辑的变更都会在快照测试中被捕获。这些夹具同时被website侧文档useAltText.md的示例引用保证文档示例与真实行为始终一致。常见问题小结疑问结论空alt会不会报错不会alt对装饰性图片是合法写法没有值的alt布尔属性呢会报错has_valid_alt_text要求属性带初始化器input /会触发吗不会仅input typeimage触发自定义组件Img /会触发吗不会规则对自定义组件首字母大写直接跳过is_custom_component()object能用title代替吗可以title是object特有的有效替代途径动态表达式 alt 呢只要不是静态null/undefined/空串即视为有效通过useAltText规则Rome 在 CI 或编辑器集成VSCode 扩展 / LSP中即可将无障碍问题前置拦截帮助团队在编码阶段守住 WCAG 1.1.1 的底线。赞分享开发工具CLILint格式化静态分析代码质量构建工具【免费下载链接】toolsUnified developer tools for JavaScript, TypeScript, and the web项目地址https://gitcode.com/gh_mirrors/to/tools点击查看免费下载相关推荐Rome 无障碍 lint 规则 useMediaCaption 详解强制 audio/video 元素提供字幕轨道Rome 无障碍 lint 规则 useMediaCaption 详解强制 audio/video 元素提供字幕轨道 本篇技术指南聚焦 Rome本仓库统一开发工具CLILint格式化静态分析代码质量构建工具Rome 无障碍规则 noDistractingElements禁止 marquee 与 blink 等干扰性元素Rome 无障碍规则 noDistractingElements禁止 marquee 与 blink 等干扰性元素 RomeUnified develo开发工具CLILint格式化静态分析代码质量构建工具Rome 无障碍规则 noRedundantAlt 完全指南杜绝 img 替代文本中的冗余措辞Rome 无障碍规则 noRedundantAlt 完全指南杜绝 img 替代文本中的冗余措辞 noRedundantAlt 是 Rome本仓库 unifi开发工具CLILint格式化静态分析代码质量构建工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

CANN ops-nn 算子 aclnnMaxPool3D 完整指南:两段式接口、三种 Padding 模式与 NPU 端到端调用实战

CANN ops-nn 算子 aclnnMaxPool3D 完整指南:两段式接口、三种 Padding 模式与 NPU 端到端调用实战

CANN ops-nn 算子 aclnnMaxPool3D 完整指南:两段式接口、三种 Padding 模式与 NPU 端到端调用实战 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 导读 …

2026/9/20 20:52:16 阅读更多 →
内存充足却卡死?从事件日志到硬件超频的系统排查指南

内存充足却卡死?从事件日志到硬件超频的系统排查指南

如果你的电脑配置了 64GB 内存,平时根本没跑到过半,结果最近两三周里莫名其妙卡死了 6 次——鼠标还能动,系统就是没反应,动两下直接黑屏或者屏幕定格,重启之后一切又正常,任务管理器里内存占用也不高&…

2026/9/20 20:52:16 阅读更多 →
项目投资管理流程图全解析:从初筛到退出的关键节点与实操要点

项目投资管理流程图全解析:从初筛到退出的关键节点与实操要点

简介:这是一份项目投资管理流程图PPT,面向企业战略规划人员、投资决策层及参与投资评估的财务、市场、运营管理者,用于梳理新项目立项前的规范管理路径。内容完整展示了从战略规划部提出项目投资目标与构想、决策层审核确认、跨部门组建评估小…

2026/9/20 20:52:16 阅读更多 →

最新新闻

深入解析 DBX 的 MongoDB 索引管理:从 listIndexes 原始命令到集合右键面板的全链路实现

深入解析 DBX 的 MongoDB 索引管理:从 listIndexes 原始命令到集合右键面板的全链路实现

深入解析 DBX 的 MongoDB 索引管理:从 listIndexes 原始命令到集合右键面板的全链路实现 【免费下载链接】dbx 25 MB lightweight cross-platform database client for 90 databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, an…

2026/9/20 21:23:34 阅读更多 →
pyodbc 调 SQL Server 存储过程取不到返回结果?让 Codex 走 TaoToken 对着游标查

pyodbc 调 SQL Server 存储过程取不到返回结果?让 Codex 走 TaoToken 对着游标查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 21:23:34 阅读更多 →
10分钟录音训出专属音色:RVC变声器完整上手指南

10分钟录音训出专属音色:RVC变声器完整上手指南

10分钟录音训出专属音色&#xff1a;RVC变声器完整上手指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-We…

2026/9/20 21:23:34 阅读更多 →
cAdvisor Kafka 存储驱动实战:容器指标写入 Kafka 的完整配置与源码解析

cAdvisor Kafka 存储驱动实战:容器指标写入 Kafka 的完整配置与源码解析

cAdvisor Kafka 存储驱动实战&#xff1a;容器指标写入 Kafka 的完整配置与源码解析 【免费下载链接】cadvisor Analyzes resource usage and performance characteristics of running containers. 项目地址: https://gitcode.com/gh_mirrors/ca/cadvisor 本文围绕 cAdv…

2026/9/20 21:23:34 阅读更多 →
深入解析 @mdx-js/react:基于 React Context 的 MDX 组件注入机制与实战指南

深入解析 @mdx-js/react:基于 React Context 的 MDX 组件注入机制与实战指南

深入解析 mdx-js/react&#xff1a;基于 React Context 的 MDX 组件注入机制与实战指南 【免费下载链接】mdx Markdown for the component era 项目地址: https://gitcode.com/gh_mirrors/md/mdx 导读 mdx-js/react 是 MDX 生态中负责「组件注入」的轻量核心包&#xf…

2026/9/20 21:23:34 阅读更多 →
QuickRecorder:不到 10MB 的 macOS 录屏工具 — 4K、双音轨、透明背景都能录

QuickRecorder:不到 10MB 的 macOS 录屏工具 — 4K、双音轨、透明背景都能录

QuickRecorder&#xff1a;不到 10MB 的 macOS 录屏工具 — 4K、双音轨、透明背景都能录 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://g…

2026/9/20 21:22:33 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事&#xff1a;用Flutter给OpenHarmony做一款游戏集合类的App&#xff0c;说白了就是把若干小游戏塞进一个壳里&#xff0c;用统一入口分发。这个方向本身不算新鲜&#xff0c;真正让我花了不少心思的&#xff0c;是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档&#xff0c;最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事&#xff1a;今天在表后面多加了两个空白行&#xff0c;明天给客户交稿前发现整个章节的编号全部错位&#xff0c;光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年&#xff0c;说实话&#xff0c;第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年&#xff0c;流量惨淡、功能臃肿、代码自己都懒得看第二遍之后&#xff0c;我才慢慢琢磨明白一个道理&#xff1a;第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事&#xff1a;用Flutter给OpenHarmony做一款游戏集合类的App&#xff0c;说白了就是把若干小游戏塞进一个壳里&#xff0c;用统一入口分发。这个方向本身不算新鲜&#xff0c;真正让我花了不少心思的&#xff0c;是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档&#xff0c;最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事&#xff1a;今天在表后面多加了两个空白行&#xff0c;明天给客户交稿前发现整个章节的编号全部错位&#xff0c;光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年&#xff0c;说实话&#xff0c;第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年&#xff0c;流量惨淡、功能臃肿、代码自己都懒得看第二遍之后&#xff0c;我才慢慢琢磨明白一个道理&#xff1a;第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →