admin管理员组

文章数量:1419963

I am doing mobile first design and with CSS and jQuery I made a drop down hamburger menu that I really like, but what I want to do is make that hamburger go away when the page is displayed on desktop to be replaced with a regular, horizontal nav bar. I was able to make the menu responsive so at least there's a horizontal nav bar that drops down on desktop (instead of the long menu list like on mobile) but I don't want it to drop down at all -- I want it to pletely replace that hamburger icon. I don't know Bootstrap (I'm new) but any advice that uses html, css, and jQuery would be great! Thank you!

Here's my code:

HTML:

<!DOCTYPE html>

<html lang="en">

<head>
<meta charset="utf-8">
<script src="" type="text/javascript"></script>
<script type="text/javascript">google.load("jquery", "1.3.2");</script>
<script src=".10.1.min.js"></script>

<title>hamburgers</title>
</head>

<body>
    <header>

     <span>Shine Design</span>
     <div id="nav-icon4">
      <span></span>
      <span></span>
      <span></span>
     </div>

    </header>

    <div class="menu">
     <ul>
      <a href="#">
       <li>LINK ONE</li>
      </a>
      <a href="#">
       <li>LINK TWO</li>
      </a>
      <a href="#">
       <li>LINK THREE</li>
      </a>
      <a href="#">
       <li>LINK FOUR</li>
      </a>
      <a href="#">
       <li>LINK FIVE</li>
      </a>
     </ul>
    </div>

  </body>
 </html>

JS:

$(document).ready(function(){
  $('#nav-icon4').click(function(){
    $(this).toggleClass('open');
  });
});

CSS:

 @media only screen and (min-width: 300px) {
  #nav-icon4 {
  width: 35px;
  height: 25px;
  float: right;
  margin-top: 15px;
  margin-right: 30px;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .5s ease-in-out;
  -moz-transition: .5s ease-in-out;
  -o-transition: .5s ease-in-out;
  transition: .5s ease-in-out;
  cursor: cell; 
 }

#nav-icon4 span {
 display: block;
 position: absolute;
 height: 5px;
 width: 100%;
 background: darkred;
 border-radius: 7px;
 opacity: 2;
 left: 0;
 -webkit-transform: rotate(0deg);
 -moz-transform: rotate(0deg);
 -o-transform: rotate(0deg);
 transform: rotate(0deg);
 -webkit-transition: .25s ease-in-out;
 -moz-transition: .25s ease-in-out;
 -o-transition: .25s ease-in-out;
 transition: .25s ease-in-out;
}

#nav-icon4 span:nth-child(1) {
 top: 0px;
 -webkit-transform-origin: left center;
 -moz-transform-origin: left center;
 -o-transform-origin: left center;
 transform-origin: left center;
}

#nav-icon4 span:nth-child(2) {
 top: 10px;
 -webkit-transform-origin: left center;
 -moz-transform-origin: left center;
 -o-transform-origin: left center;
 transform-origin: left center;
}

#nav-icon4 span:nth-child(3) {
 top: 20px;
 -webkit-transform-origin: left center;
 -moz-transform-origin: left center;
 -o-transform-origin: left center;
 transform-origin: left center;
}

#nav-icon4.open span:nth-child(1) {
 -webkit-transform: rotate(45deg);
 -moz-transform: rotate(45deg);
 -o-transform: rotate(45deg);
 transform: rotate(45deg);
 top: 0;
 left: 6px;
}

#nav-icon4.open span:nth-child(2) {
 width: 0%;
 opacity: 0;
}

#nav-icon4.open span:nth-child(3) {
 -webkit-transform: rotate(-45deg);
 -moz-transform: rotate(-45deg);
 -o-transform: rotate(-45deg);
 transform: rotate(-45deg);
 top: 25px;
 left: 6px;
}

