富文本排版与布局
返回 🗂 富文本编辑专题 · 相关私有笔记
本分支聚焦「富文本编辑器里的排版问题」:编辑态换行、CJK / 多语言文本、代码块、inline atom、分页、虚拟化高度预测、DOM reflow 与旁路测量层。核心问题不是「TipTap 能不能排版」,而是要把 编辑模型、浏览器 CSS 排版、测量预测、只读渲染 分层处理。
进入条件与先修
这不是搭建第一个 TipTap / ProseMirror 编辑器的必经分支。只有产品明确遇到 CJK / 长词换行、代码块溢出、inline atom 行高、分页、长文档高度预测或只读预览测量时才进入;普通的工具栏、Node / Mark、保存和协同接入不需要先读它。
- 共同先修:先读 ProseMirror 入门 与 View 与 NodeView,知道文档模型与浏览器
contentEditableDOM 各自负责什么。 - 页边界、评论锚点或临时视觉标记:再读 Plugin 与 Decoration,优先判断它是否应是 Decoration,而不是把布局状态写回文档。
- 输入延迟、强制回流或大量
NodeView:同步参照 性能与可访问性;先测量,再决定是 CSS、测量层还是编辑器结构的问题。
边界:编辑态的真实排版仍由浏览器 CSS 与 DOM 决定;测量层只能预测、辅助分页或支持只读渲染,不能替代 selection、IME、copy / paste 和可访问性语义。
当前可读的任务入口
- TipTap 排版问题调研:Pretext 与测量层 —— 从 TipTap / ProseMirror 的职责边界出发,分析 CJK 换行、代码块、mention/chip、分页、虚拟化与
@chenglou/pretext的集成位置。
尚未有独立笔记时的研究方向
- CJK 与国际化换行:CSS
line-break/word-break/overflow-wrap/hyphens与 Unicode UAX #14 的关系。 - 分页与类文档布局:为什么编辑态实时精确分页很难,以及 page overlay / decoration / export pass 的分层方案。
- 虚拟化高度预测:TipTap JSON → block metric cache → Pretext estimate → DOM reconciliation。
- inline atom 排版:mention、chip、link preview、inline code span 在 selection / copy / IME 下的边界。
- 代码块排版:横向滚动、soft wrap、Shiki 高亮、超大代码块 DOM 成本。
- 性能诊断:forced synchronous layout、ResizeObserver、NodeView mount cost、Chrome Performance trace。
与现有笔记的关系
- EditorView 与 NodeView 负责解释 PM 如何把不可变文档渲染进
contentEditable。 - Plugin 系统与 Decoration 负责解释为什么页边界、悬浮 UI、临时标记应优先用 Decoration。
- 性能优化与可访问性 负责大文档性能、NodeView 成本、IME / ARIA 风险。
- 本分支补上「文本排版本身」与「测量层如何接入」。