Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Accueil » Divi astuces » Fermer les sous-menus mobiles dans Divi en gardant le menu parent cliquable

Fermer les sous-menus mobiles dans Divi en gardant le menu parent cliquable

Temps de lecture : 3 mn

Lorsque vous utilisez le thème Divi pour concevoir des sites WordPress, la gestion des sous-menus sur mobile peut parfois poser problème. Par défaut, Divi permet d’ouvrir les sous-menus mobiles mais ne propose pas toujours une fonctionnalité native pour les refermer facilement. Dans cet article, nous allons voir comment ajouter cette fonctionnalité de fermeture des sous-menus sur les appareils mobiles, en utilisant un peu de code personnalisé.


Pourquoi fermer les sous-menus mobiles ?

Les sous-menus ouverts peuvent encombrer l’écran, surtout sur des petits appareils. Permettre aux utilisateurs de fermer les sous-menus améliore :

  • L’expérience utilisateur : Navigation simplifiée et plus intuitive.
  • L’esthétique du site : Une interface plus propre et moins chargée.
  • L’accessibilité : Réduction de la confusion lors de la navigation.

Étape 1 : Ajouter un identifiant ou une classe au menu

Avant de modifier le comportement des sous-menus, assurez-vous que votre menu principal a une classe ou un identifiant unique. Par défaut, Divi attribue des classes comme et_mobile_menu au menu mobile.

  1. Allez dans Apparence > Menus dans le tableau de bord WordPress.
  2. Vérifiez que vos éléments de menu sont bien configurés.
  3. Si nécessaire, ajoutez une classe CSS à votre menu via les options avancées.

Étape 2 : Ajouter du JavaScript pour gérer l’ouverture et la fermeture

Ensuite, nous allons écrire un petit script pour ajouter une fonctionnalité de fermeture des sous-menus.

1. Allez dans le Personnalisateur de thème :

  • Rendez-vous dans Apparence > Personnaliser > Options de thème > Intégration.
  • Ajoutez le code suivant dans la section « Ajouter du code au <body> » :
<script >
jQuery(function($) {
$(document).ready(function() {
$("body ul.et_mobile_menu li.menu-item-has-children, body ul.et_mobile_menu li.page_item_has_children").append('<a href="#" class="mobile-toggle"></a>');
$('ul.et_mobile_menu li.menu-item-has-children .mobile-toggle, ul.et_mobile_menu li.page_item_has_children .mobile-toggle').click(function(event) {
event.preventDefault();
$(this).parent('li').toggleClass('dt-open');
$(this).parent('li').find('ul.children').first().toggleClass('visible');
$(this).parent('li').find('ul.sub-menu').first().toggleClass('visible');
});
iconFINAL = 'P';
$('body ul.et_mobile_menu li.menu-item-has-children, body ul.et_mobile_menu li.page_item_has_children').attr('data-icon', iconFINAL);
$('.mobile-toggle').on('mouseover', function() {
$(this).parent().addClass('is-hover');
}).on('mouseout', function() {
$(this).parent().removeClass('is-hover');
})
});
});
</script>

Étape 3 : Ajouter du style CSS pour gérer les transitions

Ensuite, appliquez un peu de CSS pour améliorer l’affichage et masquer les sous-menus lorsqu’ils ne sont pas ouverts.

  1. Allez dans Divi > Options de thème > CSS personnalisé ou utilisez le Personnalisateur de thème.
  2. Ajoutez le code suivant :
/*change hamburger icon to x when mobile menu is open*/

#et_mobile_nav_menu .mobile_nav.opened .mobile_menu_bar::before,
.et_pb_module.et_pb_menu .et_mobile_nav_menu .mobile_nav.opened .mobile_menu_bar::before {
content: 'd';
}


/*adjust the new toggle element which is added via jQuery*/

ul.et_mobile_menu li.menu-item-has-children .mobile-toggle,
ul.et_mobile_menu li.page_item_has_children .mobile-toggle,
.et-db #et-boc .et-l ul.et_mobile_menu li.menu-item-has-children .mobile-toggle,
.et-db #et-boc .et-l ul.et_mobile_menu li.page_item_has_children .mobile-toggle {
width: 44px;
height: 100%;
padding: 0px !important;
max-height: 44px;
border: none;
position: absolute;
right: 0px;
top: 0px;
z-index: 999;
background-color: transparent;
}


/*some code to keep everyting positioned properly*/

ul.et_mobile_menu>li.menu-item-has-children,
ul.et_mobile_menu>li.page_item_has_children,
ul.et_mobile_menu>li.menu-item-has-children .sub-menu li.menu-item-has-children,
.et-db #et-boc .et-l ul.et_mobile_menu>li.menu-item-has-children,
.et-db #et-boc .et-l ul.et_mobile_menu>li.page_item_has_children,
.et-db #et-boc .et-l ul.et_mobile_menu>li.menu-item-has-children .sub-menu li.menu-item-has-children {
position: relative;
}


