You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll Bootstrap带下拉导航栏激活子页时高亮父项的实现方法

实现方案

1. 修改导航渲染模板逻辑

你只需要在原有模板中加入当前URL和导航层级的匹配判断即可,修改后的navmenu.html完整代码如下:

<nav id="site-nav" class="navbar navbar-expand-lg navbar-light bg-light">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Navbar</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav me-auto mb-2 mb-lg-0">
        {% for section in site.data.navigation %}
          {% assign is_section_active = false %}
          {% comment %} 先判断当前页面是不是父项本身的页面 {% endcomment %}
          {% if page.url == section.url %}
            {% assign is_section_active = true %}
          {% endif %}
          {% comment %} 再判断当前页面是不是该父项的子页面 {% endcomment %}
          {% for subpage in section.subpages %}
            {% if page.url == subpage.url %}
              {% assign is_section_active = true %}
            {% endif %}
          {% endfor %}
          <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle {% if is_section_active %}selected{% endif %}" href="{{ section.url }}">{{ section.title }}</a>
            {% if section.subpages %}
            <ul class="dropdown-menu">
              {% for subpage in section.subpages %}
              <li><a class="dropdown-item {% if page.url == subpage.url %}current{% endif %}" href="{{ subpage.url }}">{{ subpage.title }}</a></li>
              {% endfor %}
            </ul>
            {% endif %}
          </li>
        {% endfor %}                
      </ul>        
    </div>
  </div>
</nav>

2. 逻辑说明

  • 遍历每个导航父项时先初始化激活状态为未激活
  • 依次匹配当前页面URL是否等于父项URL、或等于该父项下任意子页面URL
  • 匹配成功后给父项链接添加你预设的.selected类,自动触发你定义的红背景高亮样式
  • 同时额外给当前访问的子页面链接添加了.current类,符合你现有CSS规则

3. 兼容场景补充

如果你的Jekyll站点配置了baseurl(部署在子目录下),需要把匹配逻辑中的URL统一拼接site.baseurl,避免匹配失败,修改判断条件即可:

{% if page.url == site.baseurl | append: section.url %}
{% if page.url == site.baseurl | append: subpage.url %}

如果你的页面URL存在带.html后缀、或末尾带斜杠的差异,也可以用contains替代==做模糊匹配,适配性更强:

{% if page.url contains section.url %}

内容的提问来源于stack exchange,提问作者JappperCat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:54:03