Search code examples
htmlcssnavigationnavbarmegamenu

Mega Menu Responsive Nav Help (no bootstrap)


I am trying to create a very generic mega menu using pure html/css without using bootstrap (for some reason there is no tutorial online, so I am making one myself). I have managed to style my nav correctly and it works responsively, but I can't figure out how to make the mobile version give me a menu option instead of providing all the links as they currently are. I will post the code below and if I anyone can show me what to add to make it happen that'd be awesome!

<div class="menu style">
            <ul class="menu">
            <!-- Mega Menu start. copy section between comments to create new heading-->
                <li><a href="#">Option 1</a>
                    <div class="mega-menu">
                        <div class="col-1">
                            <h4>Header 1</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                        <div class="col-1">
                            <h4>Header 2</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                        <div class="col-1">
                            <h4>Header 3</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                         <div class="col-1">
                            <h4>Header 4</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                    </div>
                    <li><a href="#">Option 2</a>
                    <div class="mega-menu">
                        <div class="col-1">
                            <h4>Header 1</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                        <div class="col-1">
                            <h4>Header 2</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                        <div class="col-1">
                            <h4>Header 3</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                    </div>
                    <li><a href="#">Option 3</a>
                    <div class="mega-menu">
                        <div class="col-1">
                            <h4>Header 1</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                        <div class="col-1">
                            <h4>Header 2</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                        <div class="col-1">
                            <h4>Header 3</h4>
                                <ol>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                    <li><a href="#">Content</a></li>
                                </ol>
                        </div>
                    </div></ul></div>

Here is the CSS

    @font-face {
    font-family: 'raleway';
    src: url(fonts/raleway/raleway.ttf) format('truetype');
    src: url(fonts/raleway/raleway.otf) format('opentype');
    src: url(fonts/raleway/raleway.woff) format('woff');
}

.menu{
    display:block;
    position:relative;
}
.menu,.menu ul{
    margin:0;padding:0;
    list-style:none;
    position:relative
    }
.menu ul a{float:left}

.menu .mega-menu a{
    float:none;
    padding:0
}

.menu .mega-menu,.menu .mega-menu ol li{
    opacity:0;
    visibility:hidden;
    display:none ! important/9;
}

.menu li:hover>.mega-menu,.menu li:hover>.mega-menu ol li{
    opacity:1;
    visibility:visible;
    display:block ! important/9
}

.menu ul:after{
    content:"";
    clear:both;
    display:block}

.menu ul li{
    float:left;
}
/*Main heading css*/
.menu ul li a{
    display:block;
    padding:14px 20px 15px 20px;
    font-family:'raleway',arial,sans-serif;
    color:#fff;
    font-size:1.1em;
    font-weight:bold;
    text-decoration:none
}
/*dropdown section css*/
.mega-menu{
    position:absolute;
    top:100%;
    padding:18px 11px;
    background-color:rgba(0,0,0,.8)
}

.mega-menu ol{
    list-style:none;
    padding:0
}

.mega-menu ol li{width:100%;}
/*dropdown section text css*/
.mega-menu ol li a{
    font-size:.9em;
    line-height:18px;
    }
.mega-menu ol li:hover,.mega-menu ol li a{
    color:#fff;
    padding:0;
    background-image:none
}

/*sub header css*/
.mega-menu div h4{
    font-family:'raleway',arial,sans-serif;
    font-size:1.15em;
    font-weight:bold;
    color:#f7b50d;
    border-bottom:1px solid #e4e4e4;
    padding:0 0 8px 0;
    margin:0 0 10px 0
}

.mega-menu .col-1{width:135px}

.mega-menu .col-1{
    float:left;
    margin:0 9px
}


@media only screen and (max-width: 767px){

    .menu ul li{
        width:100%;
    }

    .menu ul li{position:relative}

    .menu .mega-menu ol li{height:0}

    .menu li:hover>.mega-menu ol li{height:auto}

    .mega-menu,.menu ul ul{z-index:100}

    .mega-menu{padding:18px 0}

    .mega-menu ol li:last-child{margin:0 0 10px 0}

    .menu .col-1{
        float:left;
        margin:0 0 0 5%;width:90%
    }
} 

/*Also main heading css*/
.style.menu, .style-1.menu ul li  {
    background-color: #333; 
    border-top:1px solid #f7b50d;
    border-bottom:1px solid #f7b50d;
} 
    .style.menu ul li a:hover {
        color:#f7b50d;
}

Here is a link to a codepen I made of it too. Code Pen Link