body {
  font-family: 'Noto Sans', sans-serif;
  margin: 0;
  width: 100%;
  height: 100vh;
  background: #ffffff;
   background-color: black;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

header {
  width: 100%;
  background: #ffffff;
  position: fixed;
  height: 60px;
  line-height: 60px;
  border-bottom: 1px solid #dddddd;
  display: inline-block;
  font-size: 2.1em;
  padding-left: 10px;
}

.menu {
  z-index: 1000000;
  display: none;
  font-weight: bold;
  font-size: 1.2em;
  width: 100%;
  background: #f1f1f1;
  position: fixed;
  margin-top: 60px;
  text-align: center;
  color: black;
 }

.menu ul {
  margin: 0;
  padding: 0;
  list-style-type: none;
  list-style-image: none;
  border-top: #dddddd 1px solid;
 }

.menu li {
  display: block;
  padding: 15px 0 15px 0;
  border-bottom: #dddddd 1px solid;
 }

.menu li:hover {
  display: block;
  background: #585858;
  padding: 15px 0 15px 0;
  border-bottom: #dddddd 1px solid;
  cursor: crosshair;
 }

.menu ul li a {
  text-decoration: none;
  margin: 0px;
  color: black;
 }

.menu ul li a:hover {
  color: white;
  text-decoration: none;
 }

.menu a {
  text-decoration: none;
  color: black;
 }

.menu a:hover {
  text-decoration: none;
  color: white;
  }
 }


@media only screen and (min-width: 601px) {    
   header {
    font-size: 1.5em;
 }

   ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
    overflow: hidden;
 }

  li {
    float: right;
    margin-left: 15px;
    margin-right: 25px;
 }

  li a {
    display: block;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
 }
 .menu {
    font-size: .8em;
  }
 }

I am doing mobile first design and with CSS and jQuery I made a drop down hamburger menu that I really like, but what I want to do is make that hamburger go away when the page is displayed on desktop to be replaced with a regular, horizontal nav bar. I was able to make the menu responsive so at least there's a horizontal nav bar that drops down on desktop (instead of the long menu list like on mobile) but I don't want it to drop down at all -- I want it to pletely replace that hamburger icon. I don't know Bootstrap (I'm new) but any advice that uses html, css, and jQuery would be great! Thank you!

Here's my code:

HTML:

<!DOCTYPE html>

<html lang="en">

<head>
<meta charset="utf-8">
<script src="http://www.google./jsapi" type="text/javascript"></script>
<script type="text/javascript">google.load("jquery", "1.3.2");</script>
<script src="http://code.jquery./jquery-1.10.1.min.js"></script>

<title>hamburgers</title>
</head>

<body>
    <header>

     <span>Shine Design</span>
     <div id="nav-icon4">
      <span></span>
      <span></span>
      <span></span>
     </div>

    </header>

    <div class="menu">
     <ul>
      <a href="#">
       <li>LINK ONE</li>
      </a>
      <a href="#">
       <li>LINK TWO</li>
      </a>
      <a href="#">
       <li>LINK THREE</li>
      </a>
      <a href="#">
       <li>LINK FOUR</li>
      </a>
      <a href="#">
       <li>LINK FIVE</li>
      </a>
     </ul>
    </div>

  </body>
 </html>

JS:

$(document).ready(function(){
  $('#nav-icon4').click(function(){
    $(this).toggleClass('open');
  });
});

CSS:

 @media only screen and (min-width: 300px) {
  #nav-icon4 {
  width: 35px;
  height: 25px;
  float: right;
  margin-top: 15px;
  margin-right: 30px;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .5s ease-in-out;
  -moz-transition: .5s ease-in-out;
  -o-transition: .5s ease-in-out;
  transition: .5s ease-in-out;
  cursor: cell; 
 }

#nav-icon4 span {
 display: block;
 position: absolute;
 height: 5px;
 width: 100%;
 background: darkred;
 border-radius: 7px;
 opacity: 2;
 left: 0;
 -webkit-transform: rotate(0deg);
 -moz-transform: rotate(0deg);
 -o-transform: rotate(0deg);
 transform: rotate(0deg);
 -webkit-transition: .25s ease-in-out;
 -moz-transition: .25s ease-in-out;
 -o-transition: .25s ease-in-out;
 transition: .25s ease-in-out;
}

#nav-icon4 span:nth-child(1) {
 top: 0px;
 -webkit-transform-origin: left center;
 -moz-transform-origin: left center;
 -o-transform-origin: left center;
 transform-origin: left center;
}

#nav-icon4 span:nth-child(2) {
 top: 10px;
 -webkit-transform-origin: left center;
 -moz-transform-origin: left center;
 -o-transform-origin: left center;
 transform-origin: left center;
}

