# blog-5l:后台预览一致性 + 排版提醒 + 瞬间置顶/隐藏 - **slug**: 2026-11-05_blog-5l-admin-preview-moments - **日期**: 2026-11-05 - **状态**: 进行中 - Git integration branch:`spec/2026-11-05_blog-5l-admin-preview-moments` - 证据协议:evidence: runs - **提案**: 后台(Sveltia CMS)编辑 markdown 时的预览窗格不渲染排版类(font- 字体、c-/ink- 颜色看不到效果),且编辑时缺少「能用哪些字体/颜色」的提醒;瞬间(moments)需要与文章一致的置顶/隐藏能力。三件事合成一包:预览注入站点排版样式(官方 `CMS.registerPreviewStyle`)、hint/文档提醒、moments pinned/hidden 真字段契约。 ## 1. 问题定义 - **项目目标**:后台编辑 markdown 时预览窗格直接显色/显字体(与真实页面一致),编辑时能看到可用字体/颜色的提醒;瞬间获得与文章一致的置顶/隐藏能力。 - **目标用户**:站长(编辑体验与内容管理);读者不受影响(仅瞬间排序/可见性语义对齐) - **核心价值**:所见即所得消灭「写完发布才发现样式不对」的往返;moments 与 posts 的管理语义统一,降低心智负担 ## 2. 假设与待确认 ### 2.1 已确认事实 - Sveltia 0.252.0(本地 pinned bundle)含 `registerPreviewStyle`(raw 字符串/URL 两态,支持 collection 作用域)——bundle 内已核实校验逻辑 - 已有「排版」inline 编辑器组件(Insert ▸ 排版,typography-classes.js 清单 + 自建选择面板:字体实样 + 色卡) - posts 已有 pinned/hidden 真字段 + post-visibility 单一事实源;moments 排序在 MomentsPage.astro 内联(唯一消费点) - 自托管字体切片落 public/fonts//fonts.css(unicode-range 按需取片),路径稳定可被后台引用 ### 2.2 关键假设 - 预览窗格是 CMS 内部管理的文档,官方 registerPreviewStyle 是唯一稳定注入口(MutationObserver 手注会被重渲染冲掉且升级易碎) - 预览目标是「类效果可见」(颜色对、字体对、基础排版近似),不追求像素级还原 ### 2.3 待确认问题 - [x] 预览注入走官方 registerPreviewStyle,不走 iframe hack(0.252.0 已核实存在) - [x] 真字体预览走切片 CSS(unicode-range 按需取片),不在后台整包加载 TTF - [x] moments 置顶多选允许(与书架/文章口径一致);隐藏 = 真字段过滤,无 legacy tag 兼容 ### 2.4 可选解释与取舍 - 提醒做成 hint 速查 + 已有排版面板的入口提示,不做常驻侧栏文档组件(Sveltia 定制面有限,hint 是官方支持的展示位) - serif/kai/kuaile 的 CSS 经 Vite ?url 打包成哈希名,后台引不到稳定 URL,预览走字体栈系统回退(近似可见,文档注明差异) ### 2.5 已证伪路径 - 往预览 iframe 手动注入 `