CSS3 media queries结合jQuery实现响应式导航


Posted in Javascript onSeptember 30, 2016

目的:

实现一个响应式导航,当屏幕宽度大于700px时,效果如下:

CSS3 media queries结合jQuery实现响应式导航

当屏幕宽度小于700px时,导航变成一个小按钮,点击之后有一个菜单慢慢拉下来:

 CSS3 media queries结合jQuery实现响应式导航

思路:

1.为了之后在菜单上绑定事件,并且不向DOM中添加多余的节点,在大屏幕中出现的导航和小屏幕中的下拉导航必须是一个。

   所以我选择了将导航绝对定位。

2.默认导航列表是出现的,当屏幕宽度小于700px时它隐藏,并且设置position,当屏幕宽度大于700px时,它出现。或者,默认导航列表是隐藏的,当屏幕宽度大于700px时它出现在右侧,小于时隐藏。

问题:

开始的时候,我选择了默认他出现,然后出现了一个问题——只要按过了按钮,屏幕放大之后导航列表就再也不会出现了。

代码如下:

<div 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>
</div>
.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);
  });
}

于是我以为是我的思路出现了问题,我换成了默认他隐藏的方式。结果还是一样,只要按过了按钮,他就再也不会出现了。于是我开始怀疑jQuery。

解决:

然后我在F12中发现,我按过按钮之后,他会出现这样一个样式:

CSS3 media queries结合jQuery实现响应式导航

原来这一切都是slideToggle搞的鬼,他是通过设置元素的内联样式让元素隐藏,这种方法设置的样式的优先级是三种方式中最高的,所以在CSS中设置的block根本没有用了。

要解决这个问题,可以使用js,也可以用一个优先级更高的方式:!important.

如果选择用!important的话,就需要设置导航列表是默认隐藏的,不然他永远都无法隐藏了。

最后的CSS代码如下:

.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;
  }
}

总结:

不真正理解一个框架的原理就去用,是很危险的。

我之后试了一个jQuery的.css()方法,他同样是用内联的方式改变的元素的样式。

看样子需要研究一个jQuery是如何工作的了,这样应用的时候才能理解他的行为。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 写的一个简单的timer
Jul 30 Javascript
运算符&amp;&amp;的三个不同层次
Apr 07 Javascript
Javascript学习笔记之数组的构造函数
Nov 23 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
jQuery+PHP星级评分实现方法
Oct 02 Javascript
Bootstrap按钮组件详解
Apr 26 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 Javascript
Bootstrap表格使用方法详解
Feb 17 Javascript
JavaScript Uploadify文件上传实例
Feb 28 Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 Javascript
AngularJS 前台分页实现的示例代码
Jun 07 Javascript
小程序实现文字循环滚动动画
Jun 14 Javascript
微信小程序 LOL 英雄介绍开发实例
Sep 30 #Javascript
javascript的几种写法总结
Sep 30 #Javascript
Vue.js实现拖放效果的实例
Sep 30 #Javascript
PHP抓取HTTPS内容和错误处理的方法
Sep 30 #Javascript
Vue.js动态添加、删除选题的实例代码
Sep 30 #Javascript
关于List.ToArray()方法的效率测试
Sep 30 #Javascript
微信小程序 window_x64环境搭建
Sep 30 #Javascript
You might like
PHP 第三节 变量介绍
2012/04/28 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
页面使用密码保护代码
2013/04/10 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
TensorFlow实现Logistic回归
2018/09/07 Python
由面试题加深对Django的认识理解
2019/07/19 Python
Django REST framework 视图和路由详解
2019/07/19 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
大学生实习感言
2014/01/16 职场文书
员工保密承诺书
2014/05/28 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP