Come creare un menu a tendina per tablet e telefoni

Nelle impostazioni di default del tema Divi, il menu che ha dei sottoelementi non viene racchiuso in una tendina. Vediamo come risolvere questo problema.

Introduzione

Grazie a un codice CSS e un codice JS è possibile comprimere le voci del sottomenu nel tema Divi in visione mobile.
Infatti, nelle impostazioni di default le voci del sottomenu appaiono tutte elencate creando un menu troppo lungo e disordinato.
Prima di arrivare a questa soluzione ho provato molti codici e quello funzionante per ora è di Garconis.

Il risultato dovrebbe essere come questo:

Menu compresso su mobile Divi

Soluzione

Andiamo ora nei dettagli e vediamo come aggiungere i codici per creare l’effetto del menu racchiuso su mobile.

1. Codice CSS

Partiamo dal codice CSS che va incollato in Divi > Opzioni Tema > Generale > Codice CSS personalizzato.

/* -- HEADER -- */

/* remove pointer event from menu module mobile wrapper */
.et_pb_module.et_pb_menu .et_mobile_nav_menu {
	pointer-events: none;
}

/* make menu module hamburger icon and menu links interactive again */
.et_pb_module.et_pb_menu .et_mobile_nav_menu .mobile_menu_bar,
.et_pb_module.et_pb_menu .et_mobile_nav_menu .et_mobile_menu li a {
	pointer-events: auto;
}

/* when mobile menu is open, change hamburger icon to x icon */
#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: '\4d';
}

/* make desktop sub sub menu icon be right arrow instead of down arrow */
#top-menu .menu-item-has-children .menu-item-has-children > a:first-child::after, 
#et-secondary-nav .menu-item-has-children .menu-item-has-children > a:first-child::after,
.et_pb_module.et_pb_menu .et-menu .menu-item-has-children .menu-item-has-children > a:first-child::after {
	content: '5';	
}

/* if mobile parent link of child menu is a deadlink, then make it not clickable */
#main-header #mobile_menu.et_mobile_menu .menu-item-has-children > a[href="#0"],
.et_pb_module.et_pb_menu .et_mobile_menu .menu-item-has-children > a[href="#0"] { 
	pointer-events: none;
}

/* - mobile menu toggling elements, injected via jQuery - */

/* make menu list item be relative, to be able to position toggle within this item */
#main-header #mobile_menu.et_mobile_menu .menu-item-has-children,
.et_pb_module.et_pb_menu .et_mobile_menu .menu-item-has-children {
	position: relative;	
}
/* the new toggle element, which is added via jQuery */
#main-header #mobile_menu.et_mobile_menu .sub-menu-toggle,
.et_pb_module.et_pb_menu .et_mobile_menu .sub-menu-toggle {
	position: absolute;
	background-color: rgba(0,0,0,0.03);
	z-index: 1;
	width: 36px;
	height: 36px;
	line-height: 36px;
	border-radius: 50%;
	top: 4px;
	right: 4px;
	cursor: pointer;
	text-align: center;
	pointer-events: auto;
}
/* the new toggle element when popped */
#main-header #mobile_menu.et_mobile_menu .sub-menu-toggle.popped,
.et_pb_module.et_pb_menu .et_mobile_menu .sub-menu-toggle.popped {
	background-color: rgba(0,0,0,0.1);
}
/* toggle icon */
#main-header #mobile_menu.et_mobile_menu .sub-menu-toggle::before,
.et_pb_module.et_pb_menu .et_mobile_menu .sub-menu-toggle::before {
	font-family: "ETmodules" !important;
	font-weight: normal;
	font-style: normal;
	font-variant: normal;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	line-height: 36px;
	font-size: 24px;
	text-transform: none;
	speak: none;
	content: '\33';
}
/* toggle icon when triggered */
#main-header #mobile_menu.et_mobile_menu .sub-menu-toggle.popped::before,
.et_pb_module.et_pb_menu .et_mobile_menu .sub-menu-toggle.popped::before {
	content: '\32';
}
/* hide sub menus by default */
#main-header #mobile_menu.et_mobile_menu .sub-menu-toggle ~ ul.sub-menu,
.et_pb_module.et_pb_menu .et_mobile_menu .sub-menu-toggle ~ ul.sub-menu {
	display: none !important;
	padding-left: 0;
}
/* show sub menu when triggered via jQuery toggle, and add slight bg color */
#main-header #mobile_menu.et_mobile_menu .sub-menu-toggle.popped ~ ul.sub-menu,
.et_pb_module.et_pb_menu .et_mobile_menu .sub-menu-toggle.popped ~ ul.sub-menu {
	display: block !important;
	background-color: rgba(0,0,0,0.03) !important;
}
/* remove sub menu list item left padding, since padding will be on anchors */
#main-header #mobile_menu.et_mobile_menu li li,
.et_pb_module.et_pb_menu .et_mobile_menu li li {
	padding-left: 0;
}

