B 型 · 文档阅读方案

创建: 2026-08-19 23:31 · 编辑: 2026-08-19 23:31
字数: 952 · 阅读约 5 分钟

使用场景

文档阅读模板适合长文本内容的消费和知识沉淀场景,是三层模板中功能最丰富的一层。

场景 说明 典型篇幅
分析报告 竞品分析、技术调研、市场研究的长篇报告 500-5000 字
技术文档 API 手册、架构说明、最佳实践指南 1000-10000 字
长文阅读 博客/Newsletter/论文的摘要整理 200-3000 字
知识沉淀 个人笔记、学习总结、项目复盘 500-5000 字
会议纪要 结构化会议记录,含待办、决策、讨论点 200-2000 字

不适合的场景

  • 结构化数据浏览(搜索+排序+分页 → 用 A 型表格)
  • 多类目知识浏览(顶部标签切换 → 用 C 型知识库)
  • 协作编辑(B 型是只读展示,不是编辑器)

方案设计

架构

Layer 1: style-guide.css (CSS 变量 + 组件基座)
Layer 2: layout-doc.html (骨架: 侧边栏TOC + 主内容区)
Layer 3: html-gen.py → doc 子命令 (Markdown→HTML 渲染器)

数据流

Markdown 文件 ──→ html-gen doc ──→ 单文件 HTML
                 │                  ├── 自动 TOC
                 │                  ├── 表格渲染
                 │                  ├── 代码高亮
                 │                  ├── 进度条
                 │                  ├── callout 提示框
                 │                  ├── 锚点链接
                 │                  ├── 代码行号
                 │                  └── 外链归档
                 └── 元信息自动计算

关键设计决策

决策 选择 理由
Markdown 渲染 手写渲染器 零外部依赖,精准控制输出。仅需覆盖我们使用的语法子集
CSS 框架 参考 Docsify dark.css 经过了大量实际文档的检验,适合深色主题文档阅读
侧边栏 TOC 固定 260px + 粘性定位 长文导航的黄金宽度,内容区 max-width 880px 保证阅读体验
滚动高亮 JS 根据 getBoundingClientRect().top ≤ 100 判断 纯前端,无交叉观察者依赖
代码行号 CSS counter + JS 拆分 line 元素 纯前端可选,单行跳过,不影响复制按钮
Callout 正则检测 > Note: 模式 利用原有 Markdown blockquote 语法,无需新语法
外链归档 服务端 re.findall 提取 + 追加 文档生成时一次性完成,客户零开销
图片灯箱 纯 CSS overlay + JS 无第三方库,支持 Escape / 点击外部关闭

手写 Markdown 渲染器支持语法

# h1  ## h2  ### h3                    — 标题
**bold**  *italic*                      — 行内格式
`code`                                 — 行内代码
``` ```
 代码块                              — 围栏代码块
[link](url)                            — 链接 (target=_blank)
| table | with | cells |               — 表格
- list item                            — 无序列表
1. list item                           — 有序列表
---                                    — 分隔线
> blockquote                           — 引用
> **Note:** text                       — Callout 提示框
> **Warning:** text                    — Callout 警告
> **Tip:** text                        — Callout 提示
> **Danger:** text                     — Callout 危险

行业对标

维度 B 型 · 文档阅读 Docsify VuePress GitBook
定位 单文件文档阅读 SPA 文档站点 SSG 文档站点 托管文档平台
部署 单文件 HTML 静态服务器 构建后静态文件 SaaS
渲染 服务端预渲染 客户端 JS 渲染 构建时 SSG 服务端渲染
搜索 ❌ 暂无 ✅ 全文搜索 ✅ algolia ✅ 内置
TOC ✅ 自动 ✅ 插件 ✅ 自动 ✅ 自动
代码高亮 ✅ 行号 + 复制 ✅ prism.js ✅ prism/shiki ✅ prism
图片 ✅ 灯箱 ✅ 缩放 ✅ 缩放 ✅ 缩放
Callout ✅ 原生 ✅ 插件 ✅ 插件 ✅ 内置
离线 ✅ 单文件完整 ❌ 依赖 CDN ✅ 全构建 ❌ 需网络
文件大小 ~35KB(含内容) ~100KB+CDN ~50KB+构建产物 N/A
外部依赖 marked.js Vue/Webpack SaaS