Solution

  • Updated your code with a hamburger menu under mobile screen, made the drop down static positioned as it won't overlap on other menus.

    Check out this snippet. Run this is both large and small screens. I think this is what you are looking for.

    jQuery(function($) {
      $('.menu-btn').click(function() {
        $('.menu.style').toggleClass("open");
      })
    })
    @font-face {
      font-family: 'raleway';
      src: url(fonts/raleway/raleway.ttf) format('truetype');
      src: url(fonts/raleway/raleway.otf) format('opentype');
      src: url(fonts/raleway/raleway.woff) format('woff');
    }
    .menu {
      display: block;
      position: relative;
    }
    .menu,
    .menu ul {
      margin: 0;
      padding: 0;
      list-style: none;
      position: relative
    }
    .menu ul a {
      float: left
    }
    .menu .mega-menu a {
      float: none;
      padding: 0
    }
    .menu .mega-menu,
    .menu .mega-menu ol li {
      opacity: 0;
      visibility: hidden;
      display: none ! important/9;
    }
    .menu li:hover>.mega-menu,
    .menu li:hover>.mega-menu ol li {
      opacity: 1;
      visibility: visible;
      display: block ! important/9
    }
    .menu ul:after {
      content: "";
      clear: both;
      display: block
    }
    .menu ul li {
      float: left;
    }
    /*Main heading css*/
    
    .menu ul li a {
      display: block;
      padding: 14px 20px 15px 20px;
      font-family: 'raleway', arial, sans-serif;
      color: #fff;
      font-size: 1.1em;
      font-weight: bold;
      text-decoration: none
    }
    /*dropdown section css*/
    
    .mega-menu {
      position: absolute;
      top: 100%;
      padding: 18px 11px;
      background-color: rgba(0, 0, 0, .8)
    }
    .mega-menu ol {
      list-style: none;
      padding: 0
    }
    .mega-menu ol li {
      width: 100%;
    }
    /*dropdown section text css*/
    
    .mega-menu ol li a {
      font-size: .9em;
      line-height: 18px;
    }
    .mega-menu ol li:hover,
    .mega-menu ol li a {
      color: #fff;
      padding: 0;
      background-image: none
    }
    /*sub header css*/
    
    .mega-menu div h4 {
      font-family: 'raleway', arial, sans-serif;
      font-size: 1.15em;
      font-weight: bold;
      color: #f7b50d;
      border-bottom: 1px solid #e4e4e4;
      padding: 0 0 8px 0;
      margin: 0 0 10px 0
    }
    .mega-menu .col-1 {
      width: 135px
    }
    .mega-menu .col-1 {
      float: left;
      margin: 0 9px
    }
    @media only screen and (max-width: 767px) {
      .menu ul li {
        width: 100%;
      }
      .menu ul li {
        position: relative
      }
      .menu .mega-menu ol li {
        height: 0
      }
      .menu li:hover>.mega-menu ol li {
        height: auto
      }
      .mega-menu,
      .menu ul ul {
        z-index: 100
      }
      .mega-menu {
        padding: 18px 0
      }
      .mega-menu ol li:last-child {
        margin: 0 0 10px 0
      }
      .menu .col-1 {
        float: left;
        margin: 0 0 0 5%;
        width: 90%
      }
    }
    /*Also main heading css*/
    
    .style.menu,
    .style-1.menu ul li {
      background-color: #333;
      border-top: 1px solid #f7b50d;
      border-bottom: 1px solid #f7b50d;
    }
    .style.menu ul li a:hover {
      color: #f7b50d;
    }
    /* new css */
    
    .menu-btn {
      display: none;
    }
    @media only screen and (max-width: 768px) {
      .menu.style {
        padding: 15px 0;
      }
      .menu-btn {
        display: block;
        margin-top: 10px;
        margin-left: 10px;
      }
      ul.menu {
        display: none;
      }
      .open ul.menu {
        display: block;
      }
      .menu li:hover > .mega-menu {
        position: static;
      }
    }
    .menu-btn div {
      position: absolute;
      left: 100%;
      top: 64%;
      padding-right: 8px;
      margin-top: -0.50em;
      line-height: 1.2;
      font-size: 18px;
      font-weight: 200;
      vertical-align: middle;
      z-index: 99;
    }
    .menu-btn span {
      display: block;
      width: 19px;
      height: 3px;
      margin: 4px 0;
      background: rgb(0, 0, 0);
      z-index: 99;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <div class="menu style">
      <div class="mobile-nav">
        <div class="menu-btn" id="menu-btn">
          <div></div>
          <span></span>
          <span></span>
          <span></span>
        </div>
        <ul class="menu">
          <!-- Mega Menu start. copy section between comments to create new heading-->
          <li><a href="#">Option 1</a>
            <div class="mega-menu">
              <div class="col-1">
                <h4>Header 1</h4>
                <ol>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                </ol>
              </div>
              <div class="col-1">
                <h4>Header 2</h4>
                <ol>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                </ol>
              </div>
              <div class="col-1">
                <h4>Header 3</h4>
                <ol>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                </ol>
              </div>
              <div class="col-1">
                <h4>Header 4</h4>
                <ol>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                  <li><a href="#">Content</a>
                  </li>
                </ol>
              </div>
            </div>
            <li><a href="#">Option 2</a>
              <div class="mega-menu">
                <div class="col-1">
                  <h4>Header 1</h4>
                  <ol>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                  </ol>
                </div>
                <div class="col-1">
                  <h4>Header 2</h4>
                  <ol>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                  </ol>
                </div>
                <div class="col-1">
                  <h4>Header 3</h4>
                  <ol>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                    <li><a href="#">Content</a>
                    </li>
                  </ol>
                </div>
              </div>
              <li><a href="#">Option 3</a>
                <div class="mega-menu">
                  <div class="col-1">
                    <h4>Header 1</h4>
                    <ol>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                    </ol>
                  </div>
                  <div class="col-1">
                    <h4>Header 2</h4>
                    <ol>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                    </ol>
                  </div>
                  <div class="col-1">
                    <h4>Header 3</h4>
                    <ol>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                      <li><a href="#">Content</a>
                      </li>
                    </ol>
                  </div>
                </div>