十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

freeCodeCamp 响应式 Web 设计实战:用 input type=“date“ 构建可访问的日期选择器

freeCodeCamp 响应式 Web 设计实战:用 input type=“date“ 构建可访问的日期选择器 freeCodeCamp 响应式 Web 设计实战用 input typedate 构建可访问的日期选择器【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp本文基于 freeCodeCamp 课程中 Responsive Web Design 认证的 Applied Accessibility应用可访问性板块讲解如何用 HTML5 的input typedate构建一个对所有用户包括键盘用户与读屏用户都友好的日期输入控件。读完本文你将理解input元素的type属性如何决定表单控件形态、浏览器不支持时的优雅降级策略、label与控件的for/id关联原理并能完成课程中 Add an Accessible Date Picker 挑战的完整实现与测试验证。为什么日期输入属于可访问性课题在 freeCodeCamp 的课程结构中本题位于 applied-accessibility 板块的第 13 题共 22 题该板块整体归属于 Responsive Web Design 超级板块并纳入 Responsive Web Design 认证。值得注意的是它的前一道题是 Improve Form Field Accessibility with the label Element即通过label元素提升表单字段可访问性——本题正是建立在label 必须与控件正确关联这一基础之上进一步处理控件本身选得对不对的问题。原始挑战文档定义在 curriculum/challenges/english/blocks/applied-accessibility/587d778b367417b2b2512aa8.md其开篇点明核心概念表单中经常包含input字段可以用来创建多种不同的表单控件。这个元素上的type属性决定了会创建哪种input元素。也就是说同一个input标签靠type属性就能变成文本框、提交按钮、密码框、日期选择器等完全不同的控件。前序挑战中大家已经见过text和submit两种类型而 HTML5 新增了对date类型的支持在支持的浏览器中当日期输入框获得焦点时会弹出原生的日期选择器date picker。用户可以直接点选而不是手动输入这对所有用户都更省事——键盘用户不必逐字符敲入日期触屏用户可以直接用日历点选。在不支持的旧浏览器中typedate会自动降级fallback为text类型控件仍然可以接收纯文本输入。正因如此课程文档特别提醒应当在label或placeholder文本中明确告知用户期望的日期格式作为兜底提示。文档给出的最小示例如下label forinput1Enter a date:/label input typedate idinput1 nameinput1这里体现了三个关键的可访问性要点label通过for属性指向input的id点击标签文字也能聚焦到输入框且读屏软件会把标签文本作为该控件的名称朗读出来typedate声明控件语义为日期让浏览器提供原生日期选择器并让辅助技术知道用户在填写日期而非任意文本name属性提交表单时作为键值对的一部分本例为input1...保证服务端能识别该字段。挑战任务给 Camper Cat 的锦标赛调查表添加日期选择器挑战的场景设定是Camper Cat 正在组织一场 Mortal Kombat真人快打锦标赛想让参赛选手反馈最合适的日期。任务要求很具体——添加一个input标签其type属性值为dateid属性值为pickdatename属性值为date。题目提供的初始代码seed如下其中label已经就位等待与之配对的输入控件body header h1Tournaments/h1 /header main section h2Mortal Kombat Tournament Survey/h2 form pTell us the best date for the competition/p label forpickdatePreferred Date:/label !-- Only change code below this line -- !-- Only change code above this line -- input typesubmit namesubmit valueSubmit /form /section /main footercopy; 2018 Camper Cat/footer /body注意 seed 中的label forpickdatefor属性值pickdate已经提前约定了控件必须使用的id。这不是巧合——如果填出的id与for对不上label与控件的关联就会失效键盘用户点击标签无法聚焦、读屏用户也听不到 Preferred Date 这个字段名。这正是本课程把label 可访问性放在date picker之前讲解的原因。在注释指定区域内补上下面一行即可完成挑战完整参考答案与官方 solutions 段一致input typedate idpickdate namedate最终表单结构为form pTell us the best date for the competition/p label forpickdatePreferred Date:/label input typedate idpickdate namedate input typesubmit namesubmit valueSubmit /form提交时表单将产生date2026-09-15ISO 8601 格式以浏览器实现为准这样的数据对语义清晰、易于服务端解析。答案如何被自动验证测试断言逐条解读freeCodeCamp 的每道挑战都附带断言式测试chai-assert 风格本题在挑战文档的 hints 部分给出了四条验证逻辑正好覆盖了题目要求的每个属性// 1. 页面中应恰好有 2 个 input 元素新加的日期框 原有的提交按钮 assert.lengthOf(document.querySelectorAll(input), 2); // 2. 该 input 的 type 属性必须是 date assert.equal(document.querySelector(input)?.getAttribute(type), date); // 3. id 属性必须是 pickdate与 label 的 for 值对应 assert.equal(document.querySelector(input)?.getAttribute(id), pickdate); // 4. name 属性必须是 date assert.equal(document.querySelector(input)?.getAttribute(name), date);这四条断言揭示了出题意图的完整闭环数量断言保证你在表单中只添加了一个控件而不是重复添加type断言保证控件语义正确——如果误写成typetext虽然页面上看起来也能输入但浏览器不会提供原生日期选择器辅助技术也无法获知这是日期这一语义id断言保证与既有label forpickdate的绑定关系成立name断言保证表单提交数据能被正确识别。从源码结构看这类挑战采用 Markdown 分段格式--description--、--instructions--、--hints--、--seed--、--solutions--由 curriculum/schema/challenge-schema.js 定义的模式进行校验hints 中的代码块即测试断言seed 是学员编辑的起点solutions 是用于对照的参考答案。因此挑战文档本身既是教程也是测试与答案的唯一事实来源。进阶衔接用 time 元素与 datetime 属性标准化时间学完日期输入后课程紧接着的下一题 Standardize Times with the HTML5 datetime Attribute 处理的是日期/时间显示的可访问性HTML5 提供了内联的time元素与datetime属性用于把页面中以自然语言写出的日期/时间包裹起来并提供机器可读的标准格式。pMaster Camper Cat officiated the cage match between Goro and Scorpion time datetime2013-02-13last Wednesday/time, which ended in a draw./pdatetime属性中的值是辅助技术实际读取的内容——即便页面文字写得口语化last Wednesday读屏软件与搜索引擎仍能解析出精确的2013-02-13。该挑战的 seed 代码里还展示了带时区的完整时间格式例如time datetime2016-08-13T20:01ZAugust 13supth/sup/time。两者配合起来就是完整的可访问性时间处理方案场景元素关键点让用户输入日期input typedate依赖label的for/id绑定旧浏览器降级为文本时需在 label 中提示日期格式让页面展示日期/时间time datetime...datetime属性提供 ISO 格式标准值供辅助技术与机器读取小结本题看似只要求写一行input typedate idpickdate namedate实际串起了表单可访问性的几条核心原则用语义化的type属性声明控件类型、用label/for/id三元组建立可聚焦且可朗读的字段名、通过name保证提交数据的可解析性以及考虑浏览器能力差异时的格式提示兜底。在 freeCodeCamp 课程仓库中可直接通过 挑战源文件 查看完整的描述、测试断言与参考答案通过 applied-accessibility 板块定义 查看该题在整个板块中的位置并通过 certifications 目录下的认证定义 了解它在认证考核中的归属。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表