用途:提供编写无障碍、语义化表单的 HTML 优先模式,校验反馈仅用 CSS 实现。
主要能力:以 <form-field> 自定义元素分组 label、input/textarea/select 与可选的 <output>;使用 HTML5 校验属性(required、minlength、maxlength、pattern、type、min/max);用 :user-valid、:user-invalid 伪类在用户交互后展示有效/无效状态;通过 :has(input:required) 自动生成必填星号;用 output 承载校验与帮助信息并配 aria-live="polite"。
使用方式:结构为 form-field 内含 label(for 与控件 id 对应)、控件(含 id、name、校验属性、aria-describedby)和 output(含 id、for、aria-live)。状态用 data-valid、data-invalid、data-required 等数据属性而非 class;表单整体与字段可用 CSS Grid 布局,并通过 :root 的 CSS 变量定义表单颜色、尺寸与排版令牌。<form-field> 在 elements.json 中定义,允许内容含 label、input、textarea、select、output 及短语内容。
适用场景:联系表单、文本/邮箱/电话/密码/下拉/多行文本等字段,以及需要屏幕阅读器播报校验结果的场景。
限制:客户端校验仅用于用户体验,资料明确指出始终要在服务端校验,并建议用 JSON Schema 与 AJV 中间件保持规则一致;密码确认等交叉校验、具体服务端代码实现资料未完整提供。无障碍清单要求每个输入有匹配 label、消息经 aria-describedby 关联、错误不能仅靠颜色表达。