#nav-icon4 span:nth-child(3) {
 top: 20px;
 -webkit-transform-origin: left center;
 -moz-transform-origin: left center;
 -o-transform-origin: left center;
 transform-origin: left center;
}

#nav-icon4.open span:nth-child(1) {
 -webkit-transform: rotate(45deg);
 -moz-transform: rotate(45deg);
 -o-transform: rotate(45deg);
 transform: rotate(45deg);
 top: 0;
 left: 6px;
}

#nav-icon4.open span:nth-child(2) {
 width: 0%;
 opacity: 0;
}

#nav-icon4.open span:nth-child(3) {
 -webkit-transform: rotate(-45deg);
 -moz-transform: rotate(-45deg);
 -o-transform: rotate(-45deg);
 transform: rotate(-45deg);
 top: 25px;
 left: 6px;
}

body {
  font-family: 'Noto Sans', sans-serif;
  margin: 0;
  width: 100%;
  height: 100vh;
  background: #ffffff;
   background-color: black;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

header {
  width: 100%;
  background: #ffffff;
  position: fixed;
  height: 60px;
  line-height: 60px;
  border-bottom: 1px solid #dddddd;
  display: inline-block;
  font-size: 2.1em;
  padding-left: 10px;
}

.menu {
  z-index: 1000000;
  display: none;
  font-weight: bold;
  font-size: 1.2em;
  width: 100%;
  background: #f1f1f1;
  position: fixed;
  margin-top: 60px;
  text-align: center;
  color: black;
 }

.menu ul {
  margin: 0;
  padding: 0;
  list-style-type: none;
  list-style-image: none;
  border-top: #dddddd 1px solid;
 }

.menu li {
  display: block;
  padding: 15px 0 15px 0;
  border-bottom: #dddddd 1px solid;
 }

.menu li:hover {
  display: block;
  background: #585858;
  padding: 15px 0 15px 0;
  border-bottom: #dddddd 1px solid;
  cursor: crosshair;
 }

.menu ul li a {
  text-decoration: none;
  margin: 0px;
  color: black;
 }

.menu ul li a:hover {
  color: white;
  text-decoration: none;
 }

.menu a {
  text-decoration: none;
  color: black;
 }

.menu a:hover {
  text-decoration: none;
  color: white;
  }
 }


@media only screen and (min-width: 601px) {    
   header {
    font-size: 1.5em;
 }

   ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
    overflow: hidden;
 }

  li {
    float: right;
    margin-left: 15px;
    margin-right: 25px;
 }

  li a {
    display: block;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
 }
 .menu {
    font-size: .8em;
  }
 }
Share Improve this question asked Apr 23, 2017 at 1:20 SShine2SShine2 651 gold badge2 silver badges11 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 2

If your new, do yourself a favour and learn bootstrap it makes this kind of thing really simple and stops you from reinventing the wheel badly.

Start by looking here ... https://getbootstrap./examples/navbar/ and here: https://getbootstrap./ponents/#navbar

To do what you are wanting you will need to set CSS media queries for the correct display. This is exactly what bootstrap does so if you insist on doing it yourself start with learning about media breakpoints.

/* Custom, iPhone Retina */ 
@media only screen and (min-width : 320px) {

}

/* Extra Small Devices, Phones */ 
@media only screen and (min-width : 480px) {

}

/* Small Devices, Tablets */
@media only screen and (min-width : 768px) {

}

/* Medium Devices, Desktops */
@media only screen and (min-width : 992px) {

}

/* Large Devices, Wide Screens */
@media only screen and (min-width : 1200px) {

}

You'll want to update your CSS to show the hamburger button at the break point you want it to be visible at.

Currently you have it set to be displayed at (min-width: 300px) but it looks like your navigation bees the large screen view at 601px. So you'd want to just make your hamburger display none at 601px as well.

On a separate note though, I see that you've constructed your hamburger as such:

 <div id="nav-icon4">
  <span></span>
  <span></span>
  <span></span>
 </div>

I would highly remend you revise this code to the following:

<button type="button" id="nav-icon4" aria-label="Menu">
  <span></span>
  <span></span>
  <span></span>
</button>

By doing so, the button will be accessible to keyboard users.

本文标签: javascriptDisplay hamburger menu when mobile else desktop nav barStack Overflow