Home >Web Front-end >CSS Tutorial >CSS3 media queries combined with jQuery to implement responsive navigation
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>
.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; } }
window.onload=function(){ $(".nav-btn").click(function(){ $(".nav").slideToggle(500); }); }
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; } }
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.