旁注

中文网页排版里几个容易忽略的 CSS 属性

技术约 500 字

给这个小站改样式的时候,顺手查了几个和中文排版有关的 CSS 属性。有的已经能用,有的只有部分浏览器支持,记一下现状。

标点挤压:text-spacing-trim

中文的全角标点自带半个字宽的空白,两个标点挨在一起(比如句号后面跟着右引号)就会空得过分。text-spacing-trim 让浏览器自动压缩这类空白:

body { text-spacing-trim: trim-start; }

trim-start 会压掉行首开括号前的空白,同时处理相邻的标点。Chromium 系的浏览器已经支持,不支持的会直接忽略,没有副作用。

中西文间距:text-autospace

中文里夹着英文和数字时,很多人习惯手动加空格。text-autospace 让浏览器自动在中西文之间留出一点间隙,不用改原文:

body { text-autospace: normal; }

目前支持还不广。我的做法是写的时候照旧手动加空格,这个属性只当锦上添花。

两端对齐

中文正文用 text-align: justify 通常效果不错,因为汉字等宽,拉伸出来的空隙会均匀分到字与字之间。但段落里有长串英文或者长链接时,会出现很难看的大空档,所以这里没有开。

行宽和行高

这两个不是什么新属性,但对阅读体验影响最大。我的经验值:

  • 每行 30 到 40 个汉字比较舒服。这里用的是 max-width: 35rem,大约 35 个字。
  • 中文正文的行高要比英文大,1.7 到 1.9 之间。英文常用的 1.5 放到中文上会显得挤。

字体

不加载任何网络字体,只写系统字体栈:苹果设备上是苹方,Windows 上是微软雅黑,Linux 上一般是思源黑体。标题用宋体,在 Windows 上效果差一些,可以接受。一套中文字体动辄好几 MB,为了一个笔记本不值得。

各属性的支持情况变得很快,以浏览器兼容性表格的最新数据为准。