网页自动调整中英文间距

/

TL;DR

text-autospace: normal;

背景

中日韩汉字与英文(数字)混排时,为了更好的视觉效果,应当在汉字与英文(数字)之间添加间距。在 markdown 文档中,我会手动添加空格,参考「中文文案排版指北」;在富文本编辑器,例如 Word 与 Pages 中,我什么都不做,交由软件自动处理。总而言之,除非所用的软件能自动处理间距,我都会手动添加空格。

漢學家稱這個空白字元為「盤古之白」,因為它劈開了全形字和半形字之間的混沌。另有研究顯示,打字的時候不喜歡在中文和英文之間加空格的人,感情路都走得很辛苦,有七成的比例會在 34 歲的時候跟自己不愛的人結婚,而其餘三成的人最後只能把遺產留給自己的貓。畢竟愛情跟書寫都需要適時地留白。1

但在网络上,绝大多数内容我都无法控制,中英文之间没有适当间距的情况比比皆是,十分丑陋。

因此,针对网页内容已经诞生一些优化方案,例如 pangu.js。但说到底这些都是第三方方案,接下来我们要讨论的方案则更加原生。

CSS: text-autospace

该属性包含 5 个值:no-autospace 即不添加间距;auto 为自动,我观察到的行为是不添加间距;normal 即自动添加间距;而 ideograph-alphaideograph-numeric 分别为只在「汉字、英文间」与「汉字、数字间」添加间距。

Safari 用户

Safari 18.4 中正式引入了对 text-autospace2 属性的支持。由于 Safari 版本与 macOS 版本是绑定的,你只需更新到 macOS Sequoia 15.4 及以上即可。

我们需要的值是 normal。创建如下 CSS,不妨命名为 autospace.css

* {
    text-autospace: normal;
}

然后在 Safari > Settings > Advanced > Style sheet 中选择 autospace.css,即可将该属性应用于网页中的所有元素。

Chrome 用户

如果你用的是 Chrome >= 120,你可以尝试启用实验性功能,路径为 chrome://flags/#enable-experimental-web-platform-features,Chrome 好像已经在实验性功能中对 text-autospace 提供了支持,不过我没有测试过。

网页开发者

如果你是网站开发者,你也可以在恰当的位置应用该属性,例如:

<article>balabalabala</article>

<style>
    article {
        text-autospace: normal;
    }
</style>

需要注意的是目前(2025 年 4 月 30 日)这个属性兼容性非常差,只有 Safari 正式支持。你可以在 caniuse.com 查询其兼容状况。

示例

我观察到 text-autospace: normal 的效果与手动添加的空格略有区别,且即使手动添加了空格,text-autospace: normal 也会使中英文间距略微变宽。以下四行分别是:

  1. 手动添加空格,text-autospace: normal
  2. 手动添加空格,text-autospace: no-autospace
  3. 不手动添加空格,text-autospace: normal
  4. 不手动添加空格,text-autospace: no-autospace

I 不喜欢 those 不在中en文之间添加 1 个 space 的人。

I 不喜欢 those 不在中en文之间添加 1 个 space 的人。

I不喜欢those不在中en文之间添加1个space的人。

I不喜欢those不在中en文之间添加1个space的人。


以最新的 Safari 为例,你应该观察到以上四行的长度依次递减,其中,第一行只是比第二行宽了一点点,需要仔细观察。如果你看到上面的第 1、2 行长度相等,第 3、4 行长度也相等,说明你的浏览器还没有正式支持 text-autospace

脚注

  1. 為什麼你們就是不能加個空格呢? ^

  2. WebKit Features in Safari 18.4 ^