课程栏目折叠子导航操作手册
课程栏目折叠子导航操作手册
目的:记录如何为课程页面添加锚点式子导航,并通过侧边栏实现“点击父栏目才展开子项”的折叠效果,可重复套用到新课程。
1. 侧边栏折叠逻辑
- 文件:
_includes/nav_list - 核心思路: 1) 仅当当前页面 URL 等于父级链接或以父级链接为前缀时,渲染该父级的子
ul;否则折叠。 2)active类判定同时兼容精确匹配与带尾随/的情况。 关键 Liquid 片段(摘录): ```liquid
## 2. 导航数据结构
- 文件:`_data/navigation.yml`
- 模式:
```yaml
course_nav:
- title: "离散数学"
url: /course/discrete-math/
children:
- title: "命题逻辑"
url: /course/discrete-math/#logic
- title: "关系与集合"
url: /course/discrete-math/#set
...
- title: "数据库系统"
url: /course/database/
children:
- title: "引言"
url: /course/database/#intro
...
3. 页面锚点约定
- 在目标页面(如
_pages/discrete-math.md)的主段落标题后添加显式锚点:## 命题逻辑 <a id="logic"></a> - 子导航 URL 使用
#logic等锚点,确保点击时滚动到对应段落。
4. 新课程/新子页面复用步骤
1) 在目标页面插入锚点:<a id="xxx"></a>,一段对应一个子导航。 2) 在 _data/navigation.yml 为课程节点添加 children,指向 /<course>/<page>/#anchor。 3) 无需改模板,_includes/nav_list 已内置折叠逻辑。 4) 若有旧子页面被合并,给主页面加 redirect_from 列出旧路径。
5. 快速检查
- 本地或 Actions 构建:
bundle exec jekyll build。 - 打开
/course/<page>/:- 侧边栏默认父级折叠;点击或进入父级页面时,子项自动展开。
- 子项高亮(class
active)出现在当前锚点对应 URL。
6. 已应用示例
- 离散数学:
/course/discrete-math/+ 子锚#logic/#set/#graph/#algebra。 - 数据库系统:
/course/database/+ 子锚#intro/#rel/#design/#storage/#opt/#txn。