/* adjust mobile menu anchors side paddings */
#main-header #mobile_menu.et_mobile_menu li a,
.et_pb_module.et_pb_menu .et_mobile_menu li a {
	padding-left: 20px;
	padding-right: 20px;
}
/* indent sub menu */
#main-header #mobile_menu.et_mobile_menu li li a,
.et_pb_module.et_pb_menu .et_mobile_menu li li a {
	padding-left: 40px;
	padding-right: 20px;
}
/* indent sub sub menus further */
#main-header #mobile_menu.et_mobile_menu li li li a,
.et_pb_module.et_pb_menu .et_mobile_menu li li li a {
	padding-left: 60px;
	padding-right: 20px;
}
/* if mobile menu anchor has toggle, make room for it to fit next to the link */
#main-header #mobile_menu.et_mobile_menu .menu-item-has-children .sub-menu-toggle + a,
.et_pb_module.et_pb_menu .et_mobile_menu .menu-item-has-children .sub-menu-toggle + a {
	padding-right: 44px;
}

/* - end mobile menu toggling elements - */

/* undo Divi's default styling of mobile menu links that have children */
#main-header #mobile_menu.et_mobile_menu .menu-item-has-children > a,
.et_pb_module.et_pb_menu .et_mobile_menu .menu-item-has-children > a {
	background-color: transparent;
	font-weight: inherit;
}

/* make the current page's mobile menu link be different */
#main-header #mobile_menu.et_mobile_menu li.current-menu-item > a,
.et_pb_module.et_pb_menu .et_mobile_menu li.current-menu-item > a {
	font-weight: bolder;
}

/* -- END HEADER -- */

Codice JS

Il secondo codice (anche questo essenziale per ottenere il risultato del menu raggrupato su mobile) va incollato in Divi > Opzioni Tema > Integrazione > Aggiungi codice a < head > del tuo blog.

<script>jQuery( document ).ready( function( $ ) {
	// Create collapsible sub menus in mobile Divi Header Nav
	$( '<div class="sub-menu-toggle"></div>' ).insertBefore( '#main-header #mobile_menu.et_mobile_menu .menu-item-has-children > a' );
	// Create collapsible sub menus in mobile Divi Theme Builder Menu
	$( '<div class="sub-menu-toggle"></div>' ).insertBefore( '.et_pb_module.et_pb_menu .et_mobile_menu .menu-item-has-children > a' );
	// Toggle the class to be popped on mobile Divi Header Nav
	$( '#main-header #mobile_menu.et_mobile_menu .sub-menu-toggle' ).click(function () {
		$(this).toggleClass('popped');
	});
	// Toggle the class to be popped on mobile Divi Theme Builder Menu
	$( '.et_pb_module.et_pb_menu .et_mobile_menu .sub-menu-toggle' ).click(function () {
		$(this).toggleClass('popped');
	});
	// Replace the mobile Divi Theme Builder Menu toggle with different href other than # hash, to prevent scroll to top on sub-menu-toggle clicks
	$( '.et_pb_module.et_pb_menu a.mobile_nav[href="#"]' ).attr( 'href', '#0' )
} );</script>

Questo codice dovrebbe risolvere un grande problema estetico nella visualizzazione del tuo sito Divi su Mobile! Spero che funzioni e ti possa aiutare. In caso contrario, lascia un commento qua sotto e fammelo sapere!

Autore del post

Divi Design Studio

Divi Design Studio

Siamo un team giovane con grande esperienza nella progettazione e nello sviluppo di siti web. Progettiamo siti WordPress da oltre 20 anni e siamo esperti nella creazione di contenuti digitali, branding e web design. Appassionati del tema Divi, abbiamo lanciato Divi Design Studio per offrire una vasta libreria di layout dal design moderno e professionale. La collezione di Layout Divi è in continua fase di aggiornamento. Aggiungiamo più di 20 nuovi prodotti al mese!
Mostra/Nascondi Commenti (0 commenti)
L

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato.

Ti potrebbe anche interessare…

Header Divi sfondo

3 Layout Divi in regalo!

Per tutto il mese di ottobre, ti regaliamo un pacchetto che include 3 layout Divi da scaricare gratuitamente.

Grazie!