在追求功能强大和交互复杂的同时,我们并未忘记CodePlus作为一款面向广大开发者的产品,应有的普适性与包容性。本文将从响应式布局和初步的无障碍(A11y)支持两个方面,分享我们如何让平台在从桌面到大屏手机的各类设备上都能提供清晰可用的界面,并开始为视障、运动障碍等用户群体铺就一条“可访问”的道路。
1. 响应式设计:从桌面三栏到移动堆叠
我们的设计基准是桌面端(≥1024px),采用经典的“题目-编辑器-结果”三栏布局。但通过CSS媒体查询和Flexbox/Grid的弹性,我们确保了向下兼容。
平板(768px - 1023px):将结果栏移至编辑器下方,变为两栏布局。适当调整字体大小和按钮间距。
手机(< 768px):转为单栏堆叠布局。顶部提供标签页切换,让用户可以在“题目”、“代码”、“结果”、“评论”视图间切换,避免信息过于拥挤。我们使用了Vue的
<component :is="currentTab">动态组件来实现这一效果,保证了移动端的功能完整性。
2. 无障碍访问(A11y)的初步实践
我们知道距离WCAG 2.1 AA标准还有很远,但我们迈出了第一步,重点关注了核心交互元素:
语义化HTML:坚决不用
<div>或<span>模拟按钮。对于所有可交互元素,使用<button>、<a>、<input>等原生标签,并确保<img>有alt文本,<iframe>有title。键盘导航:确保所有功能都能通过
Tab键访问。我们为CodeEditor组件增加了tabindex="0",并监听键盘事件,当编辑器获得焦点时,按下Enter键可以触发“运行”或“提交”。在面试聊天界面,确保输入框和发送按钮的键盘访问顺序正确。ARIA属性增强:
为加载中的按钮添加
aria-busy="true"。为SSE流式输出区域添加
aria-live="polite",这样屏幕阅读器会在新内容出现时自动播报,让视障用户也能感知到AI的回复。为题目难度标签添加
aria-label,如<span :aria-label="'难度:' + problem.difficulty">。
颜色对比度:使用工具检查了主要文本、按钮与背景色的对比度,确保达到最低4.5:1的标准,对色弱用户友好。
3. 暗色模式的全局支持
我们通过一个保存在localStorage和Vue响应式状态中的isDarkMode标志,全局控制应用主题。在:root上切换CSS自定义属性(--color-bg,--color-text等),所有组件都使用这些变量定义颜色。我们确保Monaco Editor的主题、CodeMirror(如有)的主题都与此开关同步,提供连贯的视觉体验。
4. 个人实践与反思
实现响应式布局的过程相对顺畅,CSS Grid和Flexbox是现代前端开发者的利器。真正的挑战在于移动端交互的重新设计。例如,在手机上如何优雅地切换代码、运行结果和题目描述?我们尝试过底部导航栏、侧滑抽屉等多种方案,最终选择了顶部标签页,因为它最符合用户“切换视图”的心智模型,且实现简单。
在无障碍方面,我们的工作仅是开端。通过使用Chrome的Lighthouse无障碍审计和axe DevTools插件,我们发现了许多可以改进的地方,例如复杂的表单标签关联、动态内容更新的更佳通告策略等。这让我意识到,无障碍不是一项“功能”,而是一种开发习惯和思维模式。从一开始就考虑aria-*属性和键盘交互,比后期修补要容易得多。
未来计划:我们计划在项目中引入vue-axe这类开发时无障碍检查工具,将其集成到CI流程中,阻止严重的无障碍问题进入代码库。同时,我们也希望收集更多来自真实障碍用户的反馈,让CodePlus成为一个真正包容的技术学习平台。这段经历让我明白,打造卓越的前端体验,不仅关乎酷炫的效果和极致的性能,更关乎是否能平等、友好地服务于每一位用户。