应使用语义化标签:表重要性,表语气强调,/表内容增删,///仅作纯视觉处理;嵌套须符合语义逻辑。

别用 <b></b> 和 <i></i> 做语义强调,该用 <strong></strong> 和 <em></em> 的地方硬套样式标签,后期可访问性、SEO 和维护成本都会出问题。
什么时候该用 <strong></strong> 而不是 <b></b>
当一段文字在逻辑上“重要”——比如错误提示、操作警告、法律条款关键句——就该用 <strong></strong>。它传递的是语义,不是单纯加粗效果;屏幕阅读器会加重语气读出来。<b></b> 只是视觉加粗,没有语义权重,适合品牌名、产品名这类需要突出但不强调重要性的场景。
- 用户输入密码错误时,提示文字用
<strong>密码不正确</strong>,而非<b></b> - 价格标签里写“¥99”,其中“99”用
<b></b>纯粹为了视觉跳脱,没问题 - CSS 重置了
<strong></strong>默认加粗?没关系,语义还在,辅助技术仍能识别
<em></em> 和 <i></i> 的分工很明确
<em></em> 表示内容有强调语气,比如“你真的确定要删除?”;<i></i> 则用于技术术语、外文词、船名、生物分类名等——它表达的是“这段文字属于另一类语言或命名体系”,不是“我想让它斜着看”。
- 文档中出现 “
<em>Please</em> confirm” 是错的,应为 “<code><i>Please</i>confirm”(外文短语) - 写 “
<em>not</em> recommended” 比 “<code><i>not</i> recommended” 更准确,因为这里是在强调否定语气</code>
- 浏览器默认都斜体,但语义不同,搜索引擎和读屏软件处理方式也不同
<ins> 和 <code><del></del> 不只是“带下划线/删除线”的替代品
它们专为内容变更设计:<ins></ins> 表示新增内容(默认带下划线),<del></del> 表示已删除内容(默认带删除线)。比 <u></u> 和 <s></s> 更具语义,且支持 datetime 属性记录修改时间。
- 合同修订稿中,用
<del datetime="2026-08-15">¥200</del><ins datetime="2026-08-20">¥180</ins>,机器可解析变更时序 -
<u></u>在现代 HTML 中默认被禁用(部分浏览器会忽略),除非配合style="text-decoration: underline"强制启用,但已失去语义 -
<s></s>仅表示“不再准确”,比如过期价格,但不说明是否被替换;<del></del>明确表示“已被移除”
嵌套和组合容易踩的坑
文本格式化标签可以嵌套,但必须符合语义逻辑。比如 <strong><em>紧急</em>通知</strong> 合理(先强调语气,再标重要性);但 <em><strong>紧急</strong>通知</em> 就反了——语义层级混乱,读屏器可能重复加重。
- 避免
<strong><b>...</b></strong>这类冗余嵌套,纯属多此一举 -
<sup></sup>和<sub></sub>不参与语义强调,只负责排版,可放心与<em></em>或<strong></strong>组合,如 “第<strong>3</strong><sup>rd</sup>次尝试” - 所有这些标签都是行内元素,不能直接包
<p></p>或<div>,否则 HTML 验证失败 <p>真正难的不是记住哪个标签怎么写,而是每次敲下 <code><b></b>前,停下来问一句:我到底想告诉机器(和人)什么?











