2

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

aroveruser
  • 23
  • 3

2 Answers2

1

Now used to this define to your .mega-menu position static

as like this

@media only screen and (max-width: 767px){
  .menu li:hover .mega-menu{position:static;}
}

Demo

@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 li:hover .mega-menu{position:static;}
 
 .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;
}
<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>
Rohit Azad Malik
  • 31,410
  • 17
  • 69
  • 97
1

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>
Jinu Kurian
  • 9,128
  • 3
  • 27
  • 35
  • 1
    This was exactly what I was looking for! Thank you so much! Navigation menus have always been a weakness for me when it comes to being responsive. I will use this for the future and I will create a free tutorial on this for others (I will credit you with the assist!) Thanks. On a side note, I would love to figure out how to make the main nav option disappear and place the hamburger button in the top right corner instead. The site I am working on has a huge banner on the home page right above the main nav, so clearing that space on mobile would be great, but I will figure that out myself. – aroveruser Dec 21 '15 at 22:03
  • Effiecient use of media query in your css is the right way to do responsive design. – Jinu Kurian Dec 22 '15 at 02:18