1

I am trying a simple responsive menu with Css and jQuery. I want the jQuery script to work only on a certain window width. When I resize the browser. Here is my code.

$(document).ready(function(){
	 	$(".resmenu").click(function(){
	 		$(".menu").slideToggle();
	 	}); 

	 	$(".submenu").click(function(){
	 		$(this).toggleClass("active_submenu");
	 		$(this).parent().find(".dropdown").slideToggle();
	 	}); 

	 });
.container {
	width:980px;
	margin:100px auto 0 auto;
	font-family:arial;
}

ul, li {
	margin:0;
	padding:0;
}

.resmenu {
	display:none;
}

.menu li {
	display: inline-block;
	position: relative;
}
.menu li a {
	font-size: 14px;
	text-transform: uppercase;
	color: #3b2612;
	padding: 6px 17px;
	letter-spacing: 1px;
	display: block;
	text-decoration: none;
}
.menu li:hover a {
	background: #444;
	color: #fff !important;
}


.menu li ul {
	position: absolute;
	width: 250px;
	z-index: 5;
	left: 0px;
	top:28px;
	display:none;
	
}
.menu li:hover ul {
	display:block;
}
.menu li ul li {
	display: block;
}

.menu li ul li a {
	padding: 6px 17px;
	transition: all 0.2s;
	text-transform: capitalize;
}
.menu li ul li a:hover {
	background: #000;
}


/*--- responsive ----*/
@media screen and (max-width:768px) {

.resmenu {
	color: #fff !important;
	display: block;
	text-decoration: none !important;
	background: #6ca2bd;
	padding: 5px 10px;
}
.menu {
	display: none;
	background: #444444;
}
.menu li {
	position: relative;
	display: block;
}
.menu li a {
	color: #fff;
	font-size:14px;
	padding: 6px 17px;
}
.menu li a:hover {
	background-color: #000;
	color: #000;
	transition: all 0.3s;
}
.active_submenu {
	background-color: #ceb689 !important;
	color: #fff !important;
}

.menu li ul {
	display: none;
	width: 100%;
	position: relative;
	top: 0px;
	display:none;
	
}
.menu li:hover ul {
	display: none;
	top: 0px;
}
	
.menu li a.active {
	color: #fff;
	font-family: 'opensanssemibold';
}
	
.menu li ul li a {
	background:#333;
}


}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
   <div class="btm_header">
						 <a href="javascript:void();" class="resmenu">Menu</a>
       
        <ul class="menu">
          <li><a href="#">Menu</a></li>
          <li><a href="javascript:void(0);" class="submenu">Dropdown One  <span></span></a>
            <ul class="dropdown">
              <li><a href="#">Dropdown</a></li>
              <li><a href="#">Dropdown</a></li>
              <li><a href="#">Dropdown</a></li>
              <li><a href="#">Dropdown</a></li>
            </ul>
          </li>
          <li><a href="javascript:void(0);" class="submenu">Dropdown Two <span></span></a>
			  <ul class="dropdown">
			  <li><a href="#">Dropdown</a></li>
              <li><a href="#">Dropdown</a></li>
              <li><a href="#">Dropdown</a></li>
              <li><a href="#">Dropdown</a></li>
			  </ul>
          </li>
          <li><a href="#">Menu</a></li>
          <li><a href="#">Menu</a></li>
        </ul>
					</div>
</div>

It is working on 768px screen size, but when I click on the drop-down link instead of hover on more than 768 screen size, the drop down link is slide toggle. I need this script work on certain width only.

2 Answers 2

1

Use $(window).width() to get the width of the screen and use it in your condition:

if ($(window).width() < 768) {
         // run your code here
}

See code snippet:

$(document).ready(function() {
  $(".resmenu").click(function() {
    $(".menu").slideToggle();
  });

  $(".submenu").click(function() {
    if ($(window).width() < 768) {
      $(this).toggleClass("active_submenu");
      $(this).parent().find(".dropdown").slideToggle();
    }
  });

});
.container {
  width: 980px;
  margin: 100px auto 0 auto;
  font-family: arial;
}

ul,
li {
  margin: 0;
  padding: 0;
}

.resmenu {
  display: none;
}

.menu li {
  display: inline-block;
  position: relative;
}

.menu li a {
  font-size: 14px;
  text-transform: uppercase;
  color: #3b2612;
  padding: 6px 17px;
  letter-spacing: 1px;
  display: block;
  text-decoration: none;
}

.menu li:hover a {
  background: #444;
  color: #fff !important;
}

.menu li ul {
  position: absolute;
  width: 250px;
  z-index: 5;
  left: 0px;
  top: 28px;
  display: none;
}

.menu li:hover ul {
  display: block;
}

.menu li ul li {
  display: block;
}

.menu li ul li a {
  padding: 6px 17px;
  transition: all 0.2s;
  text-transform: capitalize;
}

.menu li ul li a:hover {
  background: #000;
}


/*--- responsive ----*/

@media screen and (min-width:769px) {
  .menu {
    display: block!important;
  }
}

@media screen and (max-width:768px) {
  .resmenu {
    color: #fff !important;
    display: block;
    text-decoration: none !important;
    background: #6ca2bd;
    padding: 5px 10px;
  }
  .menu {
    display: none;
    background: #444444;
  }
  .menu li {
    position: relative;
    display: block;
  }
  .menu li a {
    color: #fff;
    font-size: 14px;
    padding: 6px 17px;
  }
  .menu li a:hover {
    background-color: #000;
    color: #000;
    transition: all 0.3s;
  }
  .active_submenu {
    background-color: #ceb689 !important;
    color: #fff !important;
  }
  .menu li ul {
    display: none;
    width: 100%;
    position: relative;
    top: 0px;
    display: none;
  }
  .menu li:hover ul {
    display: none;
    top: 0px;
  }
  .menu li a.active {
    color: #fff;
    font-family: 'opensanssemibold';
  }
  .menu li ul li a {
    background: #333;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="btm_header">
    <a href="#" class="resmenu">Menu</a>

    <ul class="menu">
      <li><a href="#">Menu</a></li>
      <li><a href="javascript:void(0);" class="submenu">Dropdown One  <span></span></a>
        <ul class="dropdown">
          <li><a href="#">Dropdown</a></li>
          <li><a href="#">Dropdown</a></li>
          <li><a href="#">Dropdown</a></li>
          <li><a href="#">Dropdown</a></li>
        </ul>
      </li>
      <li><a href="javascript:void(0);" class="submenu">Dropdown Two <span></span></a>
        <ul class="dropdown">
          <li><a href="#">Dropdown</a></li>
          <li><a href="#">Dropdown</a></li>
          <li><a href="#">Dropdown</a></li>
          <li><a href="#">Dropdown</a></li>
        </ul>
      </li>
      <li><a href="#">Menu</a></li>
      <li><a href="#">Menu</a></li>
    </ul>
  </div>
</div>

Sign up to request clarification or add additional context in comments.

2 Comments

after click for toggle responsive menu when i resize the browser to more than 768 resolution, the entire menu is hiding.
@MahmoodMohammed i fixed the problem...see my answer :)
0

In css change "container" width to 100%, and set max-width to 980px.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.