今天做了什么
- 笔记详情页加自动大纲(TOC):
- 从 Astro
render() 拿 headings,只取 h2/h3(h4 太细),h2/h3 合计 ≥4 节才显示
- 桌面(≥1100px):右侧粘性栏,
max-height + 内部滚动,样式对齐月分组标题(// 大纲)
- 移动端:正文上方
<details> 折叠块(显示“大纲 · N 节”),零客户端 JS,复用 todo 页的展开/收起样式
- 抽出
TocList.astro 组件,桌面栏和移动折叠块共用同一份嵌套列表
- prose 标题补
scroll-margin-top,锚点跳转后标题不顶头
- 验证:构建 30 页通过;Playwright 截图确认桌面侧栏、锚点跳转、移动端折叠/展开全部正常;短笔记(mattpocock,0 个标题)正确地不出大纲。
过程与坑
- 担心 Astro 不给标题加 id(那锚点就全断了),查 dist 产物确认 h2/h3 自带 id 且与
headings[].slug 一致——虚惊一场, Astro 默认管线包含 slug。
- 中文标题的 slug 规则:中英之间无连接符(“RAG Tutorials(RAG 教程)” →
rag-tutorialsrag-教程),手写锚点别猜,以产物为准。
- Playwright 沙盒 spawn EPERM 照旧,提权后正常。
下一步
- log / projects 详情页如果也写出长文,可以把 TocList 复用过去(组件和样式都是通用的,页面上接 headings 就行)。