text-emphasis在中文场景必须用缩写形式+前缀前置+position: under+dot关键字,否则多浏览器失效;替代方案::before更可控。

text-emphasis 在中文场景下基本不能靠“写一次就跑通”,必须用特定缩写顺序 + 位置强制 + 关键字限定,否则 Safari 空白、Chrome 悬空、Firefox 不渲染——这不是 bug,是规范落地时的现实约束。
为什么 text-emphasis 在 iOS Safari 里完全不显示
因为 Safari(尤其是 iOS)至今只识别 -webkit-text-emphasis,且只在缩写形式下稳定生效。如果你写了 text-emphasis-style: dot 和 text-emphasis-color: red 分开声明,旧版 Safari 很可能只读取其中一个,甚至全丢弃。
- 必须成对声明:
-webkit-text-emphasis: dot #e74c3c+text-emphasis: dot #e74c3c - 前缀版必须写在标准版前面,否则 WebKit 引擎会用标准版覆盖前缀版,iOS 上直接回归空白
- 不能只写标准版——Chrome/Firefox/Edge 虽支持,但 Safari 完全无视
- 内联 style 是最稳妥的验证路径:
style="-webkit-text-emphasis: dot #e74c3c; text-emphasis: dot #e74c3c; -webkit-text-emphasis-position: under; text-emphasis-position: under;"
text-emphasis-position: over 导致圆点悬空或截断
默认 over 会让强调符落在汉字顶部基线之上,而中文字体字身高、基线位置与拉丁字母不同,结果就是 dot 飘在半空,甚至被容器 overflow: hidden 截掉。
- 必须显式设为
under:-webkit-text-emphasis-position: under和text-emphasis-position: under - 别指望
over+line-height微调能跨浏览器一致——实际测试中,Chrome 和 Safari 对 vertical-align 基准的理解仍有偏差 -
under不仅更稳,也更符合中文出版物传统着重号的位置习惯
别碰 sesame 和字符串如 "·"
看似语义清晰,实则兼容性灾难:sesame 渲染依赖字体内置 glyph,而“微软雅黑”“宋体”等主流中文字体根本不提供;字符串则面临 Unicode 解析不稳定、字号缩放失步、抗锯齿模糊三大问题。
-
sesame在多数中文字体下显示为空白或方块,不是你没写对,是字体压根没实现 -
"·"在 Safari 中常被降级为 ASCII 点(.),或因多字节处理异常直接不渲染 - 字号缩放不一致:当
font-size: 18px变成24px,"·"不一定等比放大,容易突兀变大 - 真正能落地的只有内置关键字:
dot是目前唯一在 Chrome/Safari/Firefox 中均能稳定渲染、颜色可控、缩放一致的选择
真正跨浏览器可用的替代方案其实是 ::before
当你要精确控制位置、颜色渐变、适配老旧 Safari,或者需要强调符随 font-size 精确响应时,text-emphasis 的排版自由度和兼容边界已经触顶。
-
::before可以用content: "•"或\2022,配合position: absolute+top: 0.1em精确锚定 - 它不受
text-emphasis-position渲染逻辑限制,也不依赖字体 glyph 支持 - 伪元素可继承父级颜色、可加 transition、可配合
transform: scale()做细腻缩放 - 复杂场景下,宁可多写几行 CSS,也不要赌
text-emphasis在某个 Safari 小版本里的偶然生效
最麻烦的不是写法本身,而是每次改完都要在 iOS Safari、Chrome macOS、Firefox Windows 三端开 DevTools 看 computed styles —— 因为哪怕一个分号位置错了,或前缀顺序反了,那个 dot 就会安静地消失,还不报错。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











