CSS3 media queries combined with jQuery to implement responsive navigation

高洛峰
Release: 2016-10-09 16:18:17
Original
1210 people have browsed it

This article mainly introduces CSS3 media queries combined with jQuery to implement responsive navigation in detail. It has certain reference value. Interested friends can refer to it

Purpose:

To implement a responsive navigation when the screen width When it is greater than 700px, the effect is as follows:

When the screen width is less than 700px, the navigation becomes a small button, and after clicking it, a menu slowly pulls down:

Ideas:

1. In order After binding events on the menu, and without adding extra nodes to the DOM, the navigation that appears in the large screen and the drop-down navigation in the small screen must be one.

So I chose to position the navigation absolutely.

2. The default navigation list appears. When the screen width is less than 700px, it hides, and the position is set. When the screen width is greater than 700px, it appears. Alternatively, the default navigation list is hidden, it appears on the right when the screen width is larger than 700px, and hidden when smaller than 700px.

Problem:

At the beginning, I chose to appear by default, and then a problem occurred - as long as the button is pressed, the navigation list will never appear again after the screen is zoomed in.

The code is as follows:

<p class="nav-box">
    <ul class="nav">
     <li><a href="javascript:void(0);" class="toHome active">Home</a></li>
     <li><a href="javascript:void(0);" class="toPort">Portfolio</a></li>
     <li><a href="javascript:void(0);" class="toCont">Contact</a></li>
    </ul>
    <a href="javascript:void(0);" class="nav-btn">...</a>
</p>
Copy after login


.nav-box {
  position: relative;
}
.nav-btn {
  display: none;
  color: #DE6B73;
  float: right;
  line-height: 20px;
  margin: 35px 0;
}
.nav {
  display: block ;
  border-top: none;
  position: absolute;
  right: 0;
}
@media(max-width:700px){
  .nav-btn{
    display: inline-block;
  }
}
@media(max-width:700px){
 .nav {
  display: none;
  top: 80px;
  background-color: #F79C9C;
  border-top: 1px solid #FFF;
  line-height: 60px;
 }  
}
Copy after login

window.onload=function(){
  $(".nav-btn").click(function(){
    $(".nav").slideToggle(500);
  });
}
Copy after login

So I thought there was something wrong with my thinking, so I changed to the default way of hiding him. The result is still the same, once the button is pressed, he will never appear again. So I started to doubt jQuery.

Solution:

Then I found in F12 that after I pressed the button, it would have a style like this:

It turned out that all this was caused by slideToggle, which set the content of the element. Linked styles make elements hidden. The style set in this method has the highest priority among the three methods, so the block set in CSS is of no use at all.

To solve this problem, you can use js, or you can use a higher priority method: !important.

If you choose to use !important, you need to set the navigation list to be hidden by default, otherwise it will never be hidden. .

The final CSS code is as follows:

.nav {
  display: none;
  position: absolute;
  right: 10%;
  top: 80px;
  background-color: #F79C9C;
  border-top: 1px solid #FFF;
  line-height: 60px;
}
.nav-btn {
  display: none;
  color: #DE6B73;
  float: right;
  line-height: 20px;
  margin: 35px 0;
}
@media(max-width:700px){
  .nav-btn{
    display: inline-block;
  }
}
@media(min-width:700px){
  .nav {
    display: block !important;
    border-top: none;
    top: 15px;
    right: 0;
  }
}
Copy after login

Summary:

It is very dangerous to use a framework without truly understanding its principles.

I then tried jQuery’s .css() method, which also changed the style of elements inline.

It seems that we need to study how jQuery works so that we can understand its behavior when applying it.

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!