分页孤行:为何我对自己的电子书感到尴尬
我的《网页排版》实体书很快售罄。由于自费出版且印刷成本高昂,首印数量有限。但电子书始终是我的计划,其销量已远超实体书十倍以上。
我对电子书设定了严格标准:需尽可能复刻印刷版设计,同时适应数字媒介特点。至今我仍为成果自豪——全手工编写ePub(底层为HTML与CSS),嵌入字体、SVG图像、替代文本、层次分明的排版、JavaScript驱动的语法高亮,以及精心设计的可读性布局。虽然电子书整体标准不高(A Book Apart等出版物属例外),但我认为这已是较先进的电子书范例。
尽管如此,电子书在Apple Books等阅读器中的渲染效果仍常令我尴尬。本书采用大量标题与副标题以提升可扫描性(既供阅读也供参考),但WebKit等引擎常出现以下排版问题:
标题“依靠六百年排版经验”与其后续段落被分页符隔开,形成“孤行标题”。这违背了延续六百年的排版基本准则——更合理的做法是将标题与段落保留在同一页,即使会留白。
自1997年CSS2早期草案起,已有简单属性可避免标题后或标题内部的分页:
h2 {
page-break-after: avoid;
page-break-inside: avoid;
}
现代浏览器支持新属性:
h2 {
break-after: avoid;
break-inside: avoid;
}
然而26年后,break-after:avoid仍未在Safari和Firefox中得到支持,Chrome 108(2022年12月)才引入该属性。我制作了测试页面演示多栏布局中break-属性的支持情况:在Chrome中移除h2规则的break-inside:avoid或break-after:avoid,即可看到副标题沉入栏底或跨栏分裂的问题。
浏览器对CSS属性的支持通常取决于开发者需求。如今浏览器引擎制造商通过年度Interop计划协商CSS等技术的优先实现列表,但2024年提案窗口已关闭,分页控制未能列入通用实现计划。幸运的是Typetura的Scott Kellum提交了改进高级多栏布局的提案,其中包含break-属性支持。遗憾的是开发者对此需求寥寥——本文可能使相关公开讨论量翻倍,但这仅限于栏内分页场景。
更新:令人沮丧的是,该提案未被选入Interop 2024或2025计划。我只能持续跟进错误报告,期待问题早日解决——这些漏洞的年龄比有些同事还长!
分页媒体常被忽视,虽然网页打印在宏观上并不常见,但电子书作为流行的分页媒介理应获得关注。我期待能在阅读电子书时不再遭遇基础排章失败。