Jekyll中如何通过YAML配置无需JS的当前页锚点链接
解答
纯YAML静态配置无法实现带通配符的自适应路径锚点,但无需JavaScript,通过简单调整配置和模板逻辑即可满足需求。
原有配置失效原因
YAML仅做静态数据存储,不支持通配符解析,你配置的*/#aside会被当做普通字符串处理,Jekyll不会自动将*替换为当前页面路径,因此无法正常跳转。
可行实现方式
方案1:模板直接写相对锚点(成本最低)
如果这个链接不需要和其他导航项统一走YAML配置,直接在渲染侧边栏/导航的模板文件里添加相对锚点即可:
<!-- 原有导航循环渲染完成后追加 --> <a href="#aside">Index</a>
相对路径锚点#aside会由浏览器自动拼接当前页面路径:在/html/页自动指向/html/#aside,在/css/页自动指向/css/#aside,完全匹配需求。
方案2:保留YAML统一管理入口
如果需要把该链接和其他导航项一起放在YAML中维护,不要在URL字段写通配符,仅存储锚点值,同时增加标记避免模板自动拼接站点根路径:
- 调整YAML导航配置:
- title: HTML url: /html/ - title: CSS url: /css/ - title: Index url: "#aside" is_anchor: true
- 修改导航渲染逻辑,锚点项直接输出URL,跳过路径转换:
{% for item in site.navigation %} {% if item.is_anchor %} <a href="{{ item.url }}">{{ item.title }}</a> {% else %} <a href="{{ item.url | relative_url }}">{{ item.title }}</a> {% endif %} {% endfor %}
注意:大部分Jekyll主题默认会给导航配置里的URL自动拼接站点根路径,如果不加标记直接写
url: "#aside",最终渲染的链接会变成/#aside,无论在哪个页面点击都会跳转到首页锚点,不符合预期。
内容的提问来源于stack exchange,提问作者Unix
相关产品推荐
相关产品推荐

