Сообщество строителей сайтов на Joomla + Gridbox

Gridbox 3.0 уже вышел — как безопасно обновиться

Личный кабинет

Открытие выпадающего меню по клику в Gridbox

Стандартное поведение навигации в Gridbox настроено на событие наведения (Hover), что нередко приводит к случайному закрытию выпадающего списка при смещении мыши. Это руководство позволяет переключить выпадающие пункты на открытие строго по клику (Click Event) с автоматическим закрытием при клике в любую свободную область страницы.
Сложность Low-Code (CSS + JS)
Время ~ 3 минуты
Совместимость Gridbox / Joomla 4 / 5 / 6 и т.д.
1 Назначение суффикса класса плагину меню

Открой страницу в редакторе Gridbox, выдели плагин Главное меню (Main Menu), перейди в его настройки и в поле Class Suffix добавь класс:

Class Suffix
dropdown-click
2 Отключение hover и настройка стилей (CSS)

Перейди в Инструменты ➝ Редактор кода ➝ CSS и добавь правила, отключающие стандартное всплытие при наведении и активирующие показ только по активному классу:

CSS
/* Блокировка стандартного открытия меню по hover */.dropdown-click .main-menu > .nav > li.deeper:hover > .dropdown-menu { display: none !important; opacity: 0 !important; visibility: hidden !important;}/* Открытие меню только при наличии активного класса */.dropdown-click .main-menu > .nav > li.deeper.open-dropdown > .dropdown-menu { display: block !important; opacity: 1 !important; visibility: visible !important;}/* Курсор указателя для родительских пунктов с подменю */.dropdown-click .main-menu > .nav > li.deeper > a,.dropdown-click .main-menu > .nav > li.deeper > span { cursor: pointer;}
3 Обработка событий клика (JavaScript)

Перейди во вкладку Инструменты ➝ Редактор кода ➝ JavaScript и добавь скрипт управления переключением списков:

JavaScript
document.addEventListener('DOMContentLoaded', () => { const parentItems = document.querySelectorAll('.dropdown-click .main-menu > .nav > li.deeper'); parentItems.forEach(item => { const trigger = item.querySelector(':scope > a, :scope > span'); if (!trigger) return; trigger.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); // Закрываем другие открытые подменю на том же уровне parentItems.forEach(otherItem => { if (otherItem !== item) { otherItem.classList.remove('open-dropdown'); } }); // Переключаем текущее выпадающее меню item.classList.toggle('open-dropdown'); }); }); // Закрытие выпадающего списка при клике в любое место вне меню document.addEventListener('click', (e) => { if (!e.target.closest('.dropdown-click')) { parentItems.forEach(item => item.classList.remove('open-dropdown')); } });});
Обрати внимание:

Для родительских пунктов в меню Joomla создавай тип «Заголовок меню» (Menu Heading) или «URL» со значением #, чтобы при первом тапе или клике страница не перезагружалась, а раскрывался список.

Посмотреть пример:

Видит визуальный результат решения