、、、等标签会破坏可访问性:它们无语义,导致屏幕阅读器丢失重要上下文;应改用语义化标签(如、、)和aria属性(如role="alert")配合css实现样式与功能分离。

<font></font>、<center></center>、<u></u>、<strike></strike>这类格式化标签不是“过时而已”,它们会直接让屏幕阅读器丢失语义上下文,导致读屏用户无法理解文本重要性、结构关系甚至内容类型。
为什么<font></font>会让错误提示变成静音
写<font color="red">密码错误</font>,屏幕阅读器只读“密码错误”,完全不提“错误”这个语义。它不解析颜色,也不猜意图——红色对人是警告,对AT只是普通文本流中的一段字。
- 正确做法:用
<span class="error"></span>+ CSScolor,再加role="alert"或aria-live="polite"显式声明状态 - 更优解:直接用
<strong class="error"></strong>,既保留强调语义,又避免引入废弃标签 - 千万别删完
<font></font>只剩纯文本——丢掉的不只是样式,是可访问性信号
<u></u>和<strike></strike>不是“下划线/删除线”的快捷写法
屏幕阅读器遇到<u>已过期</u>,读出来就是“已过期”,不会说“已过期(删除)”;同理,<strike></strike>也不会触发“已删除”播报。这些标签没有机器可识别的语义,只影响渲染。
- 表示内容插入:用
<ins></ins>,读屏器会读“插入:xxx” - 表示内容删除:用
<del></del>,读屏器会读“删除:xxx” - 表示高亮/强调:用
<mark></mark>,部分AT支持语调变化 - 纯视觉下划线(如链接伪类)应通过CSS实现,而非
<u></u>
构建流程里不拦住<center></center>,上线后就等于放弃居中区域的可访问性
<center><h2>标题</h2></center>被浏览器解析时,<center></center>会被静默降级为<div>,但它的包裹行为破坏了标题的嵌套层级——原本该是<code> > <h2></h2>,现在变成 > <div> > <h2>。这会导致:
<ul>
<li>标题大纲断裂,屏幕阅读器无法建立章节树</li>
<li>某些AT把<code><div>当无意义容器,跳过其内部标题
<li>CSS移除后,源码顺序与逻辑流错位,禁用样式验证失效</li>
<p>真正难处理的,是那些被JS当作定位锚点的<code><font></font>或<center></center>——比如document.querySelector("font[size='4']")还在运行,你一删,功能就断。删之前务必全局搜querySelector、getElementsByClassName和所有data-属性关联。











