em标签用于语义强调而非视觉样式,仅在删去后导致语义或责任归属变化时必须使用;专有名词、船名等应使用i;样式应由css控制,避免滥用嵌套与混用。

em 标签不是视觉开关,它只负责告诉浏览器“这个词在口语里会被重读”,其余交给 CSS 控制样式。直接靠 em 实现“视觉区分”是错的路径。
什么时候必须用 em,而不是 i 或 CSS
判断依据只有一个:删掉这个词,原句的潜台词或责任归属是否变了?
- ✅ 必须用
em:<p>我<em>没</em>说他偷了钱</p>—— “没”被重读,暗示别人说的;删掉后变成中性陈述,语义翻转 - ✅ 必须用
em:<p>你<em>必须</em>今天提交</p>—— 强调强制性,不是建议;换成i后屏幕阅读器会平读,失去指令感 - ❌ 禁止用
em:<p>这个函数返回一个 <em>Promise</em> 对象</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5117" title="HTML Extract"><img src="https://img.php.cn/upload/skill/000/000/081/179033952939354.jpg" alt="HTML Extract" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill5117" title="HTML Extract" class="overflowclass">HTML Extract</a> <p class="overflowclass">使用 MinerU 从 HTML 页面和文件中提取内容,将 HTML 转换为保持标题、列表、表格及文本层次结构的干净、结构化 Markdown。F...</p> </div> <a rel="nofollow" href="/xiazai/skill5117" title="HTML Extract" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>——Promise是专有名词,不是语气强调,该用i - ❌ 禁止用
em:<p>首航的是 <em>Queen Mary 2</em></p>—— 船名惯例斜体,无语气变化,用i更准确
em 的样式不能靠默认斜体凑合
浏览器默认把 em 渲染成斜体,但这只是历史遗留行为;语义不变,样式可任意覆盖。
- 用 CSS 改变视觉表现是正当且推荐的:
em { font-style: normal; color: #d32f2f; text-decoration: underline; } - 不要为了“看起来像强调”而堆砌多个
em:<em>真的<em>很</em>喜欢</em>只在需要模拟两处独立重音时才合理(比如反讽+程度) - 避免在
button、label、input内部使用em—— axe DevTools 会报 a11y 错误,因为交互控件里不该掺入语气信号
嵌套 em 和混用 strong 的边界在哪
嵌套和混用不是为了叠加样式,而是表达多层语义强度或语气类型。
- ✅ 合理嵌套:
<em>真的<em>很</em>喜欢</em>—— 外层强调“真的”,内层强调“很”,模拟口语双停顿 - ✅ 合理混用:
<strong><em>立即</em></strong>—— “立即”既是高优先级(strong),又需语音拉长/升调(em),读屏工具可能联合响应 - ❌ 错误写法:
<strong><em>警告</em></strong>—— 如果只是想加粗+斜体,纯属视觉需求,应改用 CSS 类,不污染语义 - ❌ 错误写法:
<em><code>git push——code已自带语义(计算机命令),再包em会让解析器困惑:这是强调命令本身,还是强调“push”这个词?
最难的从来不是怎么写 em,而是敢不敢删掉它——大多数时候,不加 em 才是对的。










