对齐与缩进是段落排版最基础的视觉语言:标题居中、正文两端对齐、段落首行缩进两格、列表与引用块的缩进层次,这些约定俗成的规则让文档在未读内容之前就传达出专业感。导出 PDF 时,对齐与缩进的处理又比网页多一层讲究:网页上轻微的不对齐可能没人注意,但 PDF 是交付物,任何一行的错位都会被放大。dompdf.js 完整支持 text-align 的四种取值与 text-indent 缩进,浏览器里验证过的对齐效果在 PDF 中原样呈现,中文排版的段首缩进、英文排版的两端对齐都能精确控制。本文系统讲解对齐属性的行为差异、缩进的多种形式、两端对齐的细节与坑、中文排版规范以及常见问题,帮助开发者把段落排版一次做对,交付的 PDF 版式严谨、观感专业,客户与领导第一眼就能感受到文档的规范性。
text-align 有 left、right、center、justify 四种取值:左对齐是中文正文最常用的方式,阅读节奏稳定;右对齐适合页脚、落款、表格数字列;居中对齐用于标题、封面与图片说明;两端对齐让段落左右两侧都齐平,是英文正文的默认规范,也是报纸杂志的标准排版方式。
选择对齐方式要考虑语言特性:中文按字符断行,左对齐与两端对齐的差异不大,但两端对齐会让版面更方正;英文单词长度不一,左对齐时右侧参差不齐,两端对齐则通过调整词间距让右侧齐平,观感更正式。正文用两端对齐、标题居中、数据右对齐,是文档排版最稳妥的组合,适合大多数正式文档。
注意对齐的继承与覆盖:text-align 是可继承属性,父元素设置后子元素默认跟随;块级元素的对齐作用于内部文本,行内元素的对齐需要借助父级处理。模板设计时在根元素统一设置默认对齐,再在具体元素上覆盖,层次清晰、改动集中,避免散落各处的对齐样式互相打架,维护成本更低。
text-indent: 2em 实现中文最经典的首行缩进两格,em 单位跟随字号,字号变化缩进量同步变化,比固定像素更符合排版规范;text-indent 只作用于块级元素的第一行,对后续行无效,多段落每段都写一次或继承自父级,模板里统一写在段落样式上最省事,改动一处全局生效。
悬挂缩进(text-indent: -2em 配合 padding-left: 2em)让第一行突出、后续行缩进,是参考文献、列表项的标准样式,dompdf.js 支持这种组合,效果与浏览器一致;注意悬挂缩进要同时设置正负两个值,只写负缩进会导致首行文字溢出容器左边界,两个属性缺一不可,写全了效果才稳定。
对齐属性直接写在模板的 style 标签里即可,无需额外配置;如果模板来自富文本编辑器,编辑器生成的内联样式可能与全局样式冲突,导出前统一清洗一遍内联样式,或者用更具体的选择器覆盖,保证对齐效果可控,不会出现某段意外右对齐的怪象,交付质量更稳定。
<style>
body { font-family: 'Source Han Sans SC', sans-serif; }
.center { text-align: center; }
.left { text-align: left; }
.right { text-align: right; }
.justify { text-align: justify; text-justify: inter-ideograph; }
.indent-2em { text-indent: 2em; }
.hanging { text-indent: -2em; padding-left: 2em; }
</style>
<h1 class="center">项目验收报告</h1>
<p class="indent-2em">这是正文第一段,首行缩进两个字符,符合中文排版规范,段与段之间层次清晰。</p>
<p class="justify">Justified English text stretches word spacing so both margins are flush, which is the standard for formal documents.</p>
<p class="hanging">• 悬挂缩进常用于列表与参考文献,首行突出,后续行缩进对齐。</p>
<p class="right">落款:质量管理部 2026-08-18</p>
text-align: justify 通过拉伸词间距让段落两侧齐平,但它的行为有几个容易忽略的细节:最后一行不会拉伸,保持左对齐,这是规范行为;中文文本的 justify 需要 text-justify: inter-ideograph 才能获得最佳的字间调整效果,不加时中文两端对齐的观感可能不如预期,字距会显得不均匀。
justify 对窄列不友好:列宽太窄时词间距被拉伸得很大,出现明显的河流(文字间的白色空隙带),阅读体验反而变差。表格单元格、侧边栏这类窄容器建议用左对齐;正文宽列用 justify 效果最佳,选择对齐方式前先评估容器的宽度与行内词数,避免为对齐而牺牲可读性,本末倒置。
还有一个常见误解:justify 不会自动断开单词,超长单词在 justify 段落里依然可能溢出或产生巨大词距。因此两端对齐与换行策略需要配合使用,正文列用 justify 加 overflow-wrap: break-word,长 URL 和长单词才不会破坏整段的对齐效果,两个属性组合起来才是完整的排版方案,缺一不可。
中文正式文档的排版规范:正文段首缩进两个字符(2em),段落之间不加空行,标题层级用字号与字重区分;英文排版则相反,段首通常不缩进,段间用空行或段间距分隔。模板设计前先明确文档的语言与规范,再选择对应的缩进与间距策略,避免中西规范混用导致的观感混乱,风格统一是专业文档的前提。
2em 缩进在字号变化时自动缩放,这是它优于固定像素缩进的根本原因;但嵌套在列表或引用块里的段落,缩进会叠加父级的 padding,视觉上层层递进,符合层级表达的需求。需要精确控制时,用 margin 与 padding 区分段落间距与缩进,语义清晰,后续调整也不会互相影响,结构一目了然。
段落间距用 margin 控制而非空行:在 HTML 里插入空段落制造间距是常见的坏味道,字体与行高变化时空行高度不可控,还会干扰分页位置。规范做法是给段落设置 margin-bottom,间距稳定可调,分页引擎也能准确计算页面内容高度,多页文档的分页点更合理,页面底部不会出现尴尬的半行空白。
对齐不仅作用于段落,还影响表格与列表的整体观感:表格数字列右对齐是数据表格的惯例,金额与数量按位对齐便于纵向比较;列表项文本左对齐、项目符号位置统一,层次分明。dompdf.js 完整支持这些场景,表格单元格内同样使用 text-align 控制,与网页行为一致,不需要额外的绘图代码。
多栏布局(报纸式分栏)里每栏的对齐独立生效,两端对齐在窄栏中的词距问题会被放大,栏宽设计时要预留足够的空间;dompdf.js 支持 CSS 多栏与 flex 布局,栏与栏之间的对齐与间距用 gap 控制,比手工计算坐标稳定得多,改栏宽只动一个属性,版式调整非常灵活。
RTL 文档的对齐是镜像的:text-align: left 在 RTL 容器里语义不变,但视觉上左侧与 LTR 的右侧对应;更自然的写法是使用逻辑属性 text-align: start/end,它跟随文档方向自动切换,模板同时服务 LTR 与 RTL 两种语言时,用 start/end 一处代码两种效果,维护成本最低,多语言团队都受益。
Q: 两端对齐后中文段落出现奇怪的字间距?A: 为中文文本补充 text-justify: inter-ideograph,让引擎按中文习惯调整字间与词间空隙;如果仍然不满意,中文正文改用左对齐,两端对齐只用于英文,效果更可控,也符合中文阅读习惯,多数团队最终都采用这个组合。
Q: text-indent 没有生效?A: 确认元素是块级或列表项(行内元素不生效),确认样式未被更具体的选择器覆盖;富文本编辑器生成的内联样式优先级最高,必要时用 !important 或清洗内联样式,缩进立刻恢复正常,排查三步走,效率最高。
最佳实践小结:正文按语言选择对齐(中文左对齐或两端对齐、英文两端对齐)、缩进用 em 单位、段落间距用 margin、窄容器避开 justify、多语言用逻辑属性 start/end。这套规范覆盖绝大多数文档场景,PDF 排版严谨专业,验收一次通过率明显提升,团队协作的返工也大幅减少。
下面的按钮用 dompdf.js 在浏览器端实时生成 PDF,无需后端:
这是由 dompdf.js 渲染的示例 PDF 内容。