CMS Development

MadameButterfly
Member

Hamburger Menu & Editing Mobile View

SOLVE

Hi Guys, 

I need help with the following please: 

The header on my website currently looks like this on mobile:

MadameButterfly_1-1725368955877.png

 

I need help adding a hamburger menu next to my logo or I need assistance putting the original menu items on 1 line so that its not stacked. 

Thanks,
Sonali 

 

0 Upvotes
1 Accepted solution
Anton
Solution
Thought Leader | Partner
Thought Leader | Partner

Hamburger Menu & Editing Mobile View

SOLVE

Hi @MadameButterfly
in order to implement a burger, you will need to edit (at least) following files:

  • a CSS(most likely the header.css)
  • header.html (global partial)
  • your JavaScript file (if you don't want to make a pure CSS burger menu)

 

My personal approach is to have something like this:

header.html:

{# Desktop header #}
<header class="desktop-header">
   <div class="inner-wrapper">
      <div class="logo-wrapper">
         <a href="{{ brand_settings.primaryLogo.link }}">
            <img src="{{ brand_settings.primaryLogo.src }}" alt="{{ brand_settings.primaryLogo.alt }}" aria-label="{{ brand_settings.primaryLogo.alt }}" class="logo">
         </a>
      </div>
      <div class="navigation-wrapper">
         {% module 'main_navigation' path="@hubspot/menu", label="Main navigation" %}
      </div>
   </div>
</header>

{# Mobile header #}
<header class="mobile-header">
   <div class="inner-wrapper">
      <div class="logo-wrapper">
         <a href="{{ brand_settings.primaryLogo.link }}">
            <img src="{{ brand_settings.primaryLogo.src }}" alt="{{ brand_settings.primaryLogo.alt }}" aria-label="{{ brand_settings.primaryLogo.alt }}" class="logo">
         </a>
      </div>
      <div class="navigation-wrapper">
         <i class="mobile-nav-trigger"></i>
         <div class="main-nav">
            {% module 'main_navigation' path="@hubspot/menu", label="Main navigation" %} 
         </div>
      </div>
   </div>
</header>

 

header.css(which is getting included in the main.css which is getting loaded before the theme-overrides.css)

.mobile-header{
   display:block;
   width:100vw;
}

.desktop-header{
   display:none;
}

.mobile-header .main-nav{
   display:none;
}

.mobile-header .main-nav.open{
   display:block;
}

@media screen and (min-width:1024px){
.mobile-header{
   display:none;
}

.desktop-header{
   display:block;
   width:100vw;
}
}

 

the JS(which is also being loaded in the main theme file):

const mobileTrigger = document.querySelector('.mobile-nav-trigger');
const mainNav = document.querySelector('.main-nav');

mobileTrigger.addEventListener('click', function() {
    mainNav.classList.toggle('open');
});

 

Depending on various variables like 

  • the theme you're using
  • your desired functionality
  • ...

it might be more to it than the code above.

 

 

Also - if you need dev support, feel free to drop me a DM

 

 

best, 

Anton

Anton Bujanowski Signature

View solution in original post

0 Upvotes
2 Replies 2
GiantFocal
Participant | Partner
Participant | Partner

Hamburger Menu & Editing Mobile View

SOLVE

Hi @MadameButterfly,

 

The implementation depends on how the website and the header are developed. 

This involves updating the header, adding CSS and JS, and fixing conflicts with existing CSS/JS (if applicable); there is no single "copy-paste" solution for this.

 

If you need help with the implementation, feel free to contact us. 

Best regards,
Abraham Ernesto
Found this answer helpful?
Marking it as the solution helps both the community and me - thanks in advance!

Need help with your HubSpot project?


0 Upvotes
Anton
Solution
Thought Leader | Partner
Thought Leader | Partner

Hamburger Menu & Editing Mobile View

SOLVE

Hi @MadameButterfly
in order to implement a burger, you will need to edit (at least) following files:

  • a CSS(most likely the header.css)
  • header.html (global partial)
  • your JavaScript file (if you don't want to make a pure CSS burger menu)

 

My personal approach is to have something like this:

header.html:

{# Desktop header #}
<header class="desktop-header">
   <div class="inner-wrapper">
      <div class="logo-wrapper">
         <a href="{{ brand_settings.primaryLogo.link }}">
            <img src="{{ brand_settings.primaryLogo.src }}" alt="{{ brand_settings.primaryLogo.alt }}" aria-label="{{ brand_settings.primaryLogo.alt }}" class="logo">
         </a>
      </div>
      <div class="navigation-wrapper">
         {% module 'main_navigation' path="@hubspot/menu", label="Main navigation" %}
      </div>
   </div>
</header>

{# Mobile header #}
<header class="mobile-header">
   <div class="inner-wrapper">
      <div class="logo-wrapper">
         <a href="{{ brand_settings.primaryLogo.link }}">
            <img src="{{ brand_settings.primaryLogo.src }}" alt="{{ brand_settings.primaryLogo.alt }}" aria-label="{{ brand_settings.primaryLogo.alt }}" class="logo">
         </a>
      </div>
      <div class="navigation-wrapper">
         <i class="mobile-nav-trigger"></i>
         <div class="main-nav">
            {% module 'main_navigation' path="@hubspot/menu", label="Main navigation" %} 
         </div>
      </div>
   </div>
</header>

 

header.css(which is getting included in the main.css which is getting loaded before the theme-overrides.css)

.mobile-header{
   display:block;
   width:100vw;
}

.desktop-header{
   display:none;
}

.mobile-header .main-nav{
   display:none;
}

.mobile-header .main-nav.open{
   display:block;
}

@media screen and (min-width:1024px){
.mobile-header{
   display:none;
}

.desktop-header{
   display:block;
   width:100vw;
}
}

 

the JS(which is also being loaded in the main theme file):

const mobileTrigger = document.querySelector('.mobile-nav-trigger');
const mainNav = document.querySelector('.main-nav');

mobileTrigger.addEventListener('click', function() {
    mainNav.classList.toggle('open');
});

 

Depending on various variables like 

  • the theme you're using
  • your desired functionality
  • ...

it might be more to it than the code above.

 

 

Also - if you need dev support, feel free to drop me a DM

 

 

best, 

Anton

Anton Bujanowski Signature
0 Upvotes