笔记页加了大纲

今天做了什么

  • 笔记详情页加自动大纲(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 就行)。