HTML5已废弃<legend align>属性,须用CSS的text-align控制文字对齐;<legend>必须为<fieldset>首子元素以保障可访问性,且需配合视觉样式维持语义分组。
align 属性HTML5 已彻底废弃 <legend align="right"> 这类写法。主流浏览器(Chrome、Firefox、Edge、Safari)从 2020 年起就只保留兼容性渲染,且仅对 "left" 和 "right" 做弱支持;"top" 和 "bottom" 几乎无效果。Opera 是唯一曾完整支持的浏览器,但早已停止维护。
直接写 align 不仅无效,还会在 HTML 验证器里报错,也破坏语义一致性。
text-align 控制文字水平位置(仅对 legend 生效)legend 默认是块级元素,text-align: right 就能右对齐文字legend 在 fieldset 顶部居右(而非文字右对齐),需配合 margin-left: auto 或 Flex 布局<legend> 实现<legend> 是唯一合法、可访问、且被所有屏幕阅读器识别的边框标题方式。它必须是 <fieldset> 的第一个子元素,否则语义断裂——读屏器会完全忽略它,表单组失去上下文。
常见错误写法:
立即学习“前端免费学习笔记(深入)”;
<fieldset><div><legend>地址</legend></div><input name="city"></fieldset> → legend 被包裹,失效<fieldset><input><legend>地址</legend></fieldset> → 不是首子节点,旧版 Safari 可能跳过播报<Fragment> 或自定义组件包 legend → DOM 关系被破坏,等同于没写一旦给 fieldset 加了 display: flex 或 display: grid,legend 默认的定位机制就会失效:它可能偏移到左上角、被边框遮挡,甚至被裁掉一半。
安全做法:
legend 设 display: flex;改用 display: inline-flex + align-items: center
fieldset 是 flex 容器,把 legend 放进一个 <div> 并设 align-self: flex-start
margin 时,至少保留 legend { margin: 0.5em auto 0.75em; },否则标题紧贴控件,失去“标题感”很多人一上来就写 fieldset { border: none; padding: 0; },结果语义还在,视觉却完全消失。键盘用户 tab 导航时找不到焦点边界,鼠标用户也看不出哪些控件属于同一逻辑组。
必须手动补视觉线索:
outline: 2px solid #999 或 box-shadow: inset 0 0 0 1px #ccc 模拟边框fieldset 加背景色(如 background: #f9f9f9)+ 内边距,强化区块感border,记得检查 fieldset 的默认 padding 和 margin 是否还合理真正难的不是第一次写对,而是后续加新字段、换 UI 库、抽离组件时,仍确保 legend 在第一位置、fieldset 还包着该包的控件、视觉提示没丢。