前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库HTML fieldset legend 表单可访问性分组
HTML表单与输入

fieldset 和 legend 怎样给表单控件分组?

<fieldset> 把相关表单控件组成一组,第一个 <legend> 为整组命名。每个输入仍需自己的 <label>,例如“配送方式”是组名,“快递”和“自提”是各选项名称。读屏时两层信息合在一起,用户才知道正在回答哪个问题。

前端进阶之旅 · 一题精讲更新于 2026.09.29
HTML#表单与输入#Web 可访问性#表单
先看核心答案读代码示例
理解线索

表单命名的两个层次

  1. 组名legend 说明共同问题
  2. 控件名label 说明单个选项
  3. 分组边界fieldset 将选项关联起来

legend 的关键作用不是画边框;视觉样式可自定义,语义分组仍应保留。

核心回答

先记住这个答案

fieldset 和 legend 解决“这几个输入一起回答什么”的问题。把同一题的单选或复选项放入 <fieldset>,在第一个 <legend> 写组标题,再给每个控件配自己的 <label>。这样不仅有视觉边框,辅助技术也能把组名与各控件名称联系起来。

  • fieldset 表达控件之间的分组
  • 首个 legend 是组标题
  • 每个输入仍需要自己的 label
  • 组标题不该由占位文字代替

单选组为什么需要一个总问题

如果页面只列“快递”“自提”两个单选标签,读屏用户进入选项时可能不知道这组选项属于配送方式、领取方式还是退款方式。legend 提供整个选择题的题干,而 label 提供单个答案。两者不能互相替代。

把配送问题写成一组HTML
<fieldset>
  <legend>配送方式</legend>
  <label><input type="radio" name="delivery" value="ship">快递</label>
  <label><input type="radio" name="delivery" value="pickup">自提</label>
</fieldset>

两枚单选按钮共用 name,浏览器将它们作为互斥选项;fieldset 则补足分组语义。虽然视觉上可能已有标题,但若用普通段落代替 legend,辅助技术未必按同样方式把标题与整组控件关联。

组名与控件名各管哪一层

legend 最适合写一组控件共同回答的问题,如“联系偏好”;每个 label 则写“邮件”“短信”等具体选项。占位文字会在输入后消失,也不是可靠的控件名称,尤其不能代替组名。

fieldset 还可以用 disabled 一次禁用一组控件,其中首个 legend 内的表单控件有例外。若页面有层层嵌套的分组,读屏输出可能变得冗长,应只在确有独立问题层级时嵌套,并保持标题短而清楚。

例如收货地址里有“联系人”“电话”“邮编”三个输入,逐个 <label> 只能告诉用户每个框是什么,不能说明它们共同属于“新的收货地址”。<legend> 是这组问题的名字,屏幕阅读器进入组内控件时可以结合组名建立上下文。一个页面有多组相同的“姓名”输入时,这个差别尤其明显:没有组名,用户很难知道当前读到的是收货人还是发票联系人。

回答前,多想一步

容易答错的地方

给组写了 legend 就不给各输入标签
用户还需要知道当前具体选项是什么,单个控件仍需自己的 label。
只用 CSS 边框和标题模拟分组
视觉相似不代表有同样的表单语义;相关控件应使用真实的分组元素。
试着用自己的话回答

面试官还会怎么问?

所有输入都要套 fieldset 吗?

不必。它适合有共同问题的一组控件,单个普通字段用 label 通常已足够。

legend 应放在什么位置?

通常作为 <fieldset> 的第一个子元素;首个组名提供该分组标题。

fieldset 会改变单选按钮互斥规则吗?

互斥主要由相同表单中的 name 决定,字段集负责语义分组。

从一道题,走向一组知识

把知识连起来

表单与输入

文件输入的 accept 和 multiple 能限制上传什么?

文件输入同样需要清晰的单独标签,若属于一组附件,还可用分组提供上下文。

表单与输入

输入框不在 form 里面,也能随表单提交吗?

外部表单关联不自动替代字段集内控件的表单归属设置。

参考资料

  • HTML:表单与输入参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 单选组为什么需要一个总问题
  3. 组名与控件名各管哪一层
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