核心差异:B 型不是文档站框架的替代品,而是「我需要把一个 Markdown 文件发给别人看」场景下的最优解。无需安装、无需构建、无需网络,生成即用。


功能清单

已实现 ✅

功能 说明 优先级
Markdown → HTML 渲染 手写渲染器,支持 h1-h3/表格/列表/代码块/链接/图片 P0
自动侧边栏 TOC 从 h2/h3 生成目录树,点击平滑滚动 P0
滚动章节高亮 滚动时自动标记当前阅读位置 P0
代码复制按钮 悬停显示,一键复制代码块内容 P0
代码行号 多行代码块左侧行号(CSS counter),单行跳过 P1
Callout 提示框 > Note/Tip/Warning/Danger → 蓝/绿/黄/红 P1
锚点链接 ¶ h2/h3 悬浮显示 ¶,点击复制 #section-id 到剪贴板 P1
外链归档 自动提取全文 https:// 链接,去重排序追加到底部 P1
阅读进度条 顶部 2px 固定钴蓝色进度条 P0
图片灯箱 点击放大,overlay 展示,Escape 关闭 P0
自动元信息 路径/创建时间/编辑时间/字数/阅读时长 P0
inline 全局格式化 表格内 bold code [link] 正确渲染 P0
深色主题 Docsify-inspired surface-950 深色主题 P0
零外部依赖 单文件 HTML,无需加载 CDN P0

待实现 🔜

功能 说明 优先级
Back-to-top 按钮 长文阅读中快速回到顶部 P2
浮动 TOC 小屏设备上的悬浮目录按钮 P2
正文宽度 65ch 优化大屏阅读体验,限制行宽 P2
面包屑导航 显示文档层级路径 P2
上/下一篇导航 多文档间的顺序导航按钮 P2
键盘快捷键 j/k 滚行、Enter 打开链接、? 帮助、t 回到顶部 P3
交互式进度条 显示剩余分钟数、章节标题 P3
图片懒加载 长文档首次加载优化 P3
全文搜索 多文档全文搜索(需要索引支撑) P3
Tags 系统 文档标签筛选和分类浏览 P3
视频/音频嵌入 支持 iframe/embed 标签 P3

快速开始

# 从 Markdown 生成文档
html-gen doc -i report.md -o report.html

# 指定标题
html-gen doc -i analysis.md --title "竞品分析报告" -o output.html

# 直接打开
open report.html

命令行参数

html-gen doc -h
  -i, --input FILE   输入 Markdown 文件(必需)
  -o, --output FILE  输出 HTML 文件
  --title TEXT       覆盖文档标题
  --subtitle TEXT    副标题(显示在侧边栏和页头)

URL 入参控制展示设置

打开页面时可追加 URL 参数控制宽度、侧边栏、工具栏等展示设置(知识库 iframe 嵌入时自动附加):

参数 取值 效果
width wide / narrow 内容区宽度:wide=1280px 宽屏 / narrow=720px 窄栏(默认 960px)
sidebar 0 / 1 侧边栏显示:sidebar=0 隐藏(默认显示)
toolbar 0 / 1 工具栏显示:toolbar=0 隐藏(默认显示)

示例:

# 宽屏 + 隐藏侧边栏/工具栏(知识库嵌入模式)
report.html?width=wide&sidebar=0&toolbar=0

# 窄栏专注阅读
report.html?width=narrow

说明:

  • 侧边栏/工具栏隐藏仅控制 display,功能保留([ 快捷键、搜索等仍可用)
  • 知识库(C 型)加载 doc 页时自动附加 sidebar=0&toolbar=0&t=<时间戳>;概述类页面(url 含 overview)额外附加 width=wide
  • ?t= 时间戳用于绕过浏览器缓存,与展示参数正交

迭代记录

版本 日期 变更
v1.0 2026-07-05 初版:Docsify 风格 TOC + 代码复制 + Markdown 渲染
v1.1 2026-07-06 进度条 + 灯箱 + 锚点链接 + 代码行号 + callout + 外链归档
v2.0 2026-08-11 Bare 模式(默认隐藏 sidebar/toolbar,?sidebar=1&toolbar=1 展示);折叠/拖拽/搜索/H3 开关/中英双语/主题切换
v2.1 2026-08-18 meta 去路径行;标题点击复制 fallback 完整 URL
v2.2 2026-08-19 URL 入参控制展示设置(width=wide/narrow、sidebar/toolbar 正交)