MmenuLight.prototype.offcanvas = offcanvas;
const menuID = 'mobile-menu';
+let menuOpen = false;
document.addEventListener(
'DOMContentLoaded', () => {
// Open / Close Menu handlers
document.querySelector(`a[href="#menu"]`)
.addEventListener('click', (event) => {
- mmenu.open();
- event.preventDefault();
- event.stopPropagation();
-
- if (null === document.querySelector('#close-menu')) {
-
- //nav.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" id="close-menu" viewBox="0 0 30 30"><path d="M16 15L29.3 1.8c.3-.3.3-.8 0-1-.3-.3-.8-.3-1 0L15 14 1.8.7C1.5.4 1 .4.8.7c-.3.3-.3.8 0 1L14 15 .7 28.2c-.3.3-.3.8 0 1 .1.1.3.2.5.2s.4-.1.5-.2L15 16l13.2 13.2c.1.1.3.2.5.2s.4-.1.5-.2c.3-.3.3-.8 0-1L16 15z" fill="currentColor"/></svg>' + nav.innerHTML;
-
- nav.innerHTML = '<button id="close-menu"></button>' + nav.innerHTML;
-
- document.querySelector('#close-menu').addEventListener('click', (event) => {
- mmenu.close();
- });
+ if (menuOpen) {
+ mmenu.close();
+ menuOpen = false;
+ } else {
+ mmenu.open();
+ menuOpen = true;
}
+
+ event.preventDefault();
+ event.stopPropagation();
});
+
+ // Menu can be closed by clicking outside so we can't rely on the menu button setting the closed state
+ document.getElementById(menuID).addEventListener('mm:close', (event) => {
+ menuOpen = false;
+ });
});
function buildMobileMenu() {
&:hover
@apply bg-teal-light
+ // Button sizes
&.elementor-size-sm
@apply text-sm
&.elementor-size-md
&.elementor-size-xl
@apply text-xl
+// Button styles
+.elementor-element.elementor-button-info .elementor-button
+ @apply bg-teal
+
//&-text
// @apply z-10 relative
width: 100%
background-color: transparent
z-index: 20
+
+.header-cta
+ padding: 1em 1.8em
+ line-height: 1.1
+$menu-header-height = 90px
+
:root
--mm-width: 90%
--mm-max-width: 308px
@apply bg-purple-dark text-white antialiased
font-size: 16px fixed
- // Submenu header
+ // < Submenu header arrow
+ &:before
+ top: ($menu-header-height / 2)
+ // Submenu header content
&:after
- @apply font-display uppercase
+ @apply flex items-center font-display uppercase
+ height: $menu-header-height
opacity: 0.7
box-shadow: none
border-bottom: 1px solid rgba(#fff, 0.2)
.menu-item
margin-left: 36px
- .menu-list
+ .menu-list, .mm--open
@apply bg-purple-dark
- top: 90px // Space for close button + padding
+ top: $menu-header-height // Space for close button + padding
.menu-item
@apply bg-purple-dark text-white font-display uppercase
// Buttons
.cta-button
a
+ @apply font-display font-medium subpixel-antialiased
display: flex
- padding-left: 16px
+ padding-left: 1em
+ font-size: inherit
//img
// height: 20px
@apply text-pink
-// Close button
-#close-menu
- padding: 0
- position: absolute
- top: 30px
- right: @top
- width: 30px
- height: @width
- z-index: 1
- cursor: pointer
- outline: none
- display: none
- transition: color 0.2s
-
- &:after
- display: none
-
- &:hover
- @apply text-pink
-
- // Only display at the top level of the menu
- .mm--main &
- display: block
-
//==================
// Burger menu icon + animation
flex-direction: column
justify-content: space-between
z-index: 10000 // Needs to sit above MMenu
+ pointer-events: auto // MMenu disables pointer events outside the menu when it's open
+above($breakpoint-menu)
display: none
&:hover
- @apply text-pink
+ @apply text-pink !important
&:after, &:before, div // 3 lines in burger icon
content: ''
@apply flex
.menu-item
- @apply block mx-5 relative
+ @apply block mx-5 relative cursor-pointer
@apply border-b-2 border-transparent // Reserve space for active border
@apply py-1 leading-tight // Adjust active border spacing