aroveruser
aroveruser

Reputation: 23

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

Upvotes: 2

Views: 1103

Answers (2)

Jinu Kurian
Jinu Kurian

Reputation: 9406

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>

Upvotes: 1

Rohit Azad Malik
Rohit Azad Malik

Reputation: 32152

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>

Upvotes: 1

Related Questions