/*remove default background color from menu items that have children*/

.et_mobile_menu .menu-item-has-children>a,
.et-db #et-boc .et-l .et_mobile_menu .menu-item-has-children>a {
background-color: transparent;
}


/*hide the submenu by default*/

ul.et_mobile_menu .menu-item-has-children .sub-menu,
#main-header ul.et_mobile_menu .menu-item-has-children .sub-menu,
.et-db #et-boc .et-l ul.et_mobile_menu .menu-item-has-children .sub-menu,
.et-db #main-header ul.et_mobile_menu .menu-item-has-children .sub-menu {
display: none !important;
visibility: hidden !important;
}


/*show the submenu when toggled open*/

ul.et_mobile_menu .menu-item-has-children .sub-menu.visible,
#main-header ul.et_mobile_menu .menu-item-has-children .sub-menu.visible,
.et-db #et-boc .et-l ul.et_mobile_menu .menu-item-has-children .sub-menu.visible,
.et-db #main-header ul.et_mobile_menu .menu-item-has-children .sub-menu.visible {
display: block !important;
visibility: visible !important;
}


/*adjust the toggle icon position and transparency*/

ul.et_mobile_menu li.menu-item-has-children .mobile-toggle,
.et-db #et-boc .et-l ul.et_mobile_menu li.menu-item-has-children .mobile-toggle {
text-align: center;
opacity: 1;
}


/*submenu toggle icon when closed*/

ul.et_mobile_menu li.menu-item-has-children .mobile-toggle::after,
.et-db #et-boc .et-l ul.et_mobile_menu li.menu-item-has-children .mobile-toggle::after {
top: 10px;
position: relative;
font-family: "ETModules";
content: '';
color: #00d263;
background: #f0f3f6;
border-radius: 50%;
padding: 3px;
}


/*submenu toggle icon when open*/

ul.et_mobile_menu li.menu-item-has-children.dt-open>.mobile-toggle::after,
.et-db #et-boc .et-l ul.et_mobile_menu li.menu-item-has-children.dt-open>.mobile-toggle::after {
content: '';
}


/*add point on top of the menu submenu dropdown*/

.et_pb_menu_0.et_pb_menu .et_mobile_menu:after {
position: absolute;
right: 5%;
margin-left: -20px;
top: -14px;
width: 0;
height: 0;
content: '';
border-left: 20px solid transparent;
border-right: 20px solid transparent;
border-bottom: 20px solid #ffffff;
}


/*adjust the position of the hamburger menu*/

.mobile_menu_bar {
position: relative;
display: block;
bottom: 10px;
line-height: 0;
}


/*force the background color and add a rounded border*/

.et_pb_menu_0.et_pb_menu .et_mobile_menu,
.et_pb_menu_0.et_pb_menu .et_mobile_menu ul {
background-color: #ffffff!important;
border-radius: 10px;
}

.et_mobile_menu .menu-item-has-children .sub-menu{
display: none !important;
}

.pa-block{
display: block !important;
height: fit-content !important;
padding-top: 0 !important;
margin-top: 0 !important;
padding: 5% !important;
margin-bottom: 0 !important;
margin-top: 0 !important;
}

.et_mobile_menu .menu-item-has-children .pa-submenu{
display: block !important;
}

.opened .et_mobile_menu{
height: fit-content !important;
padding: 5% !important;
}


ul.et_mobile_menu li.menu-item-has-children .mobile-toggle, .et-db #et-boc .et-l ul.et_mobile_menu li.menu-item-has-children .mobile-toggle{
text-align: right;
width: 100%;
}

Étape 4 : Tester et ajuster

  • Testez le comportement de votre menu sur des appareils mobiles.
  • Si besoin, ajustez les classes CSS ou les transitions pour obtenir l’effet souhaité.
Aller + loin  Créez une Galerie d'Images Filtrable avec le Module Onglets de Divi : Guide Complet

La petite astuce

Vous pouvez ajouter ce code pour ouvrir les sous menu au clic sur le parent item =>
.mobile-toggle { width: 100% !important; text-align: right !important; }

Pour conclure

Avec ce guide, vous pouvez facilement ajouter une fonctionnalité de fermeture des sous-menus mobiles dans Divi. Cette personnalisation permet d'améliorer l'expérience utilisateur tout en maintenant un design épuré. Si vous souhaitez aller plus loin, vous pouvez intégrer des icônes ou animations pour rendre cette interaction encore plus intuitive. Besoin d’aide pour personnaliser votre site WordPress ou Divi ? N’hésitez pas à me contacter pour un accompagnement sur mesure. 🚀

Continuer la lecture

Intégrer la balise Google analytics à son site

Google Analytics est un outil indispensable pour suivre les performances de votre site web et comprendre le comportement de vos visiteurs. Si vous utilisez WordPress et le thème Divi, vous avez de la chance, car l’intégration de Google Analytics est à la fois simple...

lire plus