网络上各种排版的电子书有的非常美观,有的则凌乱糊弄。因为强迫症的原因,从收集电子书开始,并自己排版EPUB电子书已经有一年多时间了。也是因为强迫症的原因,期间对css修修改改,一直想着探索一个最普适的样式。最近,又打算学习一下网页设计的知识,再一次大修css。姑且称之为第三版吧,因为这是我第三次有意识地对css文件推倒重来了,前两次都没有记录,打算从现在开始,像是写日记一样记下自己的修改历程。我没有通过教科书系统学过相关知识,只限于网上学习,因此一定会遗存很多让人血压升高的不规范排版。希望可以与同样有需求的朋友一起学习交流。
默认样式
灵感来自:ePub 电子书排版最佳实践 - Andor Chen ()
EPUB阅读器就像Web浏览器一样,会内置默认的样式。为了更好的掌控,实现较为统一的视觉效果,建议在css样式表开头重置样式。比如说:
(资料图片仅供参考)
之后我单独为body作了「padding: 」的修改,模仿页边距。否则需要单独设置并统一div、table、p等内部元素的margin。
目录的排版
我采用表格table来表现目录。也许有人喜欢ol、ul这样在段首带有标记的元素,但我不喜欢在电子书中出现这样像是幻灯片报告一样的东西,所以在之前,我一直用p来表现目录。但是,对于像目录这样段首需要序号(第一章、Ⅱ、③...)的内容来讲,p不能很好地统一序号的占位。
比如:要使「第一章」右侧的内容与「第十一章」右侧的内容对齐,则需要在「第一章」后多打一个全角空格。如果说汉字还可以通过空格取巧,那么不等宽的西文就根本无法解决了,这也是我决定使用table的根本原因。
除了目录,注释引用的内容我也使用了table,无论序号至百位千位,都能保证右侧的内容是对齐的
首先事先规定table中th和td的样式。所有的书都需要目录,因此让th和td默认来贴合目录表现。
实际重点就一个属性:vertical-align,令他居上。这样,当右侧内容换行时,左侧序号依然能保持在“第一行”。
当然,不想让序号保持居中也不是不行,只是我会感觉有点怪
然后在table中规定内容的字体、字号等属性。
table中的margin属性是指整个大表格的边缘,如果要调整单元格内的空白大小,推荐使用th、td的padding属性。顺便说一句,之所以我之前在th、td中规定padding、align等属性,也是因为在table中规定这些属性对单元格是无效的。不过这样也好,方便我将单元格单拎出来规范段落排版,而不同内容(目录、引用注释等)的文字表现就通过table的类(contents、note等)来分别规定了。
最后,一、二级目录的序号通过在具体元素内使用style来调整。因为可以通过正则表达式来定位相应的序号,所以其实不会很麻烦。同时也保证th、td的默认样式表现起来确实是“默认”的。
最关键的是,元素内使用style可以不关注其普适性,不同的电子书文件可以机动修改不同的style。
头就先开到这里吧。目录也许不需要花那么多心思来排版,但主要介绍一下我对这种段前需要序号的内容的一点排版思路。同样的方法也可以用在注释引用上。
下一篇文章打算写写「强制不分页」和「中文西文之间字距」的解决方案。为了达成这两个效果,我最后总结为一句话:想要最后渲染出好的表现效果,代码就必须非常丑陋。
关键词: