一行放多少字才不累:先把这三个数测出来

想调正文排版的时候,最容易卡住的地方是:不知道往哪调。字号加大一点会不会太挤?行高松一点会不会散?没有基准,改一次全凭感觉,改三次就回到原点。

所以我先把现状量了出来。三个数就够,而且都能在浏览器里直接读。

三个数,和它们的关系

量 怎么拿 它决定什么
容器宽度 正文段落的 getBoundingClientRect().width 一行能放多少字
字号 getComputedStyle(p).fontSize 单个字占多少像素
行高 同上 lineHeight,再除以字号得到比值 行与行之间留多少

前两个相除,就是每行的字数量级。第三个是它的补偿参数——行越宽,行高必须越松,否则眼睛读到行末回到下一行开头时容易串行。

我这站量出来是多少

在文章页的 console 里跑:

const p = document.querySelector('.entry-content p');
const cs = getComputedStyle(p);
console.log({
  宽: Math.round(p.getBoundingClientRect().width),
  字号: cs.fontSize,
  行高: cs.lineHeight,
  比值: (parseFloat(cs.lineHeight) / parseFloat(cs.fontSize)).toFixed(2),
});

输出:

{ 宽: 692, 字号: "16.5px", 行高: "31.68px", 比值: "1.92" }

每行到底放几个字,光算除法不准——中文标点、英文单词、数字都不是整格的。用 Range API 把”第一行”真实切出来数:

function charsInFirstLine(p) {
  const node = p.firstChild;              // 必须是纯文本节点
  if (!node || node.nodeType !== 3) return null;
  const range = document.createRange();
  let lo = 0, hi = node.length, best = 0;
  while (lo <= hi) {                       // 二分:多切一个字会不会换行
    const mid = (lo + hi) >> 1;
    range.setStart(node, 0);
    range.setEnd(node, mid);
    if (range.getClientRects().length <= 1) { best = mid; lo = mid + 1; }
    else { hi = mid - 1; }
  }
  return best;
}

对本页的几个段落跑一遍,结果:48、49(另外几段太短,不计)。也就是说每一行大约 48 个字符,其中中文占大多数,标点和英文单词撑开了一点余量。

48 算宽还是窄

英文排印里有个被引用了几十年的经验区间:一行 45 到 75 个字符(含空格)比较舒服,窄的一端更省力,宽的一端更连贯。中文没有完全对应的数字,但规律是一致的——汉字是等宽的方块字,同样容器宽度下能塞下的字数比英文多,所以中文正文通常需要比英文更窄的列宽。

按 692px ÷ 16.5px ≈ 42 个汉字宽来算,48 个字符(含标点)落在偏宽的那一侧。这就是为什么我把行高设到了 1.92——宽行必须松行距,这不是审美,是防止回行串行的补偿。反过来,如果列宽压到 560px 左右,行高 1.6 就够了,行数会变多但每行更短。

为什么中文行高普遍比英文大

英文字体有 x-height(小写字母主体高度)和上升下降部,视觉重心在中间,行与行之间天然有”空白台阶”,1.5 的行高就够分开。汉字是满格的方块,没有上升下降部的起伏,一整段看上去是一块均匀的灰面——行距不够时,边界纯靠密度差来分辨,眼睛会很累。

所以那些”行高 1.5 是标准”的说法,在中文正文里通常偏紧。1.7 起步,行宽大的往 1.9 走,是我现在的经验值。

一个诚实的交代

量完之后我没有改字号。因为一改就要重排全部文章,而 48 个字符配上 1.92 的行高在实际阅读里没有明显不适——我手头没有”用户读得累”的证据,只有”数字偏宽”的观察。为了一个观察去动全站,不划算。

但三个数记下来了:692 / 16.5 / 1.92。下次想改的时候有基准,知道自己是从哪儿出发的。

至于”配色 60/30/10″”间距用 8 的倍数”这类说法——它们不是没用,但它们属于风格约定,不能告诉你这一行有多少字。可测的先测,剩下的才是取舍。

← 返回技术笔记