为什么 Rust 中的无障碍性不是选项,而是必需品
当我们用 Rust 编写代码时,我们习惯于关注内存安全、速度和零成本抽象。但还有一个经常被忽视的方面——无障碍性。许多开发者认为这只是前端工程师或设计师的事。实际上,每个用 Rust 编写代码的人都可以让自己的工具、库或 Web 应用程序对残障人士更加友好。
根据世界卫生组织的数据,全球有超过 10 亿人患有某种形式的残疾。如果我们忽视 Rust 中的包容性,就会失去这个庞大的用户群体。这不仅仅关乎盲人用户——无障碍性对所有人都有帮助:从暂时受伤的人到在嘈杂环境中工作或开车的人。
在本文中,我们将探讨如何将 a11y(无障碍性的缩写) 融入不同类型的 Rust 项目:CLI 工具、Web 应用程序和 GUI。您将看到可以直接在项目中使用的实际代码示例。
CLI 中的无障碍性:让控制台对所有人都友好
乍一看,终端似乎是最不需要无障碍性的地方。但正是在这里,视力或行动障碍的人经常工作。Rust CLI 的无障碍性从简单的事情开始:
- 清晰的错误消息——使用
eprintln!输出错误,以便它们可以被单独重定向到日志或由屏幕阅读器朗读。 - 配色方案——不要只依赖颜色。添加符号或文本:
[OK]、[ERROR]。 - 清晰的输出——避免没有标签的复杂表格。
以下是一个考虑无障碍性的最小化 Rust CLI 工具示例:
use std::io::{self, Write};
fn main() { print!("请输入您的姓名:"); io::stdout().flush().unwrap();
let mut name = String::new(); io::stdin().read_line(&mut name).unwrap(); let name = name.trim();
if name.is_empty() { eprintln!("[ERROR] 姓名不能为空。"); std::process::exit(1); }
println!("[OK] 您好,{}!很高兴见到您。", name);}请注意:我们使用 eprintln! 输出错误——这是 Rust CLI 无障碍性 的标准做法。用户可以将 stderr 重定向到单独的流或文件,屏幕阅读器也更容易处理这种输出。
Rust 中的 Web 无障碍性:Yew 和 WASM
现代 Rust Web 框架,如 Yew、Leptos 或 Dioxus,允许创建完整的 SPA。在这里,Rust Web 无障碍性 不仅仅是标签的问题,而是一个架构决策。
需要遵循的 WCAG(Web 内容无障碍性指南) 基本原则:
- 对比度——文本在背景上应清晰可读。
- 键盘导航——所有元素都应可通过 Tab 键访问。
- ARIA 属性——为屏幕阅读器提供额外的标签。
- 语义化标记——使用正确的 HTML 标签。
一个考虑 Rust 中的 ARIA 属性 的 Yew 组件示例:
use yew::prelude::*;
#[function_component(AccessibleButton)]pub fn accessible_button() -> Html { html! { <button class="btn btn-primary" aria-label="提交表单" role="button" tabindex="0" onkeypress={|e| { if e.key() == "Enter" || e.key() == " " { // 处理点击 } }} > { "提交" }