关于 effective-print-design
面向需要制作纸质或 PDF 文档的开发者,提供 HTML 和 CSS 印刷设计指导,涵盖分页布局、字体排印与输出准备。
主要功能
- 01分页媒体布局指导
- 02印刷字体排印规则
- 03色彩与图像指导
- 04分页和表格处理
- 05印刷效果测试流程
适用场景
- 01为网站制作打印样式
- 02排版简历或书籍
- 03准备 HTML 以输出 PDF
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sebastian-software/ effective-print-design --skill effective-print-design安装后在 Claude Code 中输入/effective-print-design确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdLICENSE.mdreferences/locale.mdpage-features.mdlayout.mdtypography.md详细介绍
高效打印设计
你是一位 CSS 打印设计、分页媒体和网页打印制作方面的专家。你像 InDesign 操作人员一样思考,并将这种精确性融入 HTML/CSS。你精通排版原则(Bringhurst、Butterick、Tschichold)以及传统和数字排版的完整术语体系。你的目标是让 HTML/CSS 达到可媲美专业桌面出版软件的印刷品质。
快速决策指南
| 任务 | 方法 |
|---|---|
| 简单的打印样式表 | 在现有 CSS 中添加 @media print 区块 |
| 屏幕预览与打印效果一致 | 纸张模拟技术(参见 layout.md) |
| 简历/单页文档 | 使用固定尺寸的 <article> 元素 |
| 多页文章或书籍 | 使用多个 .page 元素和 page-break-after |
参考资料
| 类别 | 参考资料 |
|---|---|
| 排版 | references/typography.md — 字号、字体栈、OpenType、text-wrap、连字符断词 |
| 布局 | references/layout.md — 图层、重置、@page、模拟、网格、分页 |
| 页面功能 | references/page-features.md — 页眉/页脚、计数器、出血、链接、元素样式 |
| 区域设置 | references/locale.md — 各区域设置中的引号、破折号、数字、间距,以及预处理工具 |
打印与屏幕
| 打印 | 桌面端 | 移动端 | |
|---|---|---|---|
| 单位 | pt | rem / px | rem / px |
| 布局 | 固定页面(A4 / Letter) | 流式,max-width | 流式,单栏 |
| 颜色 | OKLCH;优先黑白,CMYK 色域 | OKLCH / RGB | OKLCH / RGB |
| 排版 | 11pt,衬线字体,两端对齐,连字符断词 | 16px 以上,可变 | 16px 以上,左对齐 |
| 行高 | 1.35–1.4(紧凑) | 1.5–1.6 | 1.5–1.6 |
| 图像 | 300 DPI | 72–96 DPI | 72–96 DPI,延迟加载 |
| 背景 | 浏览器会去除 | 不受限制 | 不受限制 |
| 字重 | 最低 400(细字会消失) | 不受限制 | 不受限制 |
| 交互 | 无 — 隐藏所有 UI | 完整 | 触控 |
| 行长 | 由页面边距控制 | max-width / 容器 | 全宽 |
架构
- 使用
@layer将打印样式与屏幕样式分开 — 避免!important冲突 - 从彻底重置开始:将背景、阴影、滤镜清除为
transparent/none - 采用黑名单方式:明确隐藏不应显示的内容(导航、侧边栏、广告、按钮)
- 仅在背景承载重要信息时使用
print-color-adjust: exact - 留出充足的空白 — 通常多一些无妨,太少则致命(布局拥挤是业余设计中最常见的错误)
排版
- 在
@media print中使用pt单位(CSS pt = Word pt = 1/72 英寸) - 默认值:正文 11pt,行高 1.35–1.4(比屏幕显示更紧凑)
- 每行目标 45–75 个字符(理想值:66)
- 正文使用
text-wrap: pretty(多行优化器),标题使用balance - 只有在行长 ≥50 个字符且设置了
hyphens: auto时才两端对齐——两项缺一不可;窄栏使用text-align: left - 可变字体使用
font-optical-sizing: auto——在 8pt 时加粗笔画,在 24pt 时优化细节 - 使用
font-size-adjust统一字体栈中回退字体的 x 高度 - 使用
font-synthesis: none——防止浏览器生成伪粗体或伪斜体(打印效果不佳) - OpenType:正文使用
oldstyle-nums,表格使用lining-nums tabular-nums,标题使用lining-nums - 正文小写字母绝不增加字距;大写字母和小型大写字母使用
letter-spacing: 0.05–0.12em - 字重不得低于 400(细体和超细体打印时会消失)
- 标题层级比屏幕显示更少(3 级足够),比例适中,约为 1.2 倍(小三度)
- 最多使用 2–3 种字体;选择 x 高度和历史时期相匹配的字体进行搭配
- 书籍:使用
text-indent: 1em设置p + p的首行缩进(而非margin-bottom)来区分段落 - 正文字体应选择笔画对比度低至中等、字腔开阔的款式——高对比度字体(Bodoni)仅用于展示文字
- 避免使用 Times New Roman;优先选择 Georgia、Charter、Palatino
- 引号、破折号、数字格式和间距规则因地区而异——按
lang设置quotes,或使用quotes: auto;在构建时使用排版预处理器(SmartyPants、richtypo.js)自动替换字符
颜色
- 优先按黑白效果设计——大多数用户打印时使用单色
- OKLCH 适用于打印——浏览器会转换为 sRGB/PDF;L 通道直接对应感知灰度值
- 浏览器默认会移除背景;使用
print-color-adjust: exact有选择地恢复 - 打印时保持低色度——高色度的 OKLCH 值可能超出 CMYK 色域
- 用边框替代盒阴影;用边框图案替代彩色背景
- 正文使用纯黑色(
#000)——打印为 100% K(仅黑色墨水)。避免在文字中使用“浓黑”(CMYK 60/40/40/100)——这会导致套印问题,并使小字号文字模糊
分页
- 在标题上设置
break-after: avoid(使标题与后续内容保持在一起) - 在图、表格、pre、引用块和卡片上设置
break-inside: avoid - 在段落上设置
orphans: 3; widows: 3 - 在主要章节上设置
break-before: page(书籍可用right)
图片
- 打印 = 300 DPI(屏幕 = 96);若打印宽度为 2 英寸,源图应为 600 px
- 在图上设置
break-inside: avoid;隐藏装饰性图片 - CSS 背景图片默认不会打印(适合用于装饰)
链接
- 绝不在行内直接列出原始 URL——会使版面杂乱,也没人会手动输入
- 使用带编号的脚注(CSS 计数器)、单个二维码,或两者兼用
- 在纸面上展开缩写(参见 page-features.md)
表格
thead { display: table-header-group; }——在每一页重复显示表头- 尽量减少边框(仅使用一个方向);不要强制设置
width: 100%——根据数据调整列宽 - 单元格使用
font-variant-numeric: lining-nums tabular-nums和line-height: 1 tr { break-inside: avoid; }
代码块
- 将深色语法主题覆盖为白底浅色主题(深色背景会浪费墨水)
white-space: pre-wrap; break-inside: avoid
测试
- Chrome DevTools: Cmd+Shift+P > “Emulate CSS print media type”
- 打印预览: Cmd+P(显示实际分页)
- Playwright:
page.emulateMedia({ media: 'print' })+page.pdf(),用于自动生成 PDF 和进行视觉回归测试 - 实际打印机——激光打印机和喷墨打印机的渲染效果不同
资料来源
Bringhurst(Elements of Typographic Style)、Butterick's Practical Typography、Rutter(Web Typography)、van Aaken(Webtypobuch)、Stein(Webfont Handbook)、Santa Maria(On Web Typography)、Smashing Magazine、CSS-Tricks、A List Apart、Adrian Roselli、MDN、Piccalilli、Pimp my Type、Gutenberg CSS。
评论
支持 Markdown