标签用于无语义强调但需斜体呈现的文本,如命令名、生物分类、外文短语;用于需读屏软件识别的语气或语义强调;误用会损害可访问性与语义结构。

<i></i> 标签不是“加斜体”的快捷键,它是用来标记**无语义强调、但按惯例需斜体呈现**的文本。用错地方,样式可能看着对,可访问性和语义结构已经出问题。
什么时候该用 <i></i> 而不是 <em></em>
关键看内容是否需要被读屏软件识别为“强调”——<em></em> 会改变语音重音和停顿,<i></i> 不会。
- 该用
<i></i>:<i>git commit</i>(命令名)、<i>Homo sapiens</i>(生物分类)、<i>bon appétit</i>(外文短语) - 该用
<em></em>:<em>真的</em>不能删(语气强调)、<em>仅限管理员</em>(权限提示) - 不该用
<i></i>:<i>提交</i>(按钮文字)、<i>错误:404</i>(状态提示)——这些应配合required、aria-live或改用<strong></strong>
font-style: italic 失效的常见原因
写了 font-style: italic 却没变斜?大概率不是代码写错,而是字体本身不支持真实斜体字形。
- 中文字体如「微软雅黑」「思源黑体」默认没有
italic变体,浏览器只能 fallback 到oblique(机械倾斜),效果生硬甚至失真 - CSS 中写了
i, em { font-style: normal !important; }—— 直接覆盖所有斜体 - 父元素设了
font-style: normal,子元素未显式重写,继承导致失效 - 用了
@font-face但没为font-style: italic单独声明对应字体文件,或src路径不对
中文实现“真正斜体”的实操路径
想让中文也出印刷级斜体,必须引入带 italic 字重的字体文件,不能只靠 CSS 声明。
- 选用已提供完整字重的开源字体,如
Noto Sans SC的 Italic 版本(.woff2 文件) -
@font-face必须成对声明:font-style: normal对应 Regular,font-style: italic对应 Italic,两者font-family名称必须完全一致 - 在使用处显式写
font-style: italic,不能省略;否则浏览器不会触发字形切换 - 避免用
transform: skewX()模拟斜体——它破坏点击热区、影响文本选择,且对辅助技术不可见
最常被忽略的一点:斜体从来不是独立的信息通道。哪怕你用了 <i></i>、写了 font-style: italic、加载了真实斜体字体,只要没同步加上 aria-required="true"、aria-live="polite" 或显式文案,视力障碍用户就感知不到那个“斜着的必填项”或“斜着的暂无数据”。


















