<i>标签仅用于非强调类语义偏移,如技术术语、外语词、船名、作品名、内心独白;强调用<em>;纯视觉斜体应使用CSS;图标场景应改用<span>或<svg>。

<i> 标签不是“加斜体的快捷键”,它只在特定语义场景下合法有效;滥用会导致 HTML 结构松散、屏幕阅读器误读、SEO 信号弱化。
什么时候该用 <i> 而不是 <em>
核心判断依据是:这段斜体文字是否承载「非强调类语义偏移」。
-
<i>合法场景包括:技术术语(<i>boolean</i>)、外语词(<i>cul-de-sac</i>)、船名/作品名(<i>Titanic</i>)、角色内心独白(<i>What if I fail?</i>) -
<em>用于真正需要语音重读或逻辑强调的内容,比如“<em>not</em> supported” 或 “this is <code><em>required</em>” - 若只是想让某段文字“看起来斜一点”,但无上述语义,就该用 CSS:
font-style: italic,而不是<i>
<i> 在现代框架里容易被当成图标容器
Bootstrap、Font Awesome 等库习惯把 <i> 当作 icon 占位符,例如 <i class="fa fa-user"></i>。这和语义规范完全冲突——此时 <i> 已经失去 HTML5 定义的“文本偏移”本意,纯属历史包袱下的 class 容器。
- 这类用法不触发任何语义解析,对无障碍(a11y)无益,甚至可能干扰屏幕阅读器识别
- 更合规的替代是
<span aria-hidden="true" class="icon-user"></span>或使用<svg> - 如果项目中同时存在语义化
<i>和图标<i>,必须靠 class 或上下文人工区分,极易出错
浏览器默认样式不可靠,<i> 不等于视觉斜体
HTML5 明确说 <i> 是“文本类型不同”的标记,不是样式指令。浏览器默认用斜体显示只是惯例,不是强制行为。
立即学习“前端免费学习笔记(深入)”;
- CSS 可以彻底覆盖:比如全局设
i { font-style: normal; },所有<i>都不斜——但语义仍存在 - 某些字体缺失 italic 变体时,浏览器可能 fallback 到 oblique(倾斜),效果生硬
- 在高对比度模式或部分辅助技术中,
<i>内容可能被忽略或错误降级
真正难处理的不是怎么写 <i>,而是判断它是否该出现在这个位置——一旦语义错配,后续所有样式、可访问性、自动化测试都得跟着补救。



















