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

Drupal 9 Olivero主题移动端主菜单子菜单显示实现方案

Drupal 9 Olivero主题移动端默认展开子菜单的实现方案

不需要创建自定义模块,通过子主题的自定义脚本和样式即可实现,具体步骤如下:

1. 添加自定义JavaScript代码

在你的Olivero子主题目录下创建js/custom-mobile-menu.js文件,写入以下代码:

(function (Drupal, drupalSettings, once) {
  // 定义展开子菜单的函数
  const expandSubmenus = () => {
    // 仅在移动端视图下执行
    if (window.innerWidth < 780) {
      once('mobile-submenu-expand', '.primary-nav__button-toggle').forEach(button => {
        // 如果按钮未展开,则触发点击
        if (button.getAttribute('aria-expanded') === 'false') {
          button.click();
          // 同步更新关联元素的类和属性
          const targetId = button.getAttribute('aria-controls');
          const submenu = document.getElementById(targetId);
          const carrot = button.nextElementSibling;
          if (submenu) submenu.classList.add('is-active-menu-parent');
          if (carrot) carrot.classList.add('is-active-menu-parent');
        }
      });
    } else {
      // 桌面视图下恢复默认状态(可选)
      once('mobile-submenu-expand', '.primary-nav__button-toggle').forEach(button => {
        if (button.getAttribute('aria-expanded') === 'true') {
          button.click();
          const targetId = button.getAttribute('aria-controls');
          const submenu = document.getElementById(targetId);
          const carrot = button.nextElementSibling;
          if (submenu) submenu.classList.remove('is-active-menu-parent');
          if (carrot) carrot.classList.remove('is-active-menu-parent');
        }
      });
    }
  };

  // 页面加载时执行
  Drupal.behaviors.mobileSubmenuExpand = {
    attach: function (context) {
      expandSubmenus();
      // 监听窗口 resize 事件
      window.addEventListener('resize', expandSubmenus);
    }
  };
})(Drupal, drupalSettings, once);

2. 添加自定义CSS样式

在子主题的css/custom-mobile-menu.css文件中添加以下样式,确保子菜单默认显示:

@media (max-width: 779px) {
  .primary-nav__menu--level-2.is-active-menu-parent {
    display: block !important;
  }
}

3. 在子主题库中引入资源

编辑子主题的[子主题名称].libraries.yml文件,添加以下配置:

custom-mobile-menu:
  js:
    js/custom-mobile-menu.js: {}
  css:
    component:
      css/custom-mobile-menu.css: {}
  dependencies:
    - core/drupal
    - core/once

最后,在子主题的info.yml文件中确保该库被加载,或者通过主题设置添加到全局资源中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:39:46