Responsive menu/submenu with div contents

Hi everybody!
I was looking at the implementation in:

I would like to add some divs in the html, that are initially hidden. Once the user clicks on menu item/subitem the respective div appears based on an id. Any suggestions?

It’s probably best to do it with some JS to toggle the display of the element.

Add a class of .destination to the menu items as required and supply the destination ID in the href.

e.g.

<li class="menu-item"><a class="destination" href="#section1">Big Widgets</a></li>
 <li class="menu-item"><a class="destination" href="#section2">Bigger Widgets</a></li>

... and so on....

Then the html would be something like.

<main class="main">
  <section id="section1" class="section s1">
    <h2>Section 1 big Widgets</h2>  
  </section>
  
    <section id="section2" class="section s2">
    <h2>Section 2 Bigger Widgets</h2>  
  </section>

etc...
   
</main>

Then call it with some JS.

(function (d) {
  "use strict";

  const menu = d.querySelectorAll(".destination");
  const section = d.querySelectorAll(".section");

  //hide all by default
  section.forEach((item) => {
    item.classList.add("hide");
  });

  menu.forEach((item) => {
    item.addEventListener("click", (event) => {
      hideAll();
      showDiv(item.hash);
    });
  });

  function hideAll() {
    section.forEach((item) => {
      item.classList.add("hide");
      item.classList.remove("active");
    });
  }

  function showDiv(targetDiv) {
    d.querySelector(targetDiv).classList.add("active");
  }
})(document);

Lastly some CSS to style it.

.menu{
  height:60px;/* this will be needed otherwise the page will jump with the expanding menu */
}
.main{
  max-width:1080px;
  margin:auto;
}
.section{
  padding:1rem;
  background:#ccc;
}
.section.hide{display:none;}
.section.active{
  display:block;
}

That’s the basics anyway.

Here’s a codepen that demonstrates the above although it has a couple of extra functions to highlight the nav and to turn off the current one.

